我试图从这个链接 - CS231n - Convolutional Neural Networks for Visual Recognition了解 Softmax 分类器的简单实现。在这里,他们实现了一个简单的 softmax 分类器。在链接上的 Softmax 分类器示例中,2D 空间上有随机的 300 个点以及与它们相关联的标签。softmax 分类器将学习哪个点属于哪个类。
这是softmax分类器的完整代码。或者您可以查看我提供的链接。
# initialize parameters randomly
W = 0.01 * np.random.randn(D,K)
b = np.zeros((1,K))
# some hyperparameters
step_size = 1e-0
reg = 1e-3 # regularization strength
# gradient descent loop
num_examples = X.shape[0]
for i in xrange(200):
# evaluate class scores, [N x K]
scores = np.dot(X, W) + b
# compute the class probabilities
exp_scores = np.exp(scores)
probs = exp_scores / np.sum(exp_scores, axis=1, keepdims=True) # [N x K]
# compute the loss: average cross-entropy loss and regularization
corect_logprobs = -np.log(probs[range(num_examples),y])
data_loss = np.sum(corect_logprobs)/num_examples
reg_loss = 0.5*reg*np.sum(W*W)
loss = data_loss + reg_loss
if i % 10 == 0:
print "iteration %d: loss %f" % (i, loss)
# compute the gradient on scores
dscores = probs
dscores[range(num_examples),y] -= 1
dscores /= num_examples
# backpropate the gradient to the parameters (W,b)
dW = np.dot(X.T, dscores)
db = np.sum(dscores, axis=0, keepdims=True)
dW += reg*W # regularization gradient
# perform a parameter update
W += -step_size * dW
b += -step_size * db
我不明白他们是如何计算这里的梯度的。我假设他们在这里计算了梯度 -
dW = np.dot(X.T, dscores)
db = np.sum(dscores, axis=0, keepdims=True)
dW += reg*W # regularization gradient
但是如何?我的意思是为什么梯度dW
是np.dot(X.T, dscores)
?为什么的梯度db
是np.sum(dscores, axis=0, keepdims=True)
??那么他们是如何计算权重和偏差的梯度的呢?还有他们为什么计算regularization gradient
?
我刚刚开始学习卷积神经网络和深度学习。我听说这CS231n - Convolutional Neural Networks for Visual Recognition
是一个很好的起点。我不知道在哪里放置与深度学习相关的帖子。所以,我把它们放在stackoverflow上。如果有任何地方可以发布与深度学习相关的问题,请告诉我。