Как исправить ошибку синаптических весов для Python 3.9.1?

#python #neural-network

Вопрос:

Здесь я попытался создать простую нейронную сеть на Python, импортировав модуль numpy. класс нейронной сети был определен со случайным начальным и синаптическим весами.

 import numpy as np

class NeuralNetwork():

    def _init_(self):
        np.random.seed(1)

        self.synaptic_weights = 2 * random.random((3, 1)) - 1

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

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

    def train(self, training_inputs, training_outputs, training_iterations):

        for iteration in range(training_iterations):

            output = self.think(training_inputs)
            error = training_outputs - output
            adjustments = dot(training_inputs.T, error * self.sigmoid_derivative(output))
            self.synaptic_weights  = adjustments

    def think(self, inputs):

        inputs = inputs.astype(float)
        output = self.sigmoid(np.dot(inputs, self.synaptic_weights))

        return output


if __name__ == "__main__":

    neural_network = NeuralNetwork()

    print('Random synaptic weights: ')
    print(NeuralNetwork.synaptic_weights)

    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

    neural_network.train(training_inputs, training_outputs, 1000)

    print('Synaptic weights after training: ')

    print(neural_network.synaptic_weights)

    G = str(input('input 1: '))
    g = str(input('input 2: '))
    O = str(input('input 3: '))

    print('New situation: input data = ', G, g, O)
    print('Output data: ')
    print(neural_network.think(np.array([G, g, O])))
 

Я продолжаю получать ошибку атрибута, даже несмотря на то, что я использую numpy и определяю нейронную сеть с помощью synaptic_weights.

 Random synaptic weights: 
Traceback (most recent call last):
  File "C:Python 3.9neural_net.py", line 38, in <module>
    print(NeuralNetwork.synaptic_weights)
AttributeError: class NeuralNetwork has no attribute 'synaptic_weights'
[Finished in 0.465s]

 

Комментарии:

1. Вы написали _init_ вместо __init__ этого , чтобы код не запускался при создании экземпляра.

2. Хорошо, спасибо за ваш вклад, иногда подчеркивания сбивают с толку, когда он продолжает строку. Поскольку вы ответили первыми, не хотели бы вы присоединиться к моей команде? Это новая команда, так что вы будете первыми, кто присоединится!

3. Я сделал это, и я все еще получаю ту же ошибку.

4. В первый раз вы спрашиваете веса у класса, а не у экземпляра. Еще одна опечатка.

Ответ №1:

Есть несколько ошибок.

__init__ и Neural_Network.synaptic_weights — > > neural_network.synaptic_weights .

Приведенное ниже должно их исправить.

 
import numpy as np


class NeuralNetwork():

    def __init__(self):
        np.random.seed(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 train(self, training_inputs, training_outputs, training_iterations):

        for iteration in range(training_iterations):

            output = self.think(training_inputs)
            error = training_outputs - output
            adjustments = np.dot(training_inputs.T, error * self.sigmoid_derivative(output))
            self.synaptic_weights  = adjustments

    def think(self, inputs):

        inputs = inputs.astype(float)
        output = self.sigmoid(np.dot(inputs, self.synaptic_weights))

        return output


if __name__ == "__main__":

    neural_network = NeuralNetwork()

    print('Random synaptic weights: ')
    print(neural_network.synaptic_weights)

    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

    neural_network.train(training_inputs, training_outputs, 1000)

    print('Synaptic weights after training: ')

    print(neural_network.synaptic_weights)

    G = str(input('input 1: '))
    g = str(input('input 2: '))
    O = str(input('input 3: '))

    print('New situation: input data = ', G, g, O)
    print('Output data: ')
    print(neural_network.think(np.array([G, g, O])))