pytorch异常——RuntimeError:Given groups=1, weight of size..., expected of...

文章目录

省流

  • nn.Conv2d 需要的输入张量格式为 (batch_size, channels, height, width),但您的示例输入张量 x 是 (batch_size, height, width, channels)。因此,需要对输入张量进行转置。

  • 注意,TensorFlow使用"NHWC"(批次、高度、宽度、通道)格式,而PyTorch使用"NCHW"(批次、通道、高度、宽度)格式

异常报错

bash 复制代码
RuntimeError: Given groups=1, weight of size [16, 3, 2, 3], 
expected input[8, 65, 66, 3] to have 3 channels, 
but got 65 channels instead

异常截图

异常代码

python 复制代码
def down_shifted_conv2d(x , num_filters , filters_size = [2,3],stride = 1, **kwargs):
    batch_size,H,W,channels = x.shape

    padding = (0,0,
        int(((filters_size[1]) - 1) / 2 ) , int((int(filters_size[1]) - 1) / 2),
        int(filters_size[0]) - 1 , 0,
        0,0)
    x_paded = nn.functional.pad(x, padding)
    print(x_paded.shape)
    conv_layer = nn.Conv2d(in_channels=channels, out_channels=num_filters, 
                           kernel_size=filters_size,
                           stride=stride, **kwargs)
    
    return conv_layer(x_paded)
# Example usage
x = torch.randn(8, 64, 64, 3)  # Example input with batch size 8, height and width 64, and 3 channels
num_filters = 16
output = down_shifted_conv2d(x, num_filters)
print(output.shape)

原因解释

  • 在pytorch中,"nn.Conv2d"需要输入的张量格式为(batch_size,channels,height,width),原图输入的x的格式是(batch_size,height ,weight,channel)所以需要对tensor进行转置。

  • 矩阵交换维度的函数permute,按照编号,将新的顺序填好即可。

python 复制代码
def down_shifted_conv2d(x , num_filters , filters_size = [2,3], stride = 1, **kwargs):
    batch_size, H, W, channels = x.shape
    
    # Transpose the input tensor to (batch_size, channels, height, width)
    x = x.permute(0, 3, 1, 2)
    
    # Padding
    padding = (int((filters_size[1] - 1) / 2), int((filters_size[1] - 1) / 2),
               filters_size[0] - 1, 0)
    
    x_paded = F.pad(x, padding)

修正代码

python 复制代码
def down_shifted_conv2d(x , num_filters , filters_size = [2,3],stride = 1, **kwargs):
    batch_size,H,W,channels = x.shape
    # 按照顺序对4个维度分别进行填充
    padding = (0,0,
        int(((filters_size[1]) - 1) / 2 ) , int((int(filters_size[1]) - 1) / 2),
        int(filters_size[0]) - 1 , 0,
        0,0)
    x_paded = nn.functional.pad(x, padding)
    x_paded = x_paded.permute(0,3,1,2)
    # 进行卷积
    conv_layer = nn.Conv2d(in_channels=channels, out_channels=num_filters, 
                           kernel_size=filters_size,
                           stride=stride, **kwargs)
    
    return conv_layer(x_paded)
# Example usage
x = torch.randn(8, 64, 64, 3)  
num_filters = 16
output = down_shifted_conv2d(x, num_filters)
print(output.shape)

执行结果

相关推荐
风合星语5 天前
2026 具身智能技术实战(一):VLA 到底怎么控制机器人?——用 LeRobot 跑通 SmolVLA 推理
pytorch·机器人·具身智能·vla·lerobot·smolvla
Tancenter6 天前
sequeeze()和unsequeeze()
pytorch·tensorr
Thomas.Sir6 天前
第21课:PyTorch|GPU多卡训练与分布式训练基础【让多卡并行成为你的加速引擎】
人工智能·pytorch·分布式
CODER03046 天前
ubuntu22.04部署完整deepseek局域网web服务全过程(RTX5090安装黑屏+web端多人并发)
pytorch·webui·ubuntu22.04·ollama·deepseek·rtx5090·自然语言模型
宿州派大星6 天前
[NLP实战] 基于PyTorch实现N-gram词嵌入模型:输入4个词预测第5个词
人工智能·pytorch·深度学习·nlp
Liaiyang666 天前
空圈容错视角下的无人机全链路审计:从理论框架到耦合式检验
人工智能·pytorch·python·深度学习·系统架构·自动驾驶·无人机
AI模力圈7 天前
Pytorch图模式技术原理解析
pytorch·深度学习·torch.compile
Tancenter7 天前
gather和scatter API
pytorch·tensor
磁场转动100万匹7 天前
基于 dlib 与 OpenCV 的疲劳驾驶检测:眼睛纵横比(EAR)原理与代码逐段解析
pytorch·python
Dr_Fourier7 天前
AWQ量化
c++·人工智能·pytorch·ai