NeuralNetwork类无法访问其属性

2024-06-07 09:30:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我练习了以下简单的代码

import numpy as np


class NeuralNetwork():
    def _init_(self):
        np.random.seed(1)
        # generating numbers between [-1 1]
        self.synaptic_weights = 2 * np.random.random((3, 1))-1

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

    def sigmoid_derivative(self, x):
          return x * (1 - x)

    def think(self, inputs):
          inputs=inputs.astype(float)
          output = self.sigmoid(np.product(inputs,self.synaptic_weights))
          return  output

    def train(self,training_inputs,training_outputs,training_iterations):
           for iteration in range(training_iterations):
               output = self.think(training_inputs)
               error = training_outputs - output
               adjustment =np.dot(training_inputs.T, error * self.sigmoid_derivative(output))
               self.synaptic_weights += adjustment


if __name__ == "__main__":
    # initializing the neuron class
    neural_network = NeuralNetwork()

    print("Beginning Randomly Generated Weights: ")
    print(neural_network.synaptic_weights)
    # training data consisting of 4 examples--3 input values and 1 output
    training_inputs = np.array([[0, 0, 1],
                                [1, 1, 1],
                                [1, 0, 1],
                                [0, 1, 1]])

    training_outputs = np.array([[0, 1, 1, 0]]).T

    # training taking place
    neural_network.train(training_inputs, training_outputs, 15000)

    print("Ending Weights After Training: ")
    print(neural_network.synaptic_weights)

    user_input_one = str(input("User Input One: "))
    user_input_two = str(input("User Input Two: "))
    user_input_three = str(input("User Input Three: "))

    print("Considering New Situation: ", user_input_one, user_input_two, user_input_three)
    print("New Output data: ")
    print(neural_network.think(np.array([user_input_one, user_input_two, user_input_three])))
    print("Wow, we did it!")

但当我运行它时,它给了我以下错误:

Traceback (most recent call last):
Beginning Randomly Generated Weights: 
  File "I:/scientific_python/deep_learning_machine_learning/deep_learning.py", line 34, in <module>
    print(neural_network.synaptic_weights)
AttributeError: 'NeuralNetwork' object has no attribute 'synaptic_weights'

Process finished with exit code 1

我不明白为什么?在NeuralNetwork()类中,我对synaptic\u权重进行了初始化,为什么类不能访问?提前谢谢


Tags: selfinputoutputdefnptrainingnetworkinputs
2条回答

您的代码有两个问题:_init_函数需要双下划线。你知道吗

其次,可以使用np.dot代替np.product将权重与输入矩阵相乘。你知道吗

以下是工作代码:

import numpy as np


class NeuralNetwork():
    def __init__(self):
        np.random.seed(1)
        # generating numbers between [-1 1]
        self.synaptic_weights = 2 * np.random.random((3, 1))-1

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

    def sigmoid_derivative(self, x):
          return x * (1 - x)

    def think(self, inputs):
          inputs=inputs.astype(float)
          output = self.sigmoid(np.dot(inputs,self.synaptic_weights))
          return  output

    def train(self,training_inputs,training_outputs,training_iterations):
           for iteration in range(training_iterations):
               output = self.think(training_inputs)
               error = training_outputs - output
               adjustment =np.dot(training_inputs.T, error * self.sigmoid_derivative(output))
               self.synaptic_weights += adjustment


if __name__ == "__main__":
    # initializing the neuron class
    neural_network = NeuralNetwork()

    print("Beginning Randomly Generated Weights: ")
    print(neural_network.synaptic_weights)
    # training data consisting of 4 examples 3 input values and 1 output
    training_inputs = np.array([[0, 0, 1],
                                [1, 1, 1],
                                [1, 0, 1],
                                [0, 1, 1]])

    training_outputs = np.array([[0, 1, 1, 0]]).T

    # training taking place
    neural_network.train(training_inputs, training_outputs, 15000)

    print("Ending Weights After Training: ")
    print(neural_network.synaptic_weights)

    user_input_one = str(input("User Input One: "))
    user_input_two = str(input("User Input Two: "))
    user_input_three = str(input("User Input Three: "))

    print("Considering New Situation: ", user_input_one, user_input_two, user_input_three)
    print("New Output data: ")
    print(neural_network.think(np.array([user_input_one, user_input_two, user_input_three])))
    print("Wow, we did it!")

示例代码段:

class A:
    def __init__(self):
        self.test = 0
a = A()
print(a.test)

检查init method的定义,方法名应该是__init__

相关问题 更多 >

    热门问题