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 实现数据库更新脚本的生成方法
Jul 09 Python
python素数筛选法浅析
Mar 19 Python
Python 数据处理库 pandas 入门教程基本操作
Apr 19 Python
python实现扫描日志关键字的示例
Apr 28 Python
Flask框架单例模式实现方法详解
Jul 31 Python
pytorch 实现cross entropy损失函数计算方式
Jan 02 Python
python如何进行矩阵运算
Jun 05 Python
解决TensorFlow程序无限制占用GPU的方法
Jun 30 Python
Python 存取npy格式数据实例
Jul 01 Python
教你如何用python开发一款数字推盘小游戏
Apr 14 Python
使用Python拟合函数曲线
Apr 14 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怎样调用MSSQL的存储过程
2006/10/09 PHP
php中使用Ajax时出现Error(c00ce56e)的详细解决方案
2014/11/03 PHP
php实现查询功能(数据访问)
2017/05/23 PHP
Nginx实现反向代理
2017/09/20 Servers
PHP配置ZendOpcache插件加速
2019/02/14 PHP
JavaScript写的一个自定义弹出式对话框代码
2010/01/17 Javascript
apycom出品的jQuery精美菜单破解方法
2011/02/18 Javascript
Node.js生成HttpStatusCode辅助类发布到npm
2013/04/09 Javascript
bootstrap table之通用方法( 时间控件,导出,动态下拉框, 表单验证 ,选中与获取信息)代码分享
2017/01/24 Javascript
JS实现的集合去重,交集,并集,差集功能示例
2018/03/13 Javascript
vue.js使用watch监听路由变化的方法
2018/07/08 Javascript
基于Node.js搭建hexo博客过程详解
2019/06/25 Javascript
vue.js中ref及$refs的使用方法解析
2019/10/08 Javascript
JS实现可以用键盘方向键控制的动画
2020/12/11 Javascript
简单文件操作python 修改文件指定行的方法
2013/05/15 Python
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
2015/06/28 Python
Python的爬虫包Beautiful Soup中用正则表达式来搜索
2016/01/20 Python
如何利用Fabric自动化你的任务
2016/10/20 Python
用python实现简单EXCEL数据统计的实例
2017/01/24 Python
使用Python对Access读写操作
2017/03/30 Python
python实现决策树C4.5算法详解(在ID3基础上改进)
2017/05/31 Python
Python内置模块turtle绘图详解
2017/12/09 Python
Python使用正则表达式获取网页中所需要的信息
2018/01/29 Python
使用pandas将numpy中的数组数据保存到csv文件的方法
2018/06/14 Python
Numpy之文件存取的示例代码
2018/08/03 Python
python将控制台输出保存至文件的方法
2019/01/07 Python
python3.5 cv2 获取视频特定帧生成jpg图片
2019/08/28 Python
python属于解释语言吗
2020/06/11 Python
丝芙兰中国官方商城:SEPHORA中国
2018/01/10 全球购物
澳大利亚女士时装在线:Rockmans
2018/09/26 全球购物
《三峡》教学反思
2014/03/01 职场文书
田径运动会通讯稿
2014/09/13 职场文书
2014年社区国庆节活动方案
2014/09/16 职场文书
幼儿教师自我剖析材料
2014/09/29 职场文书
2015年校务公开工作总结
2015/05/26 职场文书
创业计划书之暑假培训班
2019/11/09 职场文书