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实现求数列和的方法示例
Jan 12 Python
python打包压缩、读取指定目录下的指定类型文件
Apr 12 Python
Python实现简易过滤删除数字的方法小结
Jan 09 Python
PyQt QCombobox设置行高的方法
Jun 20 Python
pygame实现烟雨蒙蒙下彩虹雨
Nov 11 Python
使用pyqt5 tablewidget 单元格设置正则表达式
Dec 13 Python
PyQt5 界面显示无响应的实现
Mar 26 Python
python可迭代对象去重实例
May 15 Python
解决导入django_filters不成功问题No module named 'django_filter'
Jul 15 Python
详解Python IO编程
Jul 24 Python
用 python 进行微信好友信息分析
Nov 28 Python
高考要来啦!用Python爬取历年高考数据并分析
Jun 03 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编程与应用
2006/10/09 PHP
关于BIG5-HKSCS的解决方法
2007/03/20 PHP
js 巧妙去除数组中的重复项
2010/01/25 Javascript
Jquery实现页面加载时弹出对话框代码
2013/04/19 Javascript
Extjs NumberField后面加单位实现思路
2013/07/30 Javascript
利用jQuery实现可以编辑的表格
2014/05/26 Javascript
javascript设计模式之中介者模式Mediator
2014/12/30 Javascript
JS+CSS模拟可以无刷新显示内容的留言板实例
2015/03/03 Javascript
黑帽seo劫持程序,js劫持搜索引擎代码
2015/09/15 Javascript
Javascript实现苹果悬浮虚拟按钮
2016/04/10 Javascript
Asp.Net之JS生成分页条的方法
2016/11/23 Javascript
原生js实现简单的焦点图效果实例
2017/12/14 Javascript
jQuery实现图片上传预览效果功能完整实例【测试可用】
2018/05/28 jQuery
通过实例了解JS 连续赋值
2019/09/24 Javascript
详解如何在Javascript和Sass之间共享变量
2019/11/13 Javascript
vue中的过滤器及其时间格式化问题
2020/04/09 Javascript
微信小程序调用wx.getImageInfo遇到的坑解决
2020/05/31 Javascript
jQuery zTree如何改变指定节点文本样式
2020/10/16 jQuery
[01:23:35]Ti4主赛事胜者组 DK vs EG 1
2014/07/19 DOTA
[36:19]2018DOTA2亚洲邀请赛 小组赛 A组加赛 Newbee vs LGD
2018/04/03 DOTA
详解Python传入参数的几种方法
2019/05/16 Python
基于Python实现人脸自动戴口罩系统
2020/02/06 Python
mac安装python3后使用pip和pip3的区别说明
2020/09/01 Python
Python操作dict时避免出现KeyError的几种解决方法
2020/09/20 Python
python中slice参数过长的处理方法及实例
2020/12/15 Python
Python+MySQL随机试卷及答案生成程序的示例代码
2021/02/01 Python
基于PyInstaller各参数的含义说明
2021/03/04 Python
Vans荷兰官方网站:美国南加州的原创极限运动潮牌
2018/01/23 全球购物
Kangol帽子官网:坎戈尔袋鼠
2018/09/26 全球购物
意大利在线高尔夫商店:Online Golf
2021/03/09 全球购物
介绍一下Java中的Class类
2015/04/10 面试题
临床护士自荐信
2014/01/31 职场文书
黄金搭档广告词
2014/03/21 职场文书
群众路线剖析材料(四风)
2014/11/05 职场文书
刑事案件上诉状
2015/05/23 职场文书
微信小程序中wxs文件的一些妙用分享
2022/02/18 Javascript