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的Django框架中的ORM建立查询API
Apr 20 Python
不同版本中Python matplotlib.pyplot.draw()界面绘制异常问题的解决
Sep 24 Python
tensorflow学习笔记之简单的神经网络训练和测试
Apr 15 Python
浅谈python之新式类
Aug 12 Python
python 3.7.0 下pillow安装方法
Aug 27 Python
Python3 利用requests 库进行post携带账号密码请求数据的方法
Oct 26 Python
python实现flappy bird小游戏
Dec 24 Python
Python的高阶函数用法实例分析
Apr 11 Python
numpy库与pandas库axis=0,axis= 1轴的用法详解
May 27 Python
Django Channel实时推送与聊天的示例代码
Apr 30 Python
Python OpenCV去除字母后面的杂线操作
Jul 05 Python
Python IO文件管理的具体使用
Mar 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
解决phpmyadmin 乱码,支持gb2312和utf-8
2006/11/20 PHP
php中根据某年第几天计算出日期年月日的代码
2011/02/24 PHP
PHP源代码数组统计count分析
2011/08/02 PHP
PHP解析RSS的方法
2015/03/05 PHP
PHP自动识别当前使用移动终端
2018/05/21 PHP
JS刷新框架外页面七种实现代码
2013/02/18 Javascript
js 获取、清空input type=&quot;file&quot;的值(示例代码)
2013/12/24 Javascript
基于jquery css3实现点击动画弹出表单源码特效
2015/08/31 Javascript
JS中call/apply、arguments、undefined/null方法详解
2016/02/15 Javascript
javascript数组常用方法汇总
2016/09/10 Javascript
BACKBONE.JS 简单入门范例
2017/10/17 Javascript
使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件(推荐)
2018/05/01 Javascript
jquery3和layui冲突导致使用layui.layer.full弹出全屏iframe窗口时高度152px问题
2019/05/12 jQuery
ant-design-vue 实现表格内部字段验证功能
2019/12/16 Javascript
微信小程序实现加入购物车滑动轨迹
2020/11/18 Javascript
实例讲解python函数式编程
2014/06/09 Python
Python set集合类型操作总结
2014/11/07 Python
Python中编写ORM框架的入门指引
2015/04/29 Python
Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
2016/06/14 Python
浅谈Python爬取网页的编码处理
2016/11/04 Python
python xml.etree.ElementTree遍历xml所有节点实例详解
2016/12/04 Python
Python面向对象编程基础解析(二)
2017/10/26 Python
使用python判断你是青少年还是老年人
2018/11/29 Python
Python类和对象的定义与实际应用案例分析
2018/12/27 Python
如何用C代码给Python写扩展库(Cython)
2019/05/17 Python
pyqt5对用qt designer设计的窗体实现弹出子窗口的示例
2019/06/19 Python
css3 利用transform打造走动的2D时钟
2020/10/20 HTML / CSS
eBay奥地利站:eBay.at
2019/07/24 全球购物
澳大利亚领先的女性运动服品牌:Lorna Jane
2020/06/19 全球购物
优秀应届毕业生推荐信
2014/02/18 职场文书
一年级学生评语大全
2014/04/21 职场文书
学校消防安全责任书
2014/07/23 职场文书
领导干部学习“三严三实”思想汇报
2014/09/15 职场文书
2014教师评职称工作总结
2014/11/10 职场文书
2014年生活老师工作总结
2014/12/23 职场文书
python非标准时间的转换
2021/07/25 Python