首页 > 解决方案 > sigmoid() 接受 1 个位置参数,但给出了 2 个

问题描述

为什么我会收到此错误

sigmoid() 接受 1 个位置参数,但给出了 2 个

在使用函数 yHat = NN.forward(X)??

class Neural_Networks(object):
    def __init__(self):
        self.inputLayerSize =2
        self.outputLayerSize =1
        self.hiddenLayerSize = 3
        #weights
        self.W1 = np.random.randn(self.inputLayerSize, self.hiddenLayerSize)
        self.W2 = np.random.randn(self.hiddenLayerSize, self.outputLayerSize)

    def forward(self,X):
        #propogates input through network
        self.z2 = np.dot(X, self.W1)
        self.a2 = self.sigmoid( self.z2 )
        self.Z3 = np.dot(self.a2,self.W2)
        yHat = self.sigmoid(self.z3)
        return yHat

    def sigmoid(z):
        return 1/(1+np.exp(-z))

标签: python-3.x

解决方案


您将其用作实例方法,因此您必须将其包含self为第一个参数

class Neural_Networks(object):
    def __init__(self):
        self.inputLayerSize =2
        self.outputLayerSize =1
        self.hiddenLayerSize = 3
        #weights
        self.W1 = np.random.randn(self.inputLayerSize, self.hiddenLayerSize)
        self.W2 = np.random.randn(self.hiddenLayerSize, self.outputLayerSize)

    def forward(self,X):
        #propogates input through network
        self.z2 = np.dot(X, self.W1)
        self.a2 = self.sigmoid( self.z2 )
        self.Z3 = np.dot(self.a2,self.W2)
        yHat = self.sigmoid(self.z3)
        return yHat

    def sigmoid(self, z):
        return 1/(1+np.exp(-z))

相反,如果您想sigmoid用作类方法,则需要向其添加@staticmethod装饰器,例如:

@staticmethod
def sigmoid(z):
    return 1/(1+np.exp(-z))

使其成为静态方法可能是正确的选择,因为您不在方法中使用 self 。


推荐阅读