📌  相关文章
📜  RuntimeError: 形状为 [1, 28, 28] 的输出与广播形状 [3, 28, 28] 不匹配 site:stackoverflow.com (1)

📅  最后修改于: 2023-12-03 15:04:57.503000             🧑  作者: Mango

RuntimeError: 形状为 [1, 28, 28] 的输出与广播形状 [3, 28, 28] 不匹配

当我们在使用深度学习框架时,经常会遇到各种错误。其中,一个经常出现的错误是 "RuntimeError: 形状为 [1, 28, 28] 的输出与广播形状 [3, 28, 28] 不匹配"。这种错误可能会使代码停止工作,导致您的深度学习实验失败。在本文中,我们将介绍这个错误的原因和解决办法。

错误原因

当我们在深度学习模型中使用广播(broadcasting)时,我们需要保证广播的形状(shape)是相同的,否则就会出现 "形状不匹配" 的错误。在这个错误中,我们在尝试将一个形状为 [1, 28, 28] 的张量与一个形状为 [3, 28, 28] 的广播形状相乘,因此会出现形状不匹配的错误。

解决办法

解决这个错误的方法是,要么将形状为 [1, 28, 28] 的张量重复三次,以匹配形状为 [3, 28, 28] 的广播形状,要么将形状为 [3, 28, 28] 广播形状改为 [1, 28, 28],这样就可以与形状为 [1, 28, 28] 的张量相乘了。

将形状为 [1, 28, 28] 的张量重复三次
import torch

x = torch.randn(1, 28, 28)
print(x.shape) # torch.Size([1, 28, 28])

y = x.repeat(3, 1, 1)
print(y.shape) # torch.Size([3, 28, 28])
将形状为 [3, 28, 28] 广播形状改为 [1, 28, 28]
import torch

x = torch.randn(1, 28, 28)
print(x.shape) # torch.Size([1, 28, 28])

y = torch.randn(3, 28, 28)
y = y[None, :]
print(y.shape) # torch.Size([1, 3, 28, 28])

通过使用上面的代码片段中的方法,您可以很容易地解决 "RuntimeError: 形状为 [1, 28, 28] 的输出与广播形状 [3, 28, 28] 不匹配" 的错误。