【发布时间】:2021-07-31 03:08:32
【问题描述】:
标签的维度应该与神经网络最后一层的维度相同,这对我来说很直观。然而,通过一些使用 PyTorch 的实验,结果证明它以某种方式工作。
代码:
import torch
import torch.nn as nn
X = torch.tensor([[1],[2],[3],[4]], dtype=torch.float32) # training input
Y = torch.tensor([[2],[4],[6],[8]], dtype=torch.float32) # training label
model = nn.Linear(1,3)
learning_rate = 0.01
optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)
for epoch in range(10):
y_pred model(X)
loss = nn.MSELoss(Y, y_pred)
loss.backward()
optimizer.zero_grad()
optimizer.step()
在上面的代码中,model = nn.Linear(1,3) 被用来代替model = nn.Linear(1,1)。结果,Y.shape 为 (4,1),而 y_pred.shape 为 (4,3)。
代码使用警告说“使用与输入大小不同的目标大小可能会由于广播而导致不正确的结果。”
执行model(torch.tensor([10], dtype=torch.float32))时得到以下输出:
tensor([20.0089, 19.6121, 19.1967], grad_fn=<AddBackward0>)
所有三个输出对我来说似乎都是正确的。但是如果数据大小不同,损失如何计算呢?
在任何情况下我们都应该使用与输入大小不同的目标大小吗?这样做有什么好处吗?
【问题讨论】:
标签: machine-learning neural-network pytorch