我正在实现神经网络来训练python中的手写数字。以下是成本函数,
在 log(1-(h(x))
中,如果h(x)
为1,则会产生log(1-1)
,即log(0)
。所以我得到了数学错误。
我在10-60之间随机初始化权重。我不确定我需要改变的地方以及我必须改变的地方!
答案 0 :(得分:1)
在此公式中,h(x)
通常是sigmoid:h(x)=sigmoid(x)
,所以它永远不会是1.0,除非网络中的激活太大(这很糟糕并会导致问题)无论如何)。 log(h(x))
时h(x)=0
可能出现同样的问题,即当x为较大的负数时。
如果您不想担心数字问题,只需在计算日志之前添加一个小数字:log(h(x) + 1e-10)
。
其他问题:
[10, 60]
范围内的权重初始化看起来不正确,最好是小型随机数,例如来自[-0.01, 0.01]
。