Open vmtmxmf5 opened 3 years ago
tf | torch |
---|---|
tf.losses.sparse_categorcial_crossentropy | 직접 정의 (y_oh * -torch.log(y_hat)).sum(dim=1).mean() |
tf.losses.categorical_crossentropy | F.Cross_entropy(z, y_train) softmax까지 한 번에 합친 함수 |
따로 prediction을 출력하는 것이면 softmax 레이어를 명시적으로 넣어 확률화 하는게 맞는데,
어차피 y_hat을 argmax로 구하는 것이면 그럴 필요가 있을까?
softmax 없이 바로 idx 구해서 Loss 연산하는 게 효율적이다 (파이토치 방식)
for epoch in range(2000):
# OH
y_hat = F.softmax(X_train.matmul(W) + b, dim=1)
cost = (y_oh * -torch.log(y_hat)).sum(dim=1).mean()
# sum(dim=1) : 원핫과 계산해서 0이 된 열들을 하나로 모아주는 작업
# ~OH
z = X_train.matmul(W) + b
cost = F.cross_entropy(z, y_train)
optm.zero_grad()
cost.backward()
optm.step()
if epoch % 100 == 0:
print(cost.item())
scatter : in-place scatter(dim, idx, 채울 숫자)
실전 코드
longTensor(64 bit) 아니면 scatter_ 안 됨