我使用完全连接的神经网络进行图像识别“mnist”。
我的网络有784个输入神经元,一个隐藏的神经元层由1569个神经元组成,输出层由10个神经元组成。
我有两个问题:
我使用sigmoid和公式来表示错误错误=输出*(1 - 输出)*(目标 - 输出)。问题是如果输出神经元是1,并且所需的值是0,那个错误= 0,但它是错的,不是吗?
如果隐藏层中的神经元加权总和变得太大而结果是1,那么使用sigmoid是否正确?初始化权重的值是什么?
答案 0 :(得分:0)
通常情况下,我会在0.01到0.5之间的随机范围内初始化权重时获得良好的结果。
To 1:据我所知,输出层的局部错误通常是expectedOutput - currentOutput
,因为这个简化的语句永远不会失败并且具有足够的准确性。在此之后,对于完全连接的图层,使用反向传播来调整隐藏图层的权重。请参阅Yann Lecuns的工作效率:Efficient Backprop
To 2:为了防止输出层输入1,因为hiddens层的总和太大而sigmoid为大量的历元提供1,你可以做一个简单,容易,有效的黑客攻击:总是将每个输出层神经元的输入除以父(隐藏)层中的神经元数量,因此在使用sigmoid传递函数之前,输入始终在区间[-1.0,1.0]中。在大多数情况下,这种技巧会大大减少训练网络所需的时代数量。
答案 1 :(得分:0)
好的它建议你随机初始化你的体重。通常它建议你从范围((-1 /√d),(1√d))中选择神经网络的初始权重,其中d是给定神经元的输入数。
错误总是实际输出电流输出。您提到的公式与隐藏图层权重调整中的BPN算法的其中一个步骤有关。我建议减少模型中隐藏节点的数量。一般建议隐藏节点的数量少于输入数量。
sigmoid功能适用于您的任务。