我试着建立我的第一个神经网络,我试着建立一个有两个隐藏层的神经网络,但这不是学习。你知道吗
我很确定前馈部分工作得很好,但是不管我如何训练它(使用异或表),误差并没有减少,它只是在0.5左右振荡。我猜反向传播部分有问题,但我已经修改了很多次,甚至计算出它应该是没有用的。你知道吗
代码如下:
class NeuralNetwork:
def __init__(self, input_size, output_size):
# Sets the input and output sizes
self.inputs = input_size
self.outputs = output_size
# Sets size of hidden layers
self.L1 = 2
self.L2 = 2
# Initializes weights
self.W1 = np.random.rand(self.inputs.shape[1], self.L1)
self.W2 = np.random.rand(self.L1, self.L2)
self.W3 = np.random.rand(self.L2, self.outputs.shape[1])
# The network evaluates the inputs
def feedforward(self, inp):
self.inputs = inp
# Evaluates layer 1
Z1 = sig(np.dot(self.inputs, self.W1))
# Evaluates layer 2
Z2 = sig(np.dot(Z1, self.W2))
# Evaluates end result
Z3 = sig(np.dot(Z2, self.W3))
self.outputs = Z3
# Backpropagation
def train(self, inp, outp):
# Evaluate the input
self.inputs = inp
# Evaluates layer 1
Z1 = sig(np.dot(self.inputs, self.W1))
# Evaluates layer 2
Z2 = sig(np.dot(Z1, self.W2))
# Evaluates end result
Z3 = sig(np.dot(Z2, self.W3))
# Evaluate the error
error = Z3 - outp
print("Error: " + str(abs(error.sum())))
# Backpropagates
dcost_dpred = error
dpred_dz = dsig(np.dot(Z2, self.W3))
z_delta = dcost_dpred * dpred_dz
self.W3 -= lr * np.dot(Z2.T, z_delta)
z_delta = np.dot(z_delta, self.W3.T)
self.W2 -= lr * (np.dot(Z1.T, z_delta) * dsig(np.dot(Z1, self.W2)))
z_delta = np.dot(z_delta, self.W2.T)
self.W1 -= lr * (np.dot(self.inputs.T, z_delta) * dsig(np.dot(self.inputs, self.W1)))
真的错了吗?如果是,我该怎么修?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐