我在我的网络中追溯问题,以检测从交叉熵中获取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)
结果是Not Nan。
-0.190513193607
所以第一个函数中的这个数字给出了NaN而它不应该?