Pytorch使用shuffle打乱数据的操作


Posted in Python onMay 20, 2021

这个东西算是我被这个shuffle坑了的一个总结吧!

首先我得告诉你一件事,那就是pytorch中的tensor,如果直接使用random.shuffle打乱数据,或者使用下面的方式,自己定义直接写。

def Shuffle(self, x, y,random=None, int=int):
         if random is None:
            random = self.random
                 for i in range(len(x)):
            j = int(random() * (i + 1))
            if j<=len(x)-1:
                x[i],x[j]=x[j],x[i]
                y[i],y[j]=y[j],y[i]
          retrun x,y

那你就会收获一堆的混乱数据,因为使用这种交换的方式对tensor类型的数据进行操作,会导致里面的数据出现重复复制的问题。

比如我y中的数据为【0,1,0,1,0,1】

在经过几次shuffle,其中的数据就变成了【1,1,1,1,1,1】。

数据顿时出现混乱。

正确的方式是先转成numpy,再进行交换数据

比如:

def Shuffle(self, x, y,random=None, int=int):
        """x, random=random.random -> shuffle list x in place; return None.
        Optional arg random is a 0-argument function returning a random
        float in [0.0, 1.0); by default, the standard random.random.
        """
        if random is None:
            random = self.random #random=random.random
        #转成numpy
        if torch.is_tensor(x)==True:
            if self.use_cuda==True:
               x=x.cpu().numpy()
            else:
               x=x.numpy()
        if torch.is_tensor(y) == True:
            if self.use_cuda==True:
               y=y.cpu().numpy()
            else:
               y=y.numpy()
        #开始随机置换
        for i in range(len(x)):
            j = int(random() * (i + 1))
            if j<=len(x)-1:#交换
                x[i],x[j]=x[j],x[i]
                y[i],y[j]=y[j],y[i]
        #转回tensor
        if self.use_cuda == True:
            x=torch.from_numpy(x).cuda()
            y=torch.from_numpy(y).cuda()
        else:
            x = torch.from_numpy(x)
            y = torch.from_numpy(y)
        return x,y

补充:python对训练数据集shuffle(打乱)的一些方式

1.通过数组来shuffle

image_list=[]           # list of images
label_list=[]           # list of labels
 
temp = np.array([image_list, label_list])
temp = temp.transpose()
np.random.shuffle(temp)
 
images = temp[:, 0]     # array of images   (N,)
labels = temp[:, 1]

2.通过索引 Index 来 shuffle

image_list=[]           # list of images
label_list=[]           # list of labels
 
##如果image_list存的是读取的特征数据,而不是图片路径,不要注释后面两句(list无法索引内部list)
#[list indices must be integers or slices, not list]
#image_list = np.array(image_list)
#label_list = np.array(label_list)
 
index = [i for i in range(len(image_list))]
np.random.shuffle(index)
images = image_list[index]
labels = label_list[index]

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Python中操作字典之clear()方法的使用
May 21 Python
python数字图像处理之骨架提取与分水岭算法
Apr 27 Python
Django Admin实现三级联动的示例代码(省市区)
Jun 22 Python
python数据归一化及三种方法详解
Aug 06 Python
python函数参数(必须参数、可变参数、关键字参数)
Aug 16 Python
详解使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件
Aug 23 Python
给大家整理了19个pythonic的编程习惯(小结)
Sep 25 Python
Python进程池Pool应用实例分析
Nov 27 Python
Python开发企业微信机器人每天定时发消息实例
Mar 17 Python
Jupyter Notebook 文件默认目录的查看以及更改步骤
Apr 14 Python
python 实现非极大值抑制算法(Non-maximum suppression, NMS)
Oct 15 Python
python 6种方法实现单例模式
Dec 15 Python
教你利用Selenium+python自动化来解决pip使用异常
python 提取html文本的方法
May 20 #Python
学会用Python实现滑雪小游戏,再也不用去北海道啦
pytorch 带batch的tensor类型图像显示操作
pytorch 中nn.Dropout的使用说明
May 20 #Python
Python 线程池模块之多线程操作代码
May 20 #Python
pytorch中[..., 0]的用法说明
May 20 #Python
You might like
让的PHP代码飞起来的40条小技巧(提升php效率)
2010/04/12 PHP
百度地图经纬度转换到腾讯地图/Google 对应的经纬度
2015/08/28 PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
2018/04/08 PHP
善用事件代理,警惕闭包的性能陷阱。
2011/01/20 Javascript
js操作iframe的一些方法介绍
2013/06/25 Javascript
解决用jquery load加载页面到div时,不执行页面js的问题
2014/02/22 Javascript
javascript类型转换示例
2014/04/29 Javascript
javascript中DOM复选框选择用法实例
2015/05/14 Javascript
JavaScript数据结构之数组的表示方法示例
2017/04/12 Javascript
React native ListView 增加顶部下拉刷新和底下点击刷新示例
2018/04/27 Javascript
vue-music 使用better-scroll遇到轮播图不能自动轮播问题
2018/12/03 Javascript
简单了解vue中父子组件如何相互传递值(基础向)
2019/07/12 Javascript
layui table 表格上添加日期控件的两种方法
2019/09/28 Javascript
Vue表单控件数据绑定方法详解
2020/02/05 Javascript
[03:21]辉夜杯主赛事 12月25日TOP5
2015/12/26 DOTA
[46:23]完美世界DOTA2联赛PWL S2 FTD vs Magma 第一场 11.20
2020/11/23 DOTA
Python中让MySQL查询结果返回字典类型的方法
2014/08/22 Python
Django应用程序中如何发送电子邮件详解
2017/02/04 Python
Python中if elif else及缩进的使用简述
2018/05/31 Python
Python3.5 + sklearn利用SVM自动识别字母验证码方法示例
2019/05/10 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
2020/03/11 Python
Python docutils文档编译过程方法解析
2020/06/23 Python
Python Mock模块原理及使用方法详解
2020/07/07 Python
Python爬取某平台短视频的方法
2021/02/08 Python
Django视图类型总结
2021/02/17 Python
详解HTML5中垂直上下居中的解决方案
2017/12/20 HTML / CSS
Hotels.com爱尔兰:全球酒店预订
2017/02/24 全球购物
德国机车企业:FC-Moto
2017/10/27 全球购物
亚马逊意大利站点:Amazon.it
2020/12/31 全球购物
C#怎么让一个窗口居中显示?
2015/10/20 面试题
青年教师典范事迹材料
2014/01/31 职场文书
趣味运动会赞词
2015/07/22 职场文书
php引用传递
2021/04/01 PHP
python 进阶学习之python装饰器小结
2021/09/04 Python
vue中 this.$set的使用详解
2021/11/17 Vue.js
SQL试题 使用窗口函数选出连续3天登录的用户
2022/04/24 Oracle