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下的多进程编程
Apr 28 Python
python实现Decorator模式实例代码
Feb 09 Python
替换python字典中的key值方法
Jul 06 Python
如何利用python制作时间戳转换工具详解
Sep 12 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
Dec 22 Python
Python查找最长不包含重复字符的子字符串算法示例
Feb 13 Python
Python基础教程之if判断,while循环,循环嵌套
Apr 25 Python
Django 查询数据库并返回页面的例子
Aug 12 Python
pytorch快速搭建神经网络_Sequential操作
Jun 17 Python
终于搞懂了Keras中multiloss的对应关系介绍
Jun 22 Python
python 获取剪切板内容的两种方法
Nov 28 Python
Python基于百度AI实现抓取表情包
Jun 27 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.ini中添加extension=php_mysqli.dll指令的说明
2007/06/14 PHP
Prototype使用指南之ajax
2007/01/10 Javascript
用jQuery简化JavaScript开发分析
2009/02/19 Javascript
JavaScript 撑出页面文字换行
2009/06/15 Javascript
自制轻量级仿jQuery.boxy对话框插件代码
2010/10/26 Javascript
JS执行删除前的判断代码
2014/02/18 Javascript
根据当前时间在jsp页面上显示上午或下午
2014/08/18 Javascript
javascript获取文档坐标和视口坐标
2015/05/26 Javascript
jquery简单实现带渐显效果的选项卡菜单代码
2015/09/01 Javascript
jQuery Easyui快速入门教程
2016/08/21 Javascript
Angualrjs和bootstrap相结合实现数据表格table
2017/03/30 Javascript
JavaScript中使用Async实现异步控制
2017/08/15 Javascript
微信小程序异步处理详解
2017/11/10 Javascript
vue.js轮播图组件使用方法详解
2018/07/03 Javascript
如何在Vue中使用CleaveJS格式化你的输入内容
2018/12/14 Javascript
nodejs中各种加密算法的实现详解
2019/07/11 NodeJs
微信小程序实现下拉框功能
2019/07/16 Javascript
python实现简单的TCP代理服务器
2014/10/08 Python
Python读取ini文件、操作mysql、发送邮件实例
2015/01/01 Python
在Mac OS系统上安装Python的Pillow库的教程
2015/11/20 Python
利用python实现数据分析
2017/01/11 Python
python解决汉字编码问题:Unicode Decode Error
2017/01/19 Python
python selenium 获取标签的属性值、内容、状态方法
2018/06/22 Python
Python 从subprocess运行的子进程中实时获取输出的例子
2019/08/14 Python
django写用户登录判定并跳转制定页面的实例
2019/08/21 Python
python requests抓取one推送文字和图片代码实例
2019/11/04 Python
解决阿里云邮件发送不能使用25端口问题
2020/08/07 Python
英国最出名高街品牌:Forever Unique
2018/02/24 全球购物
英国最大的在线照明商店:Litecraft
2020/08/31 全球购物
一份Java笔试题
2012/02/21 面试题
平安建设实施方案
2014/03/19 职场文书
央视元宵晚会主持串词
2014/03/25 职场文书
大学生党员个人剖析材料
2014/10/08 职场文书
2014年党总支工作总结
2014/12/18 职场文书
2015廉洁自律个人总结
2015/02/14 职场文书
2015民办小学年度工作总结
2015/05/26 职场文书