【发布时间】:2021-05-09 10:46:03
【问题描述】:
import numpy as np
class NeuralNetwork():
def __init__(self):
np.random.seed(1)
self.synapticweights = 2 * np.random.random((3,1)) - 1
def sigmoid(self, x):
return 1 / (1 + np.exp(-x))
def sigmoidervative(self, x):
return x * (1-x)
def think(self, inputs):
inputs = inputs.astype(float)
output = self.sigmoid(np.dot(inputs, self.synapticweights))
return output
if __name__ == '__main__':
neuralnetwork = NeuralNetwork()
print("Random synaptic weights")
print(neuralnetwork.synapticweights)
"""Defining Training Input"""
traininginputs = np.array([[0, 0, 1],
[1, 1, 1],
[1, 0, 1],
[0, 1, 1]])
'''training output'''
trainingoutput = np.array([[0, 1, 1, 0]]).T
neuralnetwork.train(traininginput, trainingoutput, 5000)
print("Synaptic Weight After Training: ")
print(neuralnetwork.synapticweights)
a = str(input("Input 1: "))
b = str(input("Input 2: "))
c = str(input("Input 3: "))
print("Now situation: input data = ", a, b, c)
print("Output data: ")
print(neuralnetwork.think(np.array([a, b, c])))
追溯:
Traceback (most recent call last):
File "/Users/mirzasamibaig/Documents/PycharmProjects/pythonProjects/lib/python3.6/site-packages/mlproject/neuralnet.py", line 50, in <module>
neuralnetwork.train(trainingoutput, trainingoutput, 5000)
File "/Users/mirzasamibaig/Documents/PycharmProjects/pythonProjects/lib/python3.6/site-packages/mlproject/neuralnet.py", line 21, in train
actualoutput = self.think(traininginput)
File "/Users/mirzasamibaig/Documents/PycharmProjects/pythonProjects/lib/python3.6/site-packages/mlproject/neuralnet.py", line 28, in think
output = self.sigmoid(np.dot(inputs, self.synapticweights))
ValueError: shapes (4,1) and (3,1) not aligned: 1 (dim 1) != 3 (dim 0)
我知道错误所说的 4 x 1 matix 只能乘以 4 x 1 或相同行的等价物。我试图将self.synapticweights = 2 * np.random.random((3,1)) - 1 更改为(4,1) 以使其工作,但我仍然遇到同样的错误。我应该如何控制突触权重我做错了什么?需要帮助。
【问题讨论】:
-
请在
neuralnetwork.train(trainingoutput, trainingoutput, 5000)类中显示函数的代码。thinktrain函数拼错了吗?你为什么要通过trainingoutput两次而不是traininginput? -
def train(self, traininginput, trainingoutput, trainingiteration):for i in range(trainingiteration):actualoutput = self.think(traininginput)error = trainingoutput - actualoutputadjustments = np.dot(traininginput.T, error * self.sigmoidervative(actualoutput))self.synapticweights += adjustments@AkshaySehgal -
是的,我修好了
-
您能否更新原始问题以进行修复??
-
好的,这样错误就消失了,但我现在得到的错误是这样的。
Process finished with exit code 132 (interrupted by signal 4: SIGILL)
标签: python numpy neural-network sigmoid