Pytorch使用shuffle打乱数据的操作

 更新时间:2021年05月20日 15:09:17   作者:永远的小白虾  
这篇文章主要介绍了Pytorch使用shuffle打乱数据的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

这个东西算是我被这个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中datetime常用时间处理方法

    Python中datetime常用时间处理方法

    Python提供了多个内置模块用于操作日期时间,像calendar,time,datetime。今天我们主要来探讨下datetime的使用方法,有需要的小伙伴可以参考下。
    2015-06-06
  • Python图片存储和访问的三种方式详解

    Python图片存储和访问的三种方式详解

    在 Python 中处理图像数据的时候,例如应用卷积神经网络等算法可以处理大量图像数据集,这里就需要学习如何用最简单的方式存储、读取数据。本文介绍了Python中图片存储和访问的三种方式,需要的可以参考一下
    2022-04-04
  • Pytest之测试命名规则的使用

    Pytest之测试命名规则的使用

    这篇文章主要介绍了Pytest之测试命名规则的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • 利用python批量修改word文件名的方法示例

    利用python批量修改word文件名的方法示例

    最近因为一些失误,导致恢复的文件名不对,所以就写个python程序,下面这篇文章主要给大家介绍了关于利用python批量修改word文件名的相关资料,文中给出了详细的示例代码,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-10-10
  • Python生成器的使用方法和示例代码

    Python生成器的使用方法和示例代码

    今天小编就为大家分享一篇关于Python生成器的使用方法和示例代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • python实现文件名批量替换和内容替换

    python实现文件名批量替换和内容替换

    这篇文章主要介绍了python实现文件名批量替换和内容替换,第一个例子可以指定文件类型,需要的朋友可以参考下
    2014-03-03
  • Python利用os模块实现自动删除磁盘文件

    Python利用os模块实现自动删除磁盘文件

    你们一定想不到os模块还可以这样玩,本文就将利用Python中的os模块实现自动删除磁盘文件功能,文中的示例代码讲解详细,感兴趣的可以尝试一下
    2022-11-11
  • tensorflow实现残差网络方式(mnist数据集)

    tensorflow实现残差网络方式(mnist数据集)

    这篇文章主要介绍了tensorflow实现残差网络方式(mnist数据集),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • 解决django中form表单设置action后无法回到原页面的问题

    解决django中form表单设置action后无法回到原页面的问题

    这篇文章主要介绍了解决django中form表单设置action后无法回到原页面的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Django中文件上传和文件访问微项目的方法

    Django中文件上传和文件访问微项目的方法

    这篇文章主要介绍了Django中文件上传和文件访问微项目的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04

最新评论