如何在Theano中防止零除或替换无穷值?
我在使用Theano时,涉及到一个成本函数,这个函数里有一个正则化项,需要我计算这个项:
T.sum(c / self.squared_euclidean_distances)
由于self.squared_euclidean_distances中的某些值可能为零,这就导致出现了Nan(不是一个数字)值。我该如何解决这个问题呢?我尝试过用T.isinf,但没有成功。一个解决方案是把self.squared_euclidean_distances中的零值替换成一个很小的数字,或者把T.sum(c / self.squared_euclidean_distances)中的无穷大值替换成零。可我就是不知道怎么在Theano中替换这些值。
1 个回答
9
看看这个 T.switch
。你可以这样做:
T.switch(T.eq(self.squared_euclidean_distances, 0), 0, c / self.squared_euclidean_distances)
(或者,在上游处理时,确保你从来没有用平方欧几里得距离去比较一个向量和它自己。)