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实现的文件夹清理程序分享
Nov 22 Python
进一步探究Python中的正则表达式
Apr 28 Python
基于python 字符编码的理解
Sep 02 Python
查看Django和flask版本的方法
May 14 Python
Python中new方法的详解
Jan 15 Python
Python实现字符型图片验证码识别完整过程详解
May 10 Python
Python pandas.DataFrame调整列顺序及修改index名的方法
Jun 21 Python
关于tf.nn.dynamic_rnn返回值详解
Jan 20 Python
Python实现在线批量美颜功能过程解析
Jun 10 Python
pyqt5 textEdit、lineEdit操作的示例代码
Aug 12 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
Oct 04 Python
Python实现视频自动打码的示例代码
Apr 08 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
基于mysql的bbs设计(四)
2006/10/09 PHP
PHP 的 __FILE__ 常量
2007/01/15 PHP
php计算函数执行时间的方法
2015/03/20 PHP
PHP中Session可能会引起并发问题
2015/06/26 PHP
php截取视频指定帧为图片
2016/05/16 PHP
Laravel中validation验证 返回中文提示 全局设置的方法
2019/09/29 PHP
JQuery中$.ajax()方法参数详解及应用
2013/12/12 Javascript
JS获取客户端IP地址、MAC和主机名的7个方法汇总
2014/07/21 Javascript
JavaScript设计模式之适配器模式介绍
2014/12/28 Javascript
jQuery实现DIV层收缩展开的方法
2015/02/27 Javascript
基于jQuery实现的旋转彩圈实例
2015/06/26 Javascript
javascript获取select值的方法分析
2015/07/02 Javascript
基于JavaScript实现点击页面任何位置返回
2016/08/31 Javascript
Vue表单实例代码
2016/09/05 Javascript
JQuery控制DIV的选取实现方法
2016/09/18 Javascript
Bootstrap 表单验证formValidation 实现远程验证功能
2017/05/17 Javascript
Nodejs中使用captchapng模块生成图片验证码
2017/05/18 NodeJs
JavaScript实现三级级联特效
2017/11/05 Javascript
vue-cli webpack 引入jquery的方法
2018/01/10 jQuery
微信小程序实现搜索历史功能
2020/03/26 Javascript
Python面向对象之类和对象属性的增删改查操作示例
2018/12/14 Python
python通过tcp发送xml报文的方法
2018/12/28 Python
解决django同步数据库的时候app models表没有成功创建的问题
2019/08/09 Python
浅谈Django QuerySet对象(模型.objects)的常用方法
2020/03/28 Python
canvas 阴影和图形变换的示例代码
2018/01/02 HTML / CSS
女子锻炼服装和瑜伽服装:Splits59
2019/03/04 全球购物
英国网上电器商店:Electricshop
2020/03/15 全球购物
巴西Bo.Bô官方在线商店:经营奢侈品时尚业务
2020/03/16 全球购物
linux面试题参考答案(9)
2015/01/07 面试题
写clone()方法时,通常都有一行代码,是什么?
2012/10/31 面试题
体育教育专业毕业生自荐信
2013/11/15 职场文书
写给学生的新学期寄语
2014/01/18 职场文书
打造完美自荐信
2014/01/24 职场文书
会议欢迎词范文
2015/01/27 职场文书
“5.12”护士节主持词
2015/07/04 职场文书
vue响应式原理与双向数据的深入解析
2021/06/04 Vue.js