【pytorch】ValueError: Expected more than 1 value per channel when training

news/2024/5/19 12:21:15

ValueError: Expected more than 1 value per channel when training

  • 一、解决方案
  • 二、问题分析
  • 三、深入分析,修改源码

一、解决方案

  1. dataloader设置参数 drop_last=True1 丢弃掉最后单独的样本
  2. 在训练前用num_of_samples % batch_size 算一下会不会正好剩下一个样本2
  3. 如果模型只inference,无需更新参数可以设置model.eval()
  4. 修改源码,注释掉相关判断的源码3 (自己心理得有数)

我遇到的问题比较奇怪,使用BatchNorm1d报错,但是BatchNorm2d就正常…

二、问题分析

ValueError: Expected more than 1 value per channel when training, got input size torch.Size xxx
在这里插入图片描述

如果输入的batch size = 1就抛出ValueError,那我的BatchNorm2d是如何正常运行的?.. 继续调试
在这里插入图片描述
明明输入的batch_size=1,突然变成500了
擦。。输入的是:torch.Size([1, 128, 500, 1]) 经过上一行标黄处代码size_prods变了
如果输入torch.Size([1, 512]),size_prod不会改变

  • 为什么使用BatchNorm1d报错,但是BatchNorm2d就正常... 原来是我应用它俩的场景不一样

三、深入分析,修改源码

BN详解4:Batch Normalization 学习笔记
需要明确,输入的batch_size=1 或者较小的话确实会影响BN参数的更新,以至于可能影响模型最后的效果

在这里插入图片描述
由于个人原因,需要batch_size=1时候的实验数据,故此记录
在这里插入图片描述
将相关代码注释,保留源函数 加个pass空操作 - 插眼


  1. 解决报错:ValueError: Expected more than 1 value per channel when training ↩︎

  2. Pytorch的12个坑 ↩︎

  3. 解决raise ValueError(“Expected more than 1 value per channel when training, got报错(亲测有效) ↩︎

  4. Batch Normalization 学习笔记 ↩︎


http://lihuaxi.xjx100.cn/news/83427.html

相关文章

【vuex】

文章目录资料安装使用快速开始基本使用(非模块化):例子:辅助函数导入参数mapStatemapGettersmapMutationsmapActions模块化:步骤:资料 尚硅谷视频:https://www.bilibili.com/video/BV1Zy4y1K7S…

武汉星起航:亚马逊产品被跟卖的应对方法

在亚马逊平台,是允许有跟卖的形式存在,当你的产品被一两个卖家跟卖,说明你的产品卖得好,但是如果你的产品被大量跟卖,那就要及时阻止,不然就要给别人作嫁衣了。 什么是跟卖? 几家欢喜几家愁&a…

2020ICPC南京【个人题解EFHKLM】

目录E - Evil Coordinate(思维、暴力)思路代码F - Fireworks(概率期望、三分)思路代码H - Harmonious Rectangle(思维、暴力)思路代码K - K Co-prime Permutation(签到、构造)思路代…

oracle 12c使用 SEED创建一个PDB

1 登录cdb export ORACLE_SIDorclcdb sqlplus / as sysdba 2 建pdb #这里利用pdbseed建一个orclpdb5 CREATE PLUGGABLE DATABASE orclpdb5 ADMIN USER pdbadmin IDENTIFIED BY oracle file_name_convert(pdbseed,orclpdb5) --看到会自动创建orclpdb5目录(和pdbseed并列)&…

测试开发用例

为何要写测试用例 测试用例式测试执行的依据测试用例可以复用,在回归测试时不用再次编写测试用例可以衡量需求的覆盖率后人可以借鉴手工测试用例时自动化测试的依据 测试用例的设计方法 基于需求的设计方法 需求是测试人员进行测试的依据,测试人员分…

从前向数据复制(FDR)到增强管道数据流转(EPDR)-taskBus的前世今生

增强管道数据流转技术(Enhance Pipeline Data Routing,EPDR)是 taskBus 跨平台多进程合作框架创立的开源数据分发技术,在软件无线电方向已经具有了较为完整的应用场景。应一些玩家要求,介绍一下这个技术的起源&#xf…

【贝塞尔曲线拟合】

贝塞尔曲线拟合问题描述拟合曲线生成过程参考程序注意事项问题描述 已知一条n阶贝塞尔曲线L(P0,P1,P2,P3,...,Pn)L(P0, P1, P2, P3, ..., Pn)L(P0,P1,P2,P3,...,Pn)(P0P0P0为起点,P1P1P1为第一个控制点,P2P2P2为第二个控制点,P3P…