softmax分类器输出的是属于不同类别的概率值,公式为:
def softmax_loss(x, y):
"""
Computes the loss and gradient for softmax classification.
#此处的np.max表示按行相加并保持其二维性
"""
probs = np.exp(x - np.max(x, axis=1, keepdims=True))
probs /= np.sum(probs, axis=1, keepdims=True)
N = x.shape[0]
#这里的log是计算得到的正确概率的损失值,得到的loss越大说明越不准确
loss = -np.sum(np.log(probs[np.arange(N), y])) / N
dx = probs.copy()
dx[np.arange(N), y] -= 1
dx /= N
return loss, dx