【发布时间】:2019-06-08 21:01:00
【问题描述】:
在看到神经网络的 youtube 视频后,我尝试使用 numpy 从头开始创建一个,但它给了我一个错误,即尺寸错误。我对矩阵或 numpy 不太了解,这就是我无法得到答案的原因。如果有人可以帮助我建立我的网络,我会非常高兴。
import numpy as np
class NeuralNetwork:
def __init__(self, input_size, hidden_size, output_size):
self.input_size = input_size
self.hidden_size = hidden_size
self.output_size = output_size
self.w1 = np.random.randn(self.input_size, self.hidden_size)
self.w2 = np.random.randn(self.hidden_size, self.output_size)
def sigmoid(self, n):
return 1 / (1 + np.exp(-n))
def sigmoid_prime(self, n):
return self.sigmoid(n) * (1 - self.sigmoid(n))
def propagation(self, x, y):
# forward
hidden1 = np.dot(x, self.w1)
hidden = self.sigmoid(hidden1)
output1 = np.dot(hidden, self.w2)
output = self.sigmoid(output1)
# backward
output_error = y - output
output_delta = output_error * self.sigmoid_prime(output)
hidden_error = output_delta.dot(self.w2.T)
hidden_delta = hidden_error*self.sigmoid_prime(hidden)
self.w1 += x.T.dot(hidden_delta)
self.w2 += hidden.T.dot(output_delta)
def predict(self, x):
hidden1 = np.dot(x, self.w1)
hidden = self.sigmoid(hidden1)
output1 = np.dot(hidden, self.w2)
output = self.sigmoid(output1)
return(output)
MyNet = NeuralNetwork(2, 5, 1)
for _ in range(500):
MyNet.propagation(
np.array([0, 1]),
np.array([1])
)
print(MyNet.predict( np.array([0, 1])))
【问题讨论】:
-
您的
dot呼叫的尺寸不对齐。如果两个参数都是 1d,它们必须匹配才能执行内积。查看dot以及它如何处理不同的维度,
标签: python numpy matrix neural-network