用户警告:使用与输入大小 (torch.Size([1, 1])) 不同的目标大小 (torch.Size([1]))

Pau*_*ers 7 deep-learning pytorch

我有这个代码:

    actual_loes_score_g = actual_loes_score_t.to(self.device, non_blocking=True)

    predicted_loes_score_g = self.model(input_g)

    loss_func = nn.L1Loss()
    loss_g = loss_func(
        predicted_loes_score_g,
        actual_loes_score_g,
    )
Run Code Online (Sandbox Code Playgroud)

哪里predicted_loes_score_gtensor([[-24.9374]], grad_fn=<AddmmBackward0>)actual_loes_score_gtensor([20.], dtype=torch.float64). (出于调试目的,我使用批量大小 1。)

我收到此警告:

torch/nn/modules/loss.py:96: UserWarning: Using a target size (torch.Size([1])) that is 
different to the input size (torch.Size([1, 1])). This will likely lead to incorrect 
results due to broadcasting. Please ensure they have the same size.
Run Code Online (Sandbox Code Playgroud)

我如何正确确保它们具有相同的尺寸?

我想这可能就是答案:

    predicted_loes_score = predicted_loes_score_g.detach()[0]
    loss_g = loss_func(
        predicted_loes_score,
        actual_loes_score_g,
    )
Run Code Online (Sandbox Code Playgroud)

但后来我得到这个错误:

torch/autograd/__init__.py", line 154, in backward
    Variable._execution_engine.run_backward(
RuntimeError: element 0 of tensors does not require grad and does not have a grad_fn
Run Code Online (Sandbox Code Playgroud)

小智 9

predicted_loes_score_g = tensor([[-24.9374]], grad_fn=<AddmmBackward0>)
Run Code Online (Sandbox Code Playgroud)

大小为 [1,1]

actual_loes_score_g = tensor([20.], dtype=torch.float64)
Run Code Online (Sandbox Code Playgroud)

这是尺寸 [1]

您需要从预测中删除维度或向目标添加维度。我会推荐后者,因为额外的尺寸对应于您的批量大小。尝试这个:

actual_loes_score_g =  actual_loes_score_g.unsqueeze(1)
Run Code Online (Sandbox Code Playgroud)