我使用的损失函数中有一个exp项,它将损失放大到无穷大,然后导致梯度变为NaNs......目前有办法处理这个问题吗?
s = tf.exp(n) # s becomes nan when n is large
rxztt3cl1#
损失函数中的指数项在机器学习中通常不是通过最小化指数本身,而是通过最小化其对数来处理。这两个函数都是单调的新月形,所以最小化对数会比最小化指数带来相同的最小值。然而,对数增长得慢得多,从而避免了损失函数的巨大增长。这里似乎需要直接在n上最小化,但可能这只是一个示例。
n
6ojccjat2#
logit_upper_bound = 88 #因为tf.exp(89)会产生INFs = tf.exp(tf.最小值(n,logit_上限))
o75abkj43#
例如,您可以使用以下命令:loss = tf.minimum(tf.exp(n), MAX_VALUE)这将返回最大元素,因此您需要考虑到这一点。
loss = tf.minimum(tf.exp(n), MAX_VALUE)
3条答案
按热度按时间rxztt3cl1#
损失函数中的指数项在机器学习中通常不是通过最小化指数本身,而是通过最小化其对数来处理。这两个函数都是单调的新月形,所以最小化对数会比最小化指数带来相同的最小值。然而,对数增长得慢得多,从而避免了损失函数的巨大增长。
这里似乎需要直接在
n
上最小化,但可能这只是一个示例。6ojccjat2#
logit_upper_bound = 88 #因为tf.exp(89)会产生INF
s = tf.exp(tf.最小值(n,logit_上限))
o75abkj43#
例如,您可以使用以下命令:
loss = tf.minimum(tf.exp(n), MAX_VALUE)
这将返回最大元素,因此您需要考虑到这一点。