我有一个数字图像数据集(只有2个类,7和9)。所以,它是一个二元分类问题。输入图像是28 * 28功能。所以,我在输入层使用神经网络和784个神经元。隐藏层中的100和50个神经元。输出层中有2个神经元。使用学习率为0.3。
我的问题是为什么错误没有随着时代而减少?难道我做错了什么 ? 我在火车数据集中有7125个样本。
>epoch=0, lrate=0.300, error=7124.996
>epoch=1, lrate=0.300, error=7124.996
>epoch=2, lrate=0.300, error=7124.996
>epoch=3, lrate=0.300, error=7124.996
>epoch=4, lrate=0.300, error=7124.995
>epoch=5, lrate=0.300, error=7124.995
>epoch=6, lrate=0.300, error=7124.995
>epoch=7, lrate=0.300, error=7124.995
>epoch=8, lrate=0.300, error=7124.995
>epoch=9, lrate=0.300, error=7124.995
>epoch=10, lrate=0.300, error=7124.995
>epoch=11, lrate=0.300, error=7124.994
>epoch=12, lrate=0.300, error=7124.994
>epoch=13, lrate=0.300, error=7124.994
>epoch=14, lrate=0.300, error=7124.994
>epoch=15, lrate=0.300, error=7124.994
>epoch=16, lrate=0.300, error=7124.993
>epoch=17, lrate=0.300, error=7124.993
>epoch=18, lrate=0.300, error=7124.993
>epoch=19, lrate=0.300, error=7124.992
>epoch=20, lrate=0.300, error=7124.992
>epoch=21, lrate=0.300, error=7124.992
>epoch=22, lrate=0.300, error=7124.991
>epoch=23, lrate=0.300, error=7124.991
>epoch=24, lrate=0.300, error=7124.990
>epoch=25, lrate=0.300, error=7124.989
>epoch=26, lrate=0.300, error=7124.989
>epoch=27, lrate=0.300, error=7124.988
>epoch=28, lrate=0.300, error=7124.987
>epoch=29, lrate=0.300, error=7124.985
>epoch=30, lrate=0.300, error=7124.984
>epoch=31, lrate=0.300, error=7124.982
>epoch=32, lrate=0.300, error=7124.980
>epoch=33, lrate=0.300, error=7124.977
>epoch=34, lrate=0.300, error=7124.972
>epoch=35, lrate=0.300, error=7124.966
>epoch=36, lrate=0.300, error=7124.957
>epoch=37, lrate=0.300, error=7124.940
>epoch=38, lrate=0.300, error=7124.899
>epoch=39, lrate=0.300, error=7124.544
>epoch=40, lrate=0.300, error=6322.611
>epoch=41, lrate=0.300, error=5425.721
>epoch=42, lrate=0.300, error=4852.422
>epoch=43, lrate=0.300, error=4384.062
>epoch=44, lrate=0.300, error=4204.247
>epoch=45, lrate=0.300, error=4091.508
>epoch=46, lrate=0.300, error=4030.757
>epoch=47, lrate=0.300, error=4014.341
>epoch=48, lrate=0.300, error=3999.759
>epoch=49, lrate=0.300, error=4008.330
>epoch=50, lrate=0.300, error=3995.592
>epoch=51, lrate=0.300, error=3964.337
>epoch=52, lrate=0.300, error=3952.369
>epoch=53, lrate=0.300, error=3965.271
>epoch=54, lrate=0.300, error=3989.814
>epoch=55, lrate=0.300, error=3972.481
>epoch=56, lrate=0.300, error=3937.723
>epoch=57, lrate=0.300, error=3917.152
>epoch=58, lrate=0.300, error=3901.988
>epoch=59, lrate=0.300, error=3920.768
如果我改变隐藏层(5 + 2)中的神经元。我的结果越来越好了。为什么会这样?
>epoch=0, lrate=0.300, error=4634.128, l_rate=0.300
>epoch=1, lrate=0.300, error=4561.231, l_rate=0.300
>epoch=2, lrate=0.300, error=3430.602, l_rate=0.300
>epoch=3, lrate=0.300, error=927.599, l_rate=0.300
>epoch=4, lrate=0.300, error=843.441, l_rate=0.300
>epoch=5, lrate=0.300, error=741.719, l_rate=0.300
>epoch=6, lrate=0.300, error=734.094, l_rate=0.300
>epoch=7, lrate=0.300, error=691.922, l_rate=0.300
>epoch=8, lrate=0.300, error=705.822, l_rate=0.300
>epoch=9, lrate=0.300, error=629.065, l_rate=0.300
>epoch=10, lrate=0.300, error=588.232, l_rate=0.300
>epoch=11, lrate=0.300, error=592.619, l_rate=0.300
>epoch=12, lrate=0.300, error=554.380, l_rate=0.300
>epoch=13, lrate=0.300, error=555.677, l_rate=0.300
>epoch=14, lrate=0.300, error=555.798, l_rate=0.300
>epoch=15, lrate=0.300, error=523.214, l_rate=0.300
>epoch=16, lrate=0.300, error=530.260, l_rate=0.300
>epoch=17, lrate=0.300, error=491.709, l_rate=0.300
>epoch=18, lrate=0.300, error=469.119, l_rate=0.300
>epoch=19, lrate=0.300, error=472.025, l_rate=0.300
>epoch=20, lrate=0.300, error=473.940, l_rate=0.300
>epoch=21, lrate=0.300, error=438.288, l_rate=0.300
>epoch=22, lrate=0.300, error=412.492, l_rate=0.300
>epoch=23, lrate=0.300, error=424.129, l_rate=0.300
>epoch=24, lrate=0.300, error=427.414, l_rate=0.300
>epoch=25, lrate=0.300, error=435.418, l_rate=0.300
>epoch=26, lrate=0.300, error=406.067, l_rate=0.300
>epoch=27, lrate=0.300, error=411.439, l_rate=0.300
>epoch=28, lrate=0.300, error=373.220, l_rate=0.300
>epoch=29, lrate=0.300, error=381.987, l_rate=0.300
>epoch=30, lrate=0.300, error=359.585, l_rate=0.300
>epoch=31, lrate=0.300, error=368.407, l_rate=0.300
>epoch=32, lrate=0.300, error=351.560, l_rate=0.300
>epoch=33, lrate=0.300, error=359.028, l_rate=0.300
>epoch=34, lrate=0.300, error=371.987, l_rate=0.300
>epoch=35, lrate=0.300, error=336.106, l_rate=0.300
>epoch=36, lrate=0.300, error=318.453, l_rate=0.300
答案 0 :(得分:1)
这是一个常见的问题;它通常是由您的NN和/或数据的设计引起的。为避免这种情况,您可能需要重新考虑您的设计决策。
从你的问题来看,似乎你决定采用一种特定的设计,如果改变可以帮助很多。我们来看看:
答案 1 :(得分:0)
你的第一个模型有更多参数(第一个隐藏层:78,400个权重和100个偏差,第二个隐藏层:5000个权重和50个偏差)你可能随机初始化权重和偏差。通常随机初始化会让你接近50%的精确度,所以我对你为什么接近0%感到有点困惑(我假设有7125个训练样例,你的错误度量为error=7124.990
意味着你将它们全部归类不正确地)。在任何情况下,如此高的学习率会发生什么,你采取一个非常错误的给定重量并将其移到最佳状态以便它仍然几乎和以前一样错,但现在坐着在误差曲线的另一侧。有意义的是,具有大量更多参数的模型在明确错误的值之间反弹将需要更多的训练时期才能看到错误的任何改进。
还有一件事需要考虑:因为你已将其设置为二进制分类问题,所以只需要一个输出神经元,而不是两个。在你的训练数据标签中,你可以有0编码7而1编码9.设置一个sigmoid输出神经元,给出0到1之间的值,并将你的预测阈值设置为0.5。
if ouput < 0.5:
prediction = 7
else:
prediction = 9