【发布时间】:2021-12-28 06:12:36
【问题描述】:
我尝试使用以下代码实现soft-max(out_vec 是 numpy 浮点向量):
numerator = np.exp(out_vec)
denominator = np.sum(np.exp(out_vec))
out_vec = numerator/denominator
但是,由于np.exp(out_vec),我收到了溢出错误。因此,我(手动)检查了np.exp()的上限是多少,发现np.exp(709)是一个数字,但np.exp(710)被认为是np.inf。因此,为了避免溢出错误,我将代码修改如下:
out_vec[out_vec > 709] = 709 #prevent np.exp overflow
numerator = np.exp(out_vec)
denominator = np.sum(np.exp(out_vec))
out_vec = numerator/denominator
现在,我得到一个不同的错误:
RuntimeWarning: invalid value encountered in greater out_vec[out_vec > 709] = 709
我添加的行有什么问题?我查找了这个特定的错误,我发现的只是人们关于如何忽略该错误的建议。简单地忽略错误对我没有帮助,因为每次我的代码遇到此错误时,它都不会给出通常的结果。
【问题讨论】:
-
out_vec数组包含NaN或Inf值? -
@kvorobiev 你知道我怎样才能捕捉到警告以便检查吗?
-
试试
np.isnan(np.sum(out_vec)) -
@kvorobiev 是的,我的意思是如何真正catch它(我调用这个代码数千次,我不能只打印输出)。
-
请看我的回答