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 文件读写操作实例详解
Mar 12 Python
关于python pyqt5安装失败问题的解决方法
Aug 08 Python
Python使用Scrapy爬虫框架全站爬取图片并保存本地的实现代码
Mar 04 Python
解决使用pycharm提交代码时冲突之后文件丢失找回的方法
Aug 05 Python
Python设计模式之适配器模式原理与用法详解
Jan 15 Python
在Pycharm中对代码进行注释和缩进的方法详解
Jan 20 Python
Python中的random.uniform()函数教程与实例解析
Mar 02 Python
python小程序实现刷票功能详解
Jul 17 Python
Tensorflow 使用pb文件保存(恢复)模型计算图和参数实例详解
Feb 11 Python
如何提高python 中for循环的效率
Apr 15 Python
python+requests接口压力测试500次,查看响应时间的实例
Apr 30 Python
Python3爬虫ChromeDriver的安装实例
Feb 06 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
用JavaScript隐藏控件的方法
2009/09/21 Javascript
javascript中的107个基础知识收集整理 推荐
2010/03/29 Javascript
简单的jquery拖拽排序效果实现代码
2011/09/20 Javascript
JavaScript 参数中的数组展开 [译]
2012/09/21 Javascript
FireBug 调试JS入门教程 如何调试JS
2013/12/23 Javascript
JavaScript的History API使搜索引擎抓取AJAX内容
2015/12/07 Javascript
JavaScript编码风格指南(中文版)
2016/08/26 Javascript
Vue动态组件实例解析
2017/08/20 Javascript
jQuery模拟爆炸倒计时功能实例代码
2017/08/21 jQuery
详解nodeJs文件系统(fs)与流(stream)
2018/01/24 NodeJs
p5.js入门教程之平滑过渡(Easing)
2018/03/16 Javascript
jQuery实现的页面详情展开收起功能示例
2018/06/11 jQuery
详解React中合并单元格的正确写法
2019/01/08 Javascript
Vue项目中ESlint规范示例代码
2019/07/04 Javascript
vue中通过使用$attrs实现组件之间的数据传递功能
2019/09/01 Javascript
VUE 组件转换为微信小程序组件的方法
2019/11/06 Javascript
Javascript如何实现扩充基本类型
2020/08/26 Javascript
vue 项目中当访问路由不存在的时候默认访问404页面操作
2020/08/31 Javascript
Python实现根据指定端口探测服务器/模块部署的方法
2014/08/25 Python
Python操作串口的方法
2015/06/17 Python
numpy.linspace函数具体使用详解
2019/05/27 Python
Python学习笔记基本数据结构之序列类型list tuple range用法分析
2019/06/08 Python
学习Python列表的基础知识汇总
2020/03/10 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
2020/03/24 Python
纯CSS3制作的鼠标悬停时边框旋转
2017/01/03 HTML / CSS
颇特女士香港官网:NET-A-PORTER香港
2021/03/08 全球购物
思想政治自我鉴定
2013/10/06 职场文书
《七颗钻石》教学反思
2014/02/28 职场文书
班组长竞聘书
2014/03/31 职场文书
白岩松演讲
2014/05/21 职场文书
拒绝黄毒毒宣传标语
2014/06/26 职场文书
无财产无子女离婚协议书范文
2014/09/14 职场文书
2014最新党员批评与自我批评材料
2014/09/24 职场文书
2014年食品安全工作总结
2014/12/04 职场文书
2014年小学德育工作总结
2014/12/05 职场文书
三八节活动主持词
2015/07/04 职场文书