在做 时间序列预测 / 未来帧预测的时候,我遇到了一个问题,那就是从NN输出的我预测的图像(比如第0.1秒的帧)和原本第0.1的真实图像做loss计算时,我不知道该如何选择损失函数。我尝试了2种损失函数:MSELoss和CrossEntropy,但都会出现问题,下面是具体情况:
我的训练代码
```python
for epoch in range(50):
print('epoch {}'.format(epoch + 1))
train_loss = 0.
train_acc = 0.
for batch_Group, batch_target in train_loader:
for Group, target in zip(batch_Group, batch_target):
inputs_20, target_1 = Variable(Group).cuda(), Variable(target).cuda()
prediction = model(inputs_20)
print(prediction.shape)
print(target_1.shape)
for i in range(BATCH_SIZE):
print(prediction[i].shape)
print(target_1.shape)
loss = loss_func(prediction[i], target_1)
optimizer.zero_grad()
loss.backward() # 计算梯度/反向传播
optimizer.step() # 更新网络参数
我的预测帧是【 3, 684,76】,原图像的帧是【3,686,76】
在我尝试第一种nn.CrossEntropy时,遇到了一个报错
我理解报错原因,预测帧作为input的【3, 684,76】分别代表batch_size、number of classes 和 图像维度
如果要计算,target只允许有2个维度(我的pytorch是1.9.1),分别是batch_size 和 图像维度
但我并不是做图像分类,我只是做图像预测,没有类别可言,更没有类别的可能性之言,所以我无法使用Crossentropy