我正在尝试训练一个完全连接的神经网络,以使用MNIST数据集对手写数字进行分类。我用C ++实现了神经网络。这是我的课程项目的一部分。但是,我发现培训有些奇怪。我不知道出了什么问题。
我的课程讲师要求我们甚至将Sigmoid用作激活函数并将MSE用作损耗函数,甚至用于输出层。我怀疑这是否是正确的选择。但是我仍然遵循他的话。
我的网络结构是:
28*28 (input layer) value: 0-1
|
|
500 (hidden layer) activation: sigmoid
|
|
10 (output layer) activation: sigmoid
|
|
loss: MSE
学习率是0.4。批量大小为100。损失迅速降至0.5,但不再减少。测试精度提高到60%,并且不会再增加。
我想知道我是错误地实现了神经网络还是不应该使用Sigmoid和MSE。谢谢!
答案 0 :(得分:0)
更改您的激活和丢失功能。
Sigmoid在输出层中用于二进制分类,但是MNIST是多分类问题。并使用绝对交叉疗法。 MSE(均方误差)用于回归。