def softmax_loss_vectorized(W, X, y, reg): loss = 0.0 dW = np.zeros_like(W) N = X.shape[0] f = np.dot(X, W) # f.shape = N, C f -= f.max(axis = 1).reshape(N, 1) s = np.exp(f).sum(axis = 1) loss = np.log(s).sum() - f[range(N), y].sum() counts = np.exp(f) / s.reshape(N, 1) counts[range(N), y] -= 1 dW = np.dot(X.T, counts) loss = loss / N + 0.5 * reg * np.sum(W * W) dW = dW / N + reg * W return loss, dW
时间: 2023-02-07 22:01:17 浏览: 120
softmax 目标函数及导数
这是一个实现softmax损失函数的向量化版本的Python代码。
参数:
- W:权重矩阵,形状为(D, C),其中D是特征数,C是类别数
- X:输入数据,形状为(N, D),其中N是样本数
- y:标签,形状为(N,)
- reg:正则化系数
返回值:
- loss:损失值
- dW:W的梯度
代码流程:
1. 初始化损失为0,dW为0矩阵
2. 计算输入数据的特征数N和分类数C
3. 计算f = X * W,其中f的形状为(N, C)
4. 计算每个样本的损失,并将它们累加到loss中
5. 计算dW,使用损失函数的导数
阅读全文