我正在尝试使用此函数计算神经网络的costFunction作为我编程任务的一部分。
其中K是标签数量。 hTheta和y都是大小(5000,10)的矩阵,因为我有5000个训练样例和10个标签。我正在使用八度音和 我的成本函数为NaN 。 (这也是预期的,因为hTheta和Y的所有值都是0或1,因此不会定义log(0)* 0。
但那我该如何计算成本?
注意 - hTheta由神经网络上的前馈算法生成,y是输入标签。
答案 0 :(得分:3)
这里 Y i 可以是1或0,但是h i 不能是0或1.这是因为如果你使用的是sigmoid logisitic函数,然后获得0(或1)将需要sigmoid函数的参数为-infinity(或+ infinity),这是不可能的。一个可能的原因可能是您必须选择学习率过高。尝试降低学习率。当我遇到同样的问题时,这对我有用。
答案 1 :(得分:1)
可靠地防止这种情况发生的一般方法是剪辑你的价值或添加一个小值epsilon e=10e-6
(或类似的东西),这样你总是log(x+e)
x+e != 0
。根据您正在做什么,您可能还需要将x
剪切到e
和1之间。如果将log
组合成单个{{1}中的分数,你再次在分母中添加log
以避免任何除零。
防止任何NAN行为比试图避免它更好。例如,对于RNN,您可以使用爆炸渐变 - 这种情况通常超出您对超参数选择的控制 - 导致e
如果未捕获则生成NAN。