Pytorch使用shuffle打乱数据的操作

作者:永远的小白虾 时间:2021-10-03 08:33:31 

这个东西算是我被这个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]

来源:https://blog.csdn.net/qq_41487299/article/details/107424432

标签:Pytorch,shuffle,打乱,数据
0
投稿

猜你喜欢

  • python打印9宫格、25宫格等奇数格 满足横竖斜相加和相等

    2023-08-27 07:55:11
  • python中global用法实例分析

    2023-09-16 08:33:47
  • 详解Node.js 中使用 ECDSA 签名遇到的坑

    2024-05-08 09:36:01
  • 利用pytorch实现对CIFAR-10数据集的分类

    2021-11-21 03:09:36
  • python 通过exifread读取照片信息

    2022-12-09 13:44:53
  • Python下载指定页面上图片的方法

    2023-08-16 09:32:37
  • Python语法分析之字符串格式化

    2021-10-09 18:00:09
  • 基于javascript实现tab切换特效

    2024-02-24 12:31:58
  • 浅谈Mysql、SqlServer、Oracle三大数据库的区别

    2024-01-23 21:30:40
  • 服务器端控件是如何操作的?

    2009-11-01 15:22:00
  • 链接与文本标签们

    2008-04-04 18:07:00
  • MongoDB orm框架的注意事项及简单使用

    2024-01-17 07:04:16
  • pandas 小数位数 精度的处理方法

    2022-12-16 20:40:05
  • Python执行时间的几种计算方法

    2023-06-09 15:00:47
  • 利用numpy和pandas处理csv文件中的时间方法

    2023-01-21 09:44:56
  • Google的设计导引

    2008-04-06 14:18:00
  • Kettle中使用JavaScrip调用jar包对文件内容进行MD5加密的操作方法

    2024-04-30 09:58:23
  • 使用tensorflow实现矩阵分解方式

    2022-04-17 17:01:17
  • 在python中list作函数形参,防止被实参修改的实现方法

    2022-11-15 19:27:25
  • apache配置虚拟主机的方法详解

    2023-06-18 09:05:29
  • asp之家 网络编程 m.aspxhome.com