• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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深度学习之使用Pytorch搭建ShuffleNetv2
    • python 如何查看pytorch版本
    • 简述python&pytorch 随机种子的实现
    • 浅谈pytorch、cuda、python的版本对齐问题
    • python、PyTorch图像读取与numpy转换实例
    • 基于python及pytorch中乘法的使用详解
    • python PyTorch参数初始化和Finetune
    • python PyTorch预训练示例
    • 我对PyTorch dataloader里的shuffle=True的理解
    • pytorch 带batch的tensor类型图像显示操作
    • Python深度学习之Pytorch初步使用
    上一篇:教你利用Selenium+python自动化来解决pip使用异常
    下一篇:教你怎么用python爬取爱奇艺热门电影
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Pytorch使用shuffle打乱数据的操作 Pytorch,使用,shuffle,打乱,