第一次运行代码出现了这个问题:



这个问题的出现主要来源于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” 问题解决的更多相关文章

  1. QML Image Element

    QML Image Element The Image element displays an image in a declarative user interface More... Image元 ...

  2. [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 ...

  3. Pytorch中的Batch Normalization操作

    之前一直和小伙伴探讨batch normalization层的实现机理,作用在这里不谈,知乎上有一篇paper在讲这个,链接 这里只探究其具体运算过程,我们假设在网络中间经过某些卷积操作之后的输出的f ...

  4. Ogre 1.8 terrain 和 paging 组件

    以下转自:http://hi.baidu.com/xocoder/item/e8d87cf53d87612b753c4cfd OGRE地形生成 OGRE可以通过两个接口来生成地形,分别是void Te ...

  5. 小白眼中的AI之~Numpy基础

      周末码一文,明天见矩阵- 其实Numpy之类的单讲特别没意思,但不稍微说下后面说实际应用又不行,所以大家就练练手吧 代码裤子: https://github.com/lotapp/BaseCode ...

  6. selenium 常见面试题以及答案(Java版)

    1.怎么 判断元素是否存在? 判断元素是否存在和是否出现不同, 判断是否存在意味着如果这个元素压根就不存在, 就会抛出NoSuchElementException 这样就可以使用try catch,如 ...

  7. Dom4j把xml转换成Map(非固定格式)

    将xml转换成Map,能够应对不用结构的xml,而不是只针对固定格式的xml.转换规则:1.主要是Map与List的互相嵌套2.同名称的节点会被装进List 示例: import java.util. ...

  8. zookeeper+jstorm的集群搭建

    zookeeper的配置: zookeeper有三种配置方式:单机式/伪分布式/集群式 其中伪分布式是在一台电脑上通过不同的端口来模拟分布式情形,需要N份配置文件和启动程序,而集群式是多个zookee ...

  9. Java提高篇(三二)-----List总结

    前面LZ已经充分介绍了有关于List接口的大部分知识,如ArrayList.LinkedList.Vector.Stack,通过这几个知识点可以对List接口有了比较深的了解了.只有通过归纳总结的知识 ...

  10. Java集合源码学习(一)集合框架概览

    >>集合框架 Java集合框架包含了大部分Java开发中用到的数据结构,主要包括List列表.Set集合.Map映射.迭代器(Iterator.Enumeration).工具类(Array ...

随机推荐

  1. python调用包中函数__init__作用

    python调用包中函数__init__作用 lx:分享一个小知识点 lx:主函数中 调用了 包(目录)中某个模块的函数,但是没有出现模块名.函数铭 lx:可能是再包中的__init__中已经提前调用 ...

  2. 【RUNOOB】C语言学习之指针

    资料来源: (1) runoob; (2) C语言程序设计; 注1:Runoob中对于指针的讲述比较清晰简单,摘录出来(后续补充指针与结构体,指针与函数参数); 1.指针与变量的内存位置 (1) 每个 ...

  3. c++游戏编程(2)多文件编程与命名空间

    文章目录 前言 1 多文件编程 1.1 头文件 1.1.1 头文件的组成 1.1.2 头文件的储存 1.2 多文件编程 2 命名空间 总结 引用文章 前言 这是我的第二篇博客 上篇文章写了很多c++开 ...

  4. 大道至简读后感以及JAVA伪代码

    <大道至简>这本书引用<愚公移山>一文,生动完美的诠释了编程的整个过程.在两千年前的寓言中,愚公集项目组织者.团队经理.编程人员.技术分析师等众多角色于一身.首先是原始需求的产 ...

  5. AutoMapper在.Net Core WebApi中使用

    在.Net Core WebApi 里使用AutoMapper 1. 安装AutoMapper管理包  注意:service层中安装 WebApi层也需要安装 因为Webpi层有时候也需要用到Dto ...

  6. Python学习笔记组织文件之将美国风格日期的文件改名为欧洲风格的日期

    随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...

  7. 89、des加密算法

    import javax.crypto.Cipher; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpe ...

  8. DNS服务器(简)

    服务端:192.168.182.187 客户端:192.168.182.16 windows客户端:192.168.182.17 1.安装相关服务 yum -y install bind bind-c ...

  9. usbip:(一)初识

    USB/IP 总结   一.概要: USB/IP项目的目标是为用户提供通过网络远程访问usb设备的能力.在用户看来,访问usb设备和访问插入到本地电脑的设备没什么区别,该项目是开源的,可以用过适当的配 ...

  10. 2.对于script标签的放置位置

    使用<script>元素有两种方式 一种是在页面嵌入JavaScript代码 ,一种就是包含外部JavaScript文件 包含在<script>标签内部的JavaScript代 ...