Python 属性错误:';numpy.ndarray和#x27;对象没有属性';自我';
我开始实现神经网络的后端,但陷入了python代码中。 下面是神经网络的代码。当我在一个应用程序中使用userdefined类时,我得到了一个名为attributeError的错误。请帮我解决这个问题。 我尝试了所有缩进语法,但没有任何效果Python 属性错误:';numpy.ndarray和#x27;对象没有属性';自我';,python,numpy,neural-network,classification,Python,Numpy,Neural Network,Classification,我开始实现神经网络的后端,但陷入了python代码中。 下面是神经网络的代码。当我在一个应用程序中使用userdefined类时,我得到了一个名为attributeError的错误。请帮我解决这个问题。 我尝试了所有缩进语法,但没有任何效果 class NeuralNetwork: def __init__(self,layers,alpha=0.1): self.W=[] self.layers=layers self.
class NeuralNetwork:
def __init__(self,layers,alpha=0.1):
self.W=[]
self.layers=layers
self.alpha=alpha
for i in np.arange(0,len(layers)-2):
w=np.random.randn(layers[i]+1,layers[i+1]+1)
self.W.append(w/np.sqrt(layers[i]))
w=np.random.randn(layers[-2]+1,layers[-1])
self.W.append(w/np.sqrt(layers[-2]))
def __repr__(self):
return "NeuralNetwork: {}".format("-".join(str(l) for l in self.layers ))
def sigmoid(self,x):
#compute and return sigmoid activation for a given input vlaue
return 1.0/(1+np.exp(-x))
def sigmoid_deriv(self,x):
return x*(1-x)
def fit(self,X,y,epochs=1000,displayUpdate=100):
X=np.c_[X,np.ones((X.shape[0]))]
for epoch in np.arange(0,epochs):
for(x,target) in zip(X,y):
self.fit_partial(x,target)
if epoch==0 or (epoch+1)% displayUpdate==0:
loss=self.calculate_loss(X,y)
print("[INFO] epoch={},loss={:.7f}".format(epoch+1,loss))
def fit_partial(self,x,y):
A=[np.atleast_2d(x)]
#FeedForward
for layer in np.arange(0,len(self.W)):
net=A[layer].dot(self.W[layer])
out=self.sigmoid(net)
A.append(out)
#Backward
error=A[-1]-y
D=[error.self.sigmoid_deriv(A[-1])]
for layer in np.arange(len(A)-2,0,-1):
delta=D[-1].dot(self.W[layer].T)
delta=delta*self.sigmoid_deriv(A[layer])
D.append(delta)
D=D[::-1]
for layer in np.arange(0,len(self.W)):
self.W[layer] += -self.alpha*A[layer].T.dot(D[layer])
def predict(self,X,addBias=True):
p=np.atleast_2d(X)
if addBias:
p=np.c_[p,np.ones((p.shape[0]))]
for layer in np.arange(0,len(self.W)):
p=self.sigmoid(np.dot(p,self.W[layer]))
return p
def calculate_loss(self,X,targets):
targets=np.atleast_2d(targets)
predictions=self.predict(X,addBias=False)
loss=0.5*np.sum((predictions-targets)**2)
return loss
下面是一个错误日志,当我在分类问题中使用定义的类运行时,它立即弹出
AttributeError Traceback (most recent call last)
<ipython-input-7-6d9ffad8d4e7> in <module>
1 nn=NeuralNetwork([2,2,1],alpha=0.5)
----> 2 nn.fit(X,y,epochs=20000)
3
4 for (x,target) in zip(X,y):
5 pred=nn.predict(x)[0][0]
D:\BackPropagation\neuralnetwork.ipynb in fit(self, X, y, epochs, displayUpdate)
42 " def sigmoid_deriv(self,x):\n",
43 " return x*(1-x) \n",
---> 44 " \n",
45 " \n",
46 " def fit(self,X,y,epochs=1000,displayUpdate=100):\n",
D:\BackPropagation\neuralnetwork.ipynb in fit_partial(self, x, y)
69 " \n",
70 " \n",
---> 71 " out=self.sigmoid(net)\n",
72 " \n",
73 " A.append(out)\n",
**AttributeError: 'numpy.ndarray' object has no attribute 'self'**
AttributeError回溯(最近一次调用)
在里面
1 nn=神经网络([2,2,1],α=0.5)
---->2 nn.拟合(X,y,历元=20000)
3.
4对于拉链(x,y)中的(x,目标):
5预测=nn.predict(x)[0][0]
D:\BackPropagation\neuralnetwork.ipynb适合(self、X、y、epochs、displayUpdate)
42“def sigmoid_deriv(self,x):\n”,
43“返回x*(1-x)\n”,
--->44“\n”,
45“\n”,
46“def fit(自我,X,y,历元=1000,显示更新=100):\n”,
D:\BackPropagation\neuralnetwork.ipynb in fit_partial(self,x,y)
69“\n”,
70“\n”,
--->71“out=self.sigmoid(净)\n”,
72“\n”,
73“A.append(out)\n”,
**AttributeError:'numpy.ndarray'对象没有属性'self'**
根据神经网络后端理论,必须将误差乘以前一层激活的sigmoid,才能得到delta的值,而不是它的点积。因此,错误是不可避免的。自我不会被承认
更改以下代码
error.self.sigmoid_deriv(A[-1])
到
什么是
type(net)
如何运行此代码?您需要导入该类并使用此特定代码代替keras或tensorflow。这与任何神经网络都具有相同的功能。用拟合方法训练模型,用预测方法进行预测。
error*self.sigmoid_deriv(A[-1])