我正在追溯网络中的问题,以从交叉熵中检测出 nan 的原因。
我从我开始拥有 Nan 的网络中获取值,并在另一个函数上单独测试它们。
在这里,我将一起测试 50 个值,以找出哪一个给出了 NaN。
import theano.tensor as T
import theano
s = T.fvector('s')
y = T.ivector('y')
d= -(y * T.log(s) + (1-y) * T.log(1-s)) #T.mean
x =[1.04693806 ,0.00685256, 1.20987034 ,0.0488876 ]
x_y = np.array((1.0, 0.0, 1.0, 0.0), dtype=np.int32)
x = numpy.array(x, dtype=np.float32)
f = theano.function(inputs=[s, y], outputs=d)
print f(x, x_y)
我有这个结果。
[ nan 0.00687615 nan 0.05012303]
因此,为了了解为什么 nan 存在于此,我在手边、wolfarma 和 theano 本身上测试了该功能。我在最后一个之前拿了一个,并通过以下方式单独测试它:
t = T.scalar('t')
d= -(1 * T.log(t) + (0) * T.log(1-t))
f = theano.function(inputs=[t], outputs=d)
print f(1.20987034)
结果不是南。
-0.190513193607
所以第一个函数中的这个数字不应该给出 NaN 吗?