在这里,我尝试用Python创建一个简单的神经网络,导入numpy模块。NeuralNetwork类被定义为具有随机种子和突触权重。
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定义了NeuralNet。
Random synaptic weights:
Traceback (most recent call last):
File "C:\Python 3.9\neural_net.py", line 38, in <module>
print(NeuralNetwork.synaptic_weights)
AttributeError: class NeuralNetwork has no attribute 'synaptic_weights'
[Finished in 0.465s]发布于 2021-03-22 08:30:23
有一些错误。
__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])))https://stackoverflow.com/questions/66738743
复制相似问题