我的神经网络无法预测XOR问题

问题描述

我正在从头开始编写一个neural_network python模块,这似乎很好。但是,当我测试网络以预测XOR问题时,预测都在0.5左右。我试图改变不同的东西,从学习率到时代数,但仍然是相同的预测。我真的疯了,试图找出我做错了什么。

这些是训练后神经网络的预测

[0,0] -> [[0.51725719]]
[0,1] -> [[0.5172791]]
[1,0] -> [[0.51720819]]
[1,1] -> [[0.51723017]]

Cost over epochs graph

这是我的仓库中的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

之后的XOR问题的输出
[0,0] [[0.01937993]]
[0,1] [[0.99732982]]
[1,0] [[0.97613504]]
[1,1] [[0.01860087]]