[关闭]
@nrailgun 2016-10-29T20:37:45.000000Z 字数 849 阅读 4763

Softmax loss 和 NAN

机器学习


训练的时候发现解释器警告 RuntimeWarning: divide by zero encountered in log,结果发现是计算过程的问题。


等价于(分子分母除以同一个数,避免产生计算溢出)

x 数值太大的时候,x - np.max(x) 可能是一个巨大的(负)值,进行指数操作会让数值接近于 或者

所以,训练过程中还是要小心参数,避免计算过程中产生的各种溢出问题。

  1. def softmax_loss(x, y):
  2. """
  3. Computes the loss and gradient for softmax classification.
  4. Inputs:
  5. - x: Input data, of shape (N, C) where x[i, j] is the score for the jth class
  6. for the ith input.
  7. - y: Vector of labels, of shape (N,) where y[i] is the label for x[i] and
  8. 0 <= y[i] < C
  9. Returns a tuple of:
  10. - loss: Scalar giving the loss
  11. - dx: Gradient of the loss with respect to x
  12. """
  13. probs = np.exp(x - np.max(x, axis=1, keepdims=True))
  14. probs /= np.sum(probs, axis=1, keepdims=True)
  15. N = x.shape[0]
  16. loss = -np.sum(np.log(probs[np.arange(N), y])) / N
  17. dx = probs.copy()
  18. dx[np.arange(N), y] -= 1
  19. dx /= N
  20. return loss, dx
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注