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]이다.
몇 번의 셔플을 거치면 그 중의 데이터는 [1,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. 수조를 통해 셔플


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. 색인 인덱스를 통해 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]
이상의 개인적인 경험으로 여러분께 참고가 되었으면 좋겠습니다. 또한 많은 응원 부탁드립니다.

좋은 웹페이지 즐겨찾기