1
이제 스탠포드 cs231n 과정을 배우고 있습니다. softmax_loss 함수를 완료 할 때 전체 벡터화 된 형식으로 쓰는 것이 쉽지 않음을 발견했습니다. 특히 dw 용어를 다루는 것이 쉽지 않습니다. 아래는 제 코드입니다. 누군가 코드를 최적화 할 수 있습니까? 감사하겠습니다.softmax_loss 함수 : 루프를 행렬로 변환
def softmax_loss_vectorized(W, X, y, reg):
loss = 0.0
dW = np.zeros_like(W)
num_train = X.shape[0]
num_classes = W.shape[1]
scores = X.dot(W)
scores -= np.max(scores, axis = 1)[:, np.newaxis]
exp_scores = np.exp(scores)
sum_exp_scores = np.sum(exp_scores, axis = 1)
correct_class_score = scores[range(num_train), y]
loss = np.sum(np.log(sum_exp_scores)) - np.sum(correct_class_score)
exp_scores = exp_scores/sum_exp_scores[:,np.newaxis]
# **maybe here can be rewroten into matrix operations**
for i in xrange(num_train):
dW += exp_scores[i] * X[i][:,np.newaxis]
dW[:, y[i]] -= X[i]
loss /= num_train
loss += 0.5 * reg * np.sum(W*W)
dW /= num_train
dW += reg * W
return loss, dW
답장을 보내 주시면 감사하겠습니다. 나는 아직도 너의 제안에 따라 그것을 배우고있다. – luoshao23