【发布时间】:2019-01-20 05:19:35
【问题描述】:
例如,我有一个网络,以张量 [N, 7](N 是样本数)作为输入,张量 [N, 4] 作为输出,“4”代表不同类别的概率。
并且训练数据的标签是张量[N]的形式,范围从0到3(代表ground-truth类)。
这是我的问题,我看过一些演示,他们直接将损失函数应用于输出张量和标签张量。我想知道为什么这会起作用,因为它们的大小不同,而且这些大小似乎不符合“广播语义”。
这是最小的演示。
import torch
import torch.nn as nn
import torch.optim as optim
if __name__ == '__main__':
features = torch.randn(2, 7)
gt = torch.tensor([1, 1])
model = nn.Sequential(
nn.Linear(7, 4),
nn.ReLU(),
nn.Linear(4, 4)
)
optimizer = optim.SGD(model.parameters(), lr=0.005)
f = nn.CrossEntropyLoss()
for epoch in range(1000):
optimizer.zero_grad()
output = model(features)
loss = f(output, gt)
loss.backward()
optimizer.step()
【问题讨论】:
标签: pytorch