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 29 Python
深入理解python中的浅拷贝和深拷贝
May 30 Python
Python爬虫代理IP池实现方法
Jan 05 Python
python使用xslt提取网页数据的方法
Feb 23 Python
Python 变量类型详解
Oct 10 Python
Django 实现xadmin后台菜单改为中文
Nov 15 Python
使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式
Jan 08 Python
python argparse模块通过后台传递参数实例
Apr 20 Python
TensorFlow固化模型的实现操作
May 26 Python
Python类绑定方法及非绑定方法实例解析
Oct 09 Python
python 如何对logging日志封装
Dec 02 Python
Python爬虫+Tkinter制作一个翻译软件的示例
Feb 20 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实现从ftp服务器上下载文件树到本地电脑的程序
2009/02/10 PHP
简单实现PHP留言板功能
2016/12/21 PHP
php如何实现不借助IDE快速定位行数或者方法定义的文件和位置
2017/01/17 PHP
详谈php ip2long 出现负数的原因及解决方法
2017/04/05 PHP
ThinkPHP5+Layui实现图片上传加预览功能
2018/08/17 PHP
动态添加js事件实现代码
2009/03/12 Javascript
jquery 事件执行检测代码
2009/12/09 Javascript
Jquery+WebService 校验账号是否已被注册的代码
2010/07/12 Javascript
JS记录用户登录次数实现代码
2014/01/15 Javascript
javascript实现滑动解锁功能
2014/12/31 Javascript
深入浅析javascript立即执行函数
2015/10/23 Javascript
JS Array创建及concat()split()slice()的使用方法
2016/06/03 Javascript
JS去除空格和换行的正则表达式(推荐)
2016/06/14 Javascript
功能强大的jquery.validate表单验证插件
2016/11/07 Javascript
谈谈对vue响应式数据更新的误解
2017/08/01 Javascript
Easyui和zTree两种方式分别实现树形下拉框
2017/08/04 Javascript
Angular 开发学习之Angular CLI的安装使用
2017/12/31 Javascript
Bootstrap popover 实现鼠标移入移除显示隐藏功能方法
2018/01/24 Javascript
JS通过位运算实现权限加解密
2018/08/14 Javascript
微信小程序签到功能
2018/10/31 Javascript
angularjs http与后台交互的实现示例
2018/12/21 Javascript
Vue解析带html标签的字符串为dom的实例
2019/11/13 Javascript
Python中使用PyHook监听鼠标和键盘事件实例
2014/07/18 Python
python中的reduce内建函数使用方法指南
2014/08/31 Python
mac下如何将python2.7改为python3
2018/07/13 Python
Django model序列化为json的方法示例
2018/10/16 Python
python组合无重复三位数的实例
2018/11/13 Python
python3实现名片管理系统(控制台版)
2020/11/29 Python
Html5让容器充满屏幕高度或自适应剩余高度的布局实现
2020/05/14 HTML / CSS
简述数组与指针的区别
2014/01/02 面试题
闭幕式主持词
2014/04/02 职场文书
《凡卡》教学反思
2014/04/09 职场文书
大学生党员批评与自我批评范文
2014/10/14 职场文书
思想政治表现评语
2015/01/04 职场文书
2016年10月份红领巾广播稿
2015/12/21 职场文书
详解SQL报错盲注
2022/07/23 SQL Server