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中的引用和拷贝浅析
Nov 22 Python
python使用PythonMagick将jpg图片转换成ico图片的方法
Mar 26 Python
windows上安装Anaconda和python的教程详解
Mar 28 Python
Python读取txt某几列绘图的方法
Oct 14 Python
python批量赋值操作实例
Oct 22 Python
python flask几分钟实现web服务的例子
Jul 26 Python
python连接PostgreSQL过程解析
Feb 09 Python
python3实现往mysql中插入datetime类型的数据
Mar 02 Python
python读取当前目录下的CSV文件数据
Mar 11 Python
TensorFlow2.X结合OpenCV 实现手势识别功能
Apr 08 Python
Python验证码截取识别代码实例
May 16 Python
Python基于xlrd模块处理合并单元格
Jul 28 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扩展函数
2006/10/09 PHP
PHP基础学习之流程控制的实现分析
2013/04/28 PHP
PHP十六进制颜色随机生成器功能示例
2017/07/24 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
网站导致浏览器崩溃的原因总结(多款浏览器) 推荐
2010/04/15 Javascript
jquery+ashx无刷新GridView数据显示插件(实现分页、排序、过滤功能)
2010/04/25 Javascript
利用JQuery的load函数动态加载其它页面的内容的实现代码
2010/12/14 Javascript
JS TextArea字符串长度限制代码集合
2012/10/31 Javascript
jquery简单瀑布流实现原理及ie8下测试代码
2013/01/23 Javascript
JavaScript中json使用自己总结
2013/08/13 Javascript
jquery与js函数冲突的两种解决方法
2013/09/09 Javascript
js原型继承的两种方法对比介绍
2014/03/30 Javascript
js实现文字跟随鼠标移动而移动的方法
2015/02/28 Javascript
jQuery实现仿淘宝带有指示条的图片转动切换效果完整实例
2015/03/04 Javascript
ionic开发中点击input时键盘自动弹出
2016/12/23 Javascript
深入理解nodejs中Express的中间件
2017/05/19 NodeJs
Vue自定义指令详解
2017/07/28 Javascript
微信小程序之电影影评小程序制作代码
2017/08/03 Javascript
详细教你微信公众号正文页SVG交互开发技巧
2019/07/25 Javascript
java直接调用python脚本的例子
2014/02/16 Python
python监控网站运行异常并发送邮件的方法
2015/03/13 Python
Python标准模块--ContextManager上下文管理器的具体用法
2017/11/27 Python
Python模拟随机游走图形效果示例
2018/02/06 Python
python SVD压缩图像的实现代码
2019/11/05 Python
python3实现elasticsearch批量更新数据
2019/12/03 Python
python 使用递归的方式实现语义图片分割功能
2020/07/16 Python
python绘图pyecharts+pandas的使用详解
2020/12/13 Python
CSS3正方体旋转示例代码
2013/08/08 HTML / CSS
纯CSS3实现扇形动画菜单(简化版)实例源码
2017/01/17 HTML / CSS
最畅销的视频游戏享受高达90%的折扣:CDKeys
2020/02/10 全球购物
尊老爱亲美德少年事迹材料
2014/08/14 职场文书
综合测评自我评价
2015/03/06 职场文书
鉴史问廉观后感
2015/06/10 职场文书
《和时间赛跑》读后感3篇
2019/12/16 职场文书
Java 数组内置函数toArray详解
2021/06/28 Java/Android
redis 解决库存并发问题实现数量控制
2022/04/08 Redis