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实现豆瓣图片下载的方法
May 25 Python
Python内建模块struct实例详解
Feb 02 Python
使用Django启动命令行及执行脚本的方法
May 29 Python
python批量修改文件夹及其子文件夹下的文件内容
Mar 15 Python
python实现从本地摄像头和网络摄像头截取图片功能
Jul 11 Python
对于Python深浅拷贝的理解
Jul 29 Python
利用python list完成最简单的DB连接池方法
Aug 09 Python
Python生态圈图像格式转换问题(推荐)
Dec 02 Python
python实现飞机大战游戏(pygame版)
Oct 26 Python
python利用百度云接口实现车牌识别的示例
Feb 21 Python
django项目中新增app的2种实现方法
Apr 01 Python
PyCharm2020最新激活码+激活码补丁(亲测最新版PyCharm2020.2激活成功)
Nov 25 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
PhpMyAdmin中无法导入sql文件的解决办法
2010/01/08 PHP
PHP安全的URL字符串base64编码和解码
2014/06/19 PHP
php发送与接收流文件的方法
2015/02/11 PHP
基于jQuery的一个扩展form序列化到json对象
2010/12/09 Javascript
nodejs中exports与module.exports的区别详细介绍
2013/01/14 NodeJs
JQuery AJAX 中文乱码问题解决
2013/06/05 Javascript
javascript获取url上某个参数的方法
2013/11/08 Javascript
javascript操作css属性
2013/12/30 Javascript
Bootstrap自定义文件上传下载样式
2016/05/26 Javascript
Bootstrap Table表格一直加载(load)不了数据的快速解决方法
2016/09/17 Javascript
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
2017/10/25 Javascript
bootstrap实现二级下拉菜单效果
2017/11/23 Javascript
jquery实现楼层滚动效果
2018/01/01 jQuery
详解JavaScript中操作符和表达式
2018/09/12 Javascript
JS栈stack类的实现与使用方法示例
2019/01/31 Javascript
用Python编写一个简单的俄罗斯方块游戏的教程
2015/04/03 Python
利用Python抓取行政区划码的方法
2016/11/28 Python
Django使用中间键实现csrf认证详解
2019/07/22 Python
Python识别html主要文本框过程解析
2020/02/18 Python
浅谈matplotlib中FigureCanvasXAgg的用法
2020/06/16 Python
移动端html5判断是否滚动到底部并且下拉加载
2019/11/19 HTML / CSS
俄罗斯电子产品、计算机和家用电器购物网站:OLDI
2019/10/27 全球购物
网站编辑求职信
2013/10/17 职场文书
体育老师的教学自我评价分享
2013/11/19 职场文书
幼儿园教师节活动方案
2014/02/02 职场文书
大四自我鉴定
2014/02/08 职场文书
《口技》教学反思
2014/02/21 职场文书
《桥》教学反思
2014/04/09 职场文书
活动总结报告范文
2014/05/04 职场文书
涉密人员保密承诺书
2014/05/28 职场文书
社会工作专业自荐信
2014/09/26 职场文书
2014年化妆品销售工作总结
2014/12/01 职场文书
2015年教师节主持词
2015/07/03 职场文书
简历中的自我评价怎么写呢?
2019/04/30 职场文书
导游词之绍兴柯岩古镇
2020/01/09 职场文书
CocosCreator入门教程之网络通信
2021/04/16 Javascript