Python之Pytorch使用shuffle打乱数据的解决办法
内容摘要
这篇文章主要为大家详细介绍了Python之Pytorch使用shuffle打乱数据的简单示例,具有一定的参考价值,可以用来参考一下。
感兴趣的小伙伴,下面一起跟随php教程的雯雯来看看吧!
这
感兴趣的小伙伴,下面一起跟随php教程的雯雯来看看吧!
这
文章正文
这篇文章主要为大家详细介绍了Python之Pytorch使用shuffle打乱数据的简单示例,具有一定的参考价值,可以用来参考一下。
感兴趣的小伙伴,下面一起跟随php教程的雯雯来看看吧!
这个东西算是我被这个shuffle坑了的一个总结吧!
首先我得告诉你一件事,那就是pytorch中的tensor,如果直接使用random.shuffle打乱数据,或者使用下面的方式,自己定义直接写。
代码如下:
1 2 3 4 5 6 7 8 9 10 | <code> 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</code> |
Pytorch使用shuffle打乱数据的操作
那你就会收获一堆的混乱数据,因为使用这种交换的方式对tensor类型的数据进行操作,会导致里面的数据出现重复复制的问题。
比如我y中的数据为【0,1,0,1,0,1】
在经过几次shuffle,其中的数据就变成了【1,1,1,1,1,1】。
数据顿时出现混乱。
正确的方式是先转成numpy,再进行交换数据
比如:
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <code> 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 </code> |
Pytorch使用shuffle打乱数据的操作
补充:python对训练数据集shuffle(打乱)的一些方式
1.通过数组来shuffle
代码如下:
1 2 3 4 5 6 7 8 9 10 | <code> 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]</code> |
Pytorch使用shuffle打乱数据的操作
2.通过索引 Index 来 shuffle
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 | <code> 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]</code> |
Pytorch使用shuffle打乱数据的操作
以上为个人经验,希望能给大家一个参考,也希望大家多多支持php教程。
注:关于Python之Pytorch使用shuffle打乱数据的简单示例的内容就先介绍到这里,更多相关文章的可以留意
代码注释