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中的zip函数使用示例
Jan 29 Python
Python面向对象类的继承实例详解
Jun 27 Python
Python设计模式之工厂方法模式实例详解
Jan 18 Python
python3+selenium实现126邮箱登陆并发送邮件功能
Jan 23 Python
python开发之anaconda以及win7下安装gensim的方法
Jul 05 Python
django-filter和普通查询的例子
Aug 12 Python
Pytorch抽取网络层的Feature Map(Vgg)实例
Aug 20 Python
python实现一个点绕另一个点旋转后的坐标
Dec 04 Python
tensorflow 查看梯度方式
Feb 04 Python
DataFrame.groupby()所见的各种用法详解
Jun 14 Python
Python3爬虫里关于Splash负载均衡配置详解
Jul 10 Python
Python中logger日志模块详解
Aug 04 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
历史证明,懒惰才是推动科学发展技术进步的动力
2021/03/02 无线电
PHP base64+gzinflate压缩编码和解码代码
2008/10/03 PHP
深入php处理整数函数的详解
2013/06/09 PHP
使用Appcan客户端自动更新PHP版本号(全)
2015/07/31 PHP
PHP使用http_build_query()构造URL字符串的方法
2016/04/02 PHP
php json转换相关知识(小结)
2018/12/21 PHP
强悍无比的WEB开发好助手FireBug(Firefox Plugin)
2007/01/16 Javascript
JS的数组的扩展实例代码
2008/07/09 Javascript
JS的location.href跳出框架打开新页面的方法
2014/09/04 Javascript
jquery 实现滚动条下拉时无限加载的简单实例
2016/06/01 Javascript
安装vue-cli的简易过程
2018/05/22 Javascript
JavaScript实现连连看连线算法
2019/01/05 Javascript
Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)
2019/04/17 Javascript
Vue实现固定定位图标滑动隐藏效果
2019/05/30 Javascript
vue自定义表单生成器form-create使用详解
2019/07/19 Javascript
webpack的tree shaking的实现方法
2019/09/18 Javascript
js正则匹配多个全部数据问题
2019/12/20 Javascript
[01:26]神话结束了,却也刚刚开始——DOTA2新英雄玛尔斯驾临战场
2019/03/10 DOTA
[54:18]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS BO3 第一场 1月22日
2021/03/11 DOTA
Python的Django框架中的数据过滤功能
2015/07/17 Python
2018年Python值得关注的开源库、工具和开发者(总结篇)
2018/01/04 Python
python生成tensorflow输入输出的图像格式的方法
2018/02/12 Python
Python 获取主机ip与hostname的方法
2018/12/17 Python
python隐藏终端执行cmd命令的方法
2019/06/24 Python
python读写csv文件实例代码
2019/07/05 Python
python pandas.DataFrame.loc函数使用详解
2020/03/26 Python
解决django框架model中外键不落实到数据库问题
2020/05/20 Python
哪种Python框架适合你?简单介绍几种主流Python框架
2020/08/04 Python
Woods官网:加拿大最古老、最受尊敬的户外品牌之一
2020/09/12 全球购物
zooplus德国:便宜地订购动物用品、动物饲料、动物食品
2020/05/06 全球购物
护士自荐信
2013/10/25 职场文书
化验室技术员岗位职责
2013/12/24 职场文书
幼儿园亲子活动方案
2014/01/29 职场文书
贷款担保申请书
2014/05/20 职场文书
2015年银行员工工作总结
2015/04/24 职场文书
校运会广播稿
2015/08/19 职场文书