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之入门(五)缩进和选择
May 27 Python
详解多线程Django程序耗尽数据库连接的问题
Oct 08 Python
python3.6利用pyinstall打包py为exe的操作实例
Oct 31 Python
Python2.7版os.path.isdir中文路径返回false的解决方法
Jun 21 Python
Python re 模块findall() 函数返回值展现方式解析
Aug 09 Python
Python创建一个元素都为0的列表实例
Nov 28 Python
Python 模拟动态产生字母验证码图片功能
Dec 24 Python
pytorch之Resize()函数具体使用详解
Feb 27 Python
Python函数必须先定义,后调用说明(函数调用函数例外)
Jun 02 Python
Python浮点型(float)运算结果不正确的解决方案
Sep 22 Python
python中把元组转换为namedtuple方法
Dec 09 Python
python 如何将两个实数矩阵合并为一个复数矩阵
May 19 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
《Re:从零开始的异世界生活》剧情体验,手游新作定名
2020/04/09 日漫
解决控件遮挡问题:关于有窗口元素和无窗口元素
2007/01/28 PHP
PHP计划任务之关闭浏览器后仍然继续执行的函数
2010/07/22 PHP
php实例分享之html转为rtf格式
2014/06/02 PHP
PHP连接MSSQL方法汇总
2016/02/05 PHP
PHP快速排序quicksort实例详解
2016/09/28 PHP
PHP+MySQL实现输入页码跳转到指定页面功能示例
2018/06/01 PHP
Js,alert出现乱码问题的解决方法
2013/06/19 Javascript
javascript判断chrome浏览器的方法
2014/03/26 Javascript
JS实现鼠标滑过折叠与展开菜单效果代码
2015/09/06 Javascript
JS实现旋转木马式图片轮播效果
2017/01/18 Javascript
使用jQuery实现购物车结算功能
2017/08/15 jQuery
jQuery EasyUI结合zTree树形结构制作web页面
2017/09/01 jQuery
ES6之模版字符串的具体使用
2018/05/17 Javascript
vue-cli 使用vue-bus来全局控制的实例讲解
2018/09/15 Javascript
Vue插件从封装到发布的完整步骤记录
2019/02/28 Javascript
ES6 Class中实现私有属性的一些方法总结
2019/07/08 Javascript
js简单的分页器插件代码实例
2019/09/11 Javascript
微信小程序地图绘制线段并且测量(实例代码)
2020/01/02 Javascript
Vue实现跑马灯效果
2020/05/25 Javascript
python实现电子词典
2020/03/03 Python
如何将Pycharm中调整字体大小的方式设置为&quot;ctrl+鼠标滚轮上下滑&quot;
2020/11/17 Python
纯css3实现的鼠标悬停动画按钮
2014/12/23 HTML / CSS
Html5游戏开发之乒乓Ping Pong游戏示例(一)
2013/01/21 HTML / CSS
GUESS Factory加拿大:牛仔裤、服装及配饰
2019/09/20 全球购物
大专毕业自我鉴定
2014/02/04 职场文书
水利水电专业自荐信
2014/07/08 职场文书
工作自我推荐信范文
2015/03/25 职场文书
2015年社区文体活动总结
2015/03/25 职场文书
农村结婚典礼主持词
2015/06/29 职场文书
2016年入党心得体会范文
2016/01/23 职场文书
学校2016年圣诞节活动总结
2016/03/31 职场文书
农村房屋租赁合同(范本)
2019/07/23 职场文书
详解CocosCreator消息分发机制
2021/04/16 Javascript
如何使用Python提取Chrome浏览器保存的密码
2021/06/09 Python
python套接字socket通信
2022/04/01 Python