#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])))