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 nose单元测试框架的安装与使用
Dec 20 Python
Python实现通讯录功能
Feb 22 Python
python 读写文件,按行修改文件的方法
Jul 12 Python
pytorch 调整某一维度数据顺序的方法
Dec 08 Python
Python3 修改默认环境的方法
Feb 16 Python
Django中间件拦截未登录url实例详解
Sep 03 Python
python 将dicom图片转换成jpg图片的实例
Jan 13 Python
python dumps和loads区别详解
Feb 04 Python
vscode写python时的代码错误提醒和自动格式化的方法
May 07 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
Jun 17 Python
selenium+python实现基本自动化测试的示例代码
Jan 27 Python
Python破解极验滑动验证码详细步骤
May 21 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中$_SERVER的详细参数与说明
2008/07/29 PHP
php下将多个数组合并成一个数组的方法与实例代码
2011/02/03 PHP
php表单提交问题的解决方法
2011/04/12 PHP
PHP递归遍历文件夹去除注释并压缩php源代码的方法示例
2018/05/23 PHP
filemanage功能中用到的lib.js
2007/04/08 Javascript
改善你的jQuery的25个步骤 千倍级效率提升
2010/02/11 Javascript
Colortip基于jquery的信息提示框插件在IE6下面的显示问题修正方法
2010/12/06 Javascript
Js 时间间隔计算的函数(间隔天数)
2011/11/15 Javascript
QQ空间顶部折页撕开效果示例代码
2014/06/15 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
2016/03/11 Javascript
基于jQuery实现多标签页切换的效果(web前端开发)
2016/07/24 Javascript
BootstrapValidator超详细教程(推荐)
2016/12/07 Javascript
nodejs中模块定义实例详解
2017/03/18 NodeJs
vue-cli构建项目使用 less的方法
2017/10/04 Javascript
Vue.js通用应用框架-Nuxt.js的上手教程
2017/12/25 Javascript
利用Vue2.x开发实现JSON树的方法
2018/01/04 Javascript
微信小程序实现留言板功能
2018/11/02 Javascript
jQuery-ui插件sortable实现自由拖动排序
2018/12/01 jQuery
vue proxy 的优势与使用场景实现
2020/06/15 Javascript
Python中对元组和列表按条件进行排序的方法示例
2015/11/10 Python
分享Python文本生成二维码实例
2016/01/06 Python
Android应用开发中Action bar编写的入门教程
2016/02/26 Python
python八皇后问题的解决方法
2018/09/27 Python
Python微医挂号网医生数据抓取
2019/01/24 Python
python 发送json数据操作实例分析
2019/10/15 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
2020/03/24 Python
Python局部变量与全局变量区别原理解析
2020/07/14 Python
python爬虫请求头设置代码
2020/07/28 Python
css3高级选择器使用方法
2013/12/02 HTML / CSS
美国领先的家居装饰和礼品商店:Kirkland’s
2017/01/30 全球购物
美国第一大药店连锁机构:Walgreens(沃尔格林)
2019/10/10 全球购物
乡镇干部先进性教育活动个人整改措施
2014/09/16 职场文书
干部作风建设心得体会
2014/10/22 职场文书
联欢会开场白
2015/06/01 职场文书
标会主持词应该怎么写?
2019/08/15 职场文书
Django中的JWT身份验证的实现
2021/05/07 Python