如何在Theano中防止零除或替换无穷值?

5 投票
1 回答
3216 浏览
提问于 2025-04-30 07:13

我在使用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)

(或者,在上游处理时,确保你从来没有用平方欧几里得距离去比较一个向量和它自己。)

撰写回答