当前位置: 首页 > news >正文

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"(批次、通道、高度、宽度)格式

异常报错

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

异常截图

在这里插入图片描述

异常代码

def down_shifted_conv2d(x , num_filters , filters_size = [2,3],stride = 1, **kwargs):batch_size,H,W,channels = x.shapepadding = (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,按照编号,将新的顺序填好即可

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)# Paddingpadding = (int((filters_size[1] - 1) / 2), int((filters_size[1] - 1) / 2),filters_size[0] - 1, 0)x_paded = F.pad(x, padding)

修正代码

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)

执行结果

http://www.lryc.cn/news/151838.html

相关文章:

  • 【FPGA项目】沙盘演练——基础版报文收发
  • 【C++技能树】继承概念与解析
  • 计算机网络 第二节
  • 无涯教程-机器学习 - 矩阵图函数
  • Redis 高可用与集群
  • 修改文件名后Git仓上面并没有修改
  • Linux 信号
  • 深入探讨梯度下降:优化机器学习的关键步骤(二)
  • 高频算法面试题
  • Hive-启动与操作(2)
  • css transition 指南
  • LeetCode 面试题 02.05. 链表求和
  • 一米脸书营销软件
  • vue 根据数值判断颜色
  • Hugging Face 实战系列 总目录
  • 国标视频云服务EasyGBS国标视频平台迁移服务器后无法启动的问题解决方法
  • HTML <th> 标签
  • HTTP/1.1协议中的响应报文
  • TDengine函数大全-选择函数
  • 非关系型数据库Redis的安装
  • oracle 创建数据库
  • wxWidgets从空项目开始Hello World
  • 【Apollo学习笔记】——规划模块TASK之SPEED_DECIDER
  • 【操作系统】一文快速入门,很适合JAVA后端看
  • C++ Primer阅读笔记--allocator类的使用
  • 【C++历险记】面向对象|菱形继承及菱形虚拟继承
  • 【Locomotor运动模块】攀爬
  • ELK安装、部署、调试(一)设计规划及准备
  • 【CSS】解决对齐的小问题
  • 【狂神】Spring5(Aop的实现方式)