'Neural_Network'对象没有属性'w1',但我认为它确实有

时间:2019-06-03 00:00:42

标签: python neural-network

我正在尝试进入神经网络,并想从正在观看的视频中测试一些代码,但是我不断收到错误消息:“ 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]]

2 个答案:

答案 0 :(得分:0)

init应该有两个下划线,例如:

def __init__(self):

在每侧没有两个下划线的情况下,Python在实例化对象时不会调用该函数。通常,所有这些特殊功能和属性都有一对双下划线。

答案 1 :(得分:0)

这个菜鸟错误只会使我丧命,我也没有立即发现它:

    带有一个_的
  • init 不像init那样复杂,因此当Neural_Network()时什么也没有执行
  • 从对象继承总是,不要写
  • 然后您会发现隐藏层self.layer1未定义
  • 然后,不要给变量名一个字母+数字,例如w1,它与wl等非常混淆
  • 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)