我正在尝试进入神经网络,并想从正在观看的视频中测试一些代码,但是我不断收到错误消息:“ Neural_Network对象没有属性w1”,我似乎无法弄清楚。我经历了许多相关的stackoverflow,但是它们似乎并没有回答这个问题,并且由于我之前没有为python做任何面向对象的编程,所以我不知道发生了什么。
浏览代码时,我以为self.w1被设置为局部变量,因此我尝试实例化它,并将set作为构造函数声明上方的全局变量设置,但这没有用。
import numpy as np
class Neural_Network(object):
def _init_(self):
self.inputLayerSize = 2
self.outputLayerSize = 1
self.hiddenLayerSize = 3
self.w1 = np.random.randn(self.inputLayerSize, self.hiddenLayerSize)
self.w2 = np.random.randn(self.hiddenLayerSize, self.outputLayerSize)
def forward(self, x):
self.z2= np.dot(x, self.w1)
self.a2 = self.sigmoid(self.layer1)
self.z3 = np.dot(self.a2,self.w2)
yhat = self.sigmoid(self.z3)
return yhat
def sigmoid(self, x):
return 1 / (1 + np.exp(-x))
x = np.array(([3,5],[5,1],[10,2]),dtype=float)
y = np.array((([75],[82],[93])),dtype=float)
n1 = Neural_Network()
yhat = n1.forward(x)
print(yhat)
代码应生成一个矩阵,该矩阵说明给定指定输入“ x”的可能等级。
类似的东西:x = [[2,3],[5,2]] 输出:[[82],[93],[100]]
答案 0 :(得分:0)
init
应该有两个下划线,例如:
def __init__(self):
在每侧没有两个下划线的情况下,Python在实例化对象时不会调用该函数。通常,所有这些特殊功能和属性都有一对双下划线。
答案 1 :(得分:0)
这个菜鸟错误只会使我丧命,我也没有立即发现它:
Ahh也很重要,您可能没有输出[75],[82],[93],因为您记得的S形范围是0到1,输入也一样。将sigmoida用作输入并选择清晰的输出,仅表示0或1
import numpy as np
class Neural_Network:
def __init__(self):
self.inputLayerSize = 2
self.outputLayerSize = 1
self.hiddenLayerSize = 3
self.w_h = np.random.randn(self.inputLayerSize, self.hiddenLayerSize)
self.w_o = np.random.randn(self.hiddenLayerSize, self.outputLayerSize)
self.layer_hidden = np.random.randn(self.hiddenLayerSize)
def forward(self, x):
self.z2= np.dot(x, self.w_h)
self.a2 = self.sigmoid(self.layer_hidden)
self.z3 = np.dot(self.a2,self.w_o)
yhat = self.sigmoid(self.z3)
return yhat
def sigmoid(self, x):
return 1 / (1 + np.exp(-x))
x = np.array(([[3,5],[5,1],[10,2]),dtype = float) y = np.array((([[75],[82],[93])),dtype = float) n1 =神经网络() yhat = n1.forward(x) 打印(yhat)