问题描述
我正在从头开始编写一个neural_network
python模块,这似乎很好。但是,当我测试网络以预测XOR问题时,预测都在0.5左右。我试图改变不同的东西,从学习率到时代数,但仍然是相同的预测。我真的疯了,试图找出我做错了什么。
这些是训练后神经网络的预测
[0,0] -> [[0.51725719]]
[0,1] -> [[0.5172791]]
[1,0] -> [[0.51720819]]
[1,1] -> [[0.51723017]]
这是我的仓库中的test.py文件
from neural_network import layers,model
import numpy as np
from matplotlib import pyplot as plt
# Testing my neural_network module with XOR problem
# inputs
x = [[0,0],[0,1],[1,1]]
# labels
y = [0,1,0]
model = model.Model(loss="mean_squared_error")
model.add(layers.Dense(2,input_shape=2,activation="sigmoid"))
model.add(layers.Dense(2,activation="sigmoid"))
model.add(layers.Dense(1,activation="sigmoid"))
model.train(x,y,learning_rate=0.01,epochs=10000,verbose=1)
for x_test in x:
print(x_test,model.predict(x_test))
对于我的neural_network
模块(非常简单的代码),这是我的GitHub存储库:https://github.com/Korazza/neural_network
解决方法
经过多次尝试,我发现了问题所在。
我的体重初始化不是最好的,体重太低。
所以我实现了He-at-al Initialization
,它根据当前层和前一层的神经元数量提供更好的权重值。
这是实现He-at-al Initialization
[0,0] [[0.01937993]]
[0,1] [[0.99732982]]
[1,0] [[0.97613504]]
[1,1] [[0.01860087]]