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 字符串操作方法大全
Mar 11 Python
python图像处理之镜像实现方法
May 30 Python
Python删除windows垃圾文件的方法
Jul 14 Python
Python基于Matplotlib库简单绘制折线图的方法示例
Aug 14 Python
Tensorflow限制CPU个数实例
Feb 06 Python
一文了解python 3 字符串格式化 F-string 用法
Mar 04 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
Mar 18 Python
Python3批量创建Crowd用户并分配组
May 20 Python
Virtualenv 搭建 Py项目运行环境的教程详解
Jun 22 Python
关于Kotlin中SAM转换的那些事
Sep 15 Python
python数据可视化JupyterLab实用扩展程序Mito
Nov 20 Python
python数字图像处理数据类型及颜色空间转换
Jun 28 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 采集程序原理分析篇
2010/03/05 PHP
php下连接ftp实现文件的上传、下载、删除文件实例代码
2010/06/03 PHP
PHP设计模式之代理模式的深入解析
2013/06/13 PHP
CI框架使用composer安装的依赖包步骤与方法分析
2016/11/21 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
javascript 可以拖动的DIV(二)
2009/06/26 Javascript
jquery ui 1.7 ui.tabs 动态添加与关闭(按钮关闭+双击关闭)
2010/04/01 Javascript
文本框输入时 实现自动提示(像百度、google一样)
2012/04/05 Javascript
js改变img标签的src属性在IE下没反应的解决方法
2013/07/23 Javascript
对于this和$(this)的个人理解
2013/09/08 Javascript
jquery UI Datepicker时间控件的使用方法(加强版)
2015/11/07 Javascript
走进AngularJs之过滤器(filter)详解
2017/02/17 Javascript
JavaScript函数表达式详解及实例
2017/05/05 Javascript
JavaScript中常见的八个陷阱总结
2017/06/28 Javascript
JavaScript调试之console.log调试的一个小技巧分享
2017/08/07 Javascript
详解JS判断页面是在手机端还是在PC端打开的方法
2019/04/26 Javascript
Python切换pip安装源的方法详解
2016/11/18 Python
解决Django模板无法使用perms变量问题的方法
2017/09/10 Python
基于Django contrib Comments 评论模块(详解)
2017/12/08 Python
PyCharm设置SSH远程调试的方法
2018/07/17 Python
Python 实现 T00ls 自动签到脚本代码(邮件+钉钉通知)
2020/07/06 Python
澳大利亚小众服装品牌:Maurie & Eve
2018/03/27 全球购物
泰国时尚电商:POMELO Fashion
2020/03/11 全球购物
大学生工作推荐信范文
2013/12/02 职场文书
大学生自我鉴定范文
2013/12/28 职场文书
倡议书格式
2014/04/14 职场文书
民族学专业求职信
2014/07/28 职场文书
商务经理岗位职责
2014/08/03 职场文书
防灾减灾活动总结
2014/08/30 职场文书
委托书格式要求
2015/01/28 职场文书
幼儿教师辞职信范文
2015/03/02 职场文书
党员“一帮一”活动总结
2015/05/07 职场文书
学习经验交流会策划书
2015/11/02 职场文书
看古人们是如何赞美老师的?
2019/07/08 职场文书
微信小程序用户授权最佳实践指南
2021/05/08 Javascript
win10此电脑打不开怎么办 win10双击此电脑无响应的解决办法
2022/07/23 数码科技