针对“RuntimeError: each element in list of batch should be of equal size” 问题解决
第一次运行代码出现了这个问题:

这个问题的出现主要来源于DataLoader类中的collate.py文件造成的问题,由于每个batch里的长度不一致,因此导致出现了该问题。
通过百度方法和查看源码去解决该问题,总结下来
他的解决方法目前来说有三种(如果你有更好的方法,欢迎在评论区留言,我们一起学习):
解决方案1:
将代码中报错地方的batch_size的值改成1,即可解决,这也是最简单的解决办法,但是这种解决办法并没有真正从根源上进行解决。他只是没有进行批处理,转化为一条提的单独处理方案。
原始代码如果为:data_loader = DataLoader(dataset,batch_size=2,shuffle=True)
我们可以改成
data_loader = DataLoader(dataset,batch_size=1,shuffle=True)
解决方案2
这个问题出现的原因我们还可以发现是我们在读取数据集的过程中每个数据的长度不一,这个时候我们就可以将读取数据的阶段进行裁剪,例如设置读取到数据的每个长度为100(可以自行设置),即在def__gettiem__中进行裁剪,或者是直接在__init__阶段读取数据的时候就进行裁剪也可以。
这种解决方案的虽然可以从根本上解决这个问题,但是由于舍弃或者是添加了一部分的词或者是特征,容易导致最终结果效果不理想。
解决方案3
这个解决方案的灵感来源于Dataset和DataLoader类的介绍 大家可以进行相应的查看。他针对这部分的讲解非常的详细,这里进行相应的借用并进行介绍。
在DataLoader里,除了上面提到的shuffle参数和batch_size参数以外,还有一个非常重要的传入参数collate_fn,这个参数传入的是一个函数,这个函数主要是对每个batch进行处理,最终输出一个batch的返回值,换句话说collate_fn函数的返回值,就是遍历DataLoader的时候每个“batch”的返回值了(类似于上面例子中的二维tensor)。下面我写一个函数,让大家看看到底是怎么处理的。
def mycollate(item):
def mycollate(item):
sample1, sample2 = item
return {'第一个样本':sample1,'第二个样本':sample2}
from torch.utils.data import DataLoader
myDataloader = DataLoader(dataset, shuffle=True, batch_size=2, collate_fn=mycollate)
我们现在再来打印一下myDataloader的每个元素。
for batch in myDataloader:
print(batch)
print('==========================L()=====')
结果展示:
{'第一个样本': tensor([ 11, 16, 7, 3, 9, 100, 100, 100, 100, 100, 100, 100]), '第二个样本': tensor([ 7, 16, 11, 100, 100, 100, 100, 100, 100, 100, 100, 100])}
===============================
{'第一个样本': tensor([ 3, 9, 12, 2, 17, 1, 13, 6, 10, 18, 9, 0]), '第二个样本': tensor([ 4, 5, 15, 14, 8, 100, 100, 100, 100, 100, 100, 100])}
针对“RuntimeError: each element in list of batch should be of equal size” 问题解决的更多相关文章
- QML Image Element
QML Image Element The Image element displays an image in a declarative user interface More... Image元 ...
- [Swift]LeetCode503. 下一个更大元素 II | Next Greater Element II
Given a circular array (the next element of the last element is the first element of the array), pri ...
- Pytorch中的Batch Normalization操作
之前一直和小伙伴探讨batch normalization层的实现机理,作用在这里不谈,知乎上有一篇paper在讲这个,链接 这里只探究其具体运算过程,我们假设在网络中间经过某些卷积操作之后的输出的f ...
- Ogre 1.8 terrain 和 paging 组件
以下转自:http://hi.baidu.com/xocoder/item/e8d87cf53d87612b753c4cfd OGRE地形生成 OGRE可以通过两个接口来生成地形,分别是void Te ...
- 小白眼中的AI之~Numpy基础
周末码一文,明天见矩阵- 其实Numpy之类的单讲特别没意思,但不稍微说下后面说实际应用又不行,所以大家就练练手吧 代码裤子: https://github.com/lotapp/BaseCode ...
- selenium 常见面试题以及答案(Java版)
1.怎么 判断元素是否存在? 判断元素是否存在和是否出现不同, 判断是否存在意味着如果这个元素压根就不存在, 就会抛出NoSuchElementException 这样就可以使用try catch,如 ...
- Dom4j把xml转换成Map(非固定格式)
将xml转换成Map,能够应对不用结构的xml,而不是只针对固定格式的xml.转换规则:1.主要是Map与List的互相嵌套2.同名称的节点会被装进List 示例: import java.util. ...
- zookeeper+jstorm的集群搭建
zookeeper的配置: zookeeper有三种配置方式:单机式/伪分布式/集群式 其中伪分布式是在一台电脑上通过不同的端口来模拟分布式情形,需要N份配置文件和启动程序,而集群式是多个zookee ...
- Java提高篇(三二)-----List总结
前面LZ已经充分介绍了有关于List接口的大部分知识,如ArrayList.LinkedList.Vector.Stack,通过这几个知识点可以对List接口有了比较深的了解了.只有通过归纳总结的知识 ...
- Java集合源码学习(一)集合框架概览
>>集合框架 Java集合框架包含了大部分Java开发中用到的数据结构,主要包括List列表.Set集合.Map映射.迭代器(Iterator.Enumeration).工具类(Array ...
随机推荐
- Twenty-nine
组件的声明周期 声明周期(Life Cycle)是指一个组件从创建->运行->销毁的整个阶段,强调的是一个时间段. 声明周期函数:是由vue框架提供的内置函数,会伴随着组件的生命周期,自动 ...
- docker systemctl start报错: Failed to get D-Bus connection: Operation not permitted
转载自:https://blog.csdn.net/zhenliang8/article/details/78330658 最近使用docker部署ansible,安装ssh 遇到启动服务报错:Fai ...
- 【C++】之前学习C++没有注意到的点或者学到了冷知识(待补充)
1.string和c_str() string str = "hello"; const char* cstr = str.c_str(); str = "yep,i m ...
- [Oracle19C ASM管理] ASM的存储管理
安装过程中,选择的OMF自动管理文件.可以看到存储放在ASM的根下. SQL> show parameter db_create_file_dest; NAME TYPE VALUE db_cr ...
- JavaScript的Array.flat()函数深入探讨
JavaScript的Array.flat()函数深入探讨 在过去的几年中,已经将许多有用的功能添加到Javascript Array全局对象中,这些功能为开发人员在编写可用于数组的代码时提供了多 ...
- HDLbits——Lfsr5
Build this LFSR. The reset should reset the LFSR to 1 module top_module( input clk, input reset, // ...
- mariadb数据库查询(select)
查询基本使用(条件,排序,聚合函数,分组,分页) 示例:--创建学生表 create table students ( id int unsigned not null auto_increment ...
- 查看Linux系统的一些信息
1.查看物理cpu个数 grep 'physical id' /proc/cpuinfo | sort -u | wc -l cat /proc/cpuinfo | grep "physic ...
- mongoDB日常操作03
MongoDB中导出csv文件1.找到mongoDB的安装目录,bin目录2.通过控制台进入bin目录 例: cd E:\java\mongoDB\bin\3.测试mongo.exe能否运行 例: ...
- centos-7部署kafka-v2.13.3.0.1集群
1.部署测试机器规划 ip kafka 版本 zookeeper 版本 192.168.113.132 v2.13.3.0.1 v3.6.3 192.168.113. ...