그다음 1.4 Simple Dataset와 1.5 Dataset 강의에 대해 리뷰해보겠다.
1.4 Simple Dataset
Basic dataset을 만들고 여기에 transform을 적용해보자.
여기서 torch.manual_seed()는 random function이 우리가 이것을 부를 때마다 같은 수를 불러오게 한다.
또, torch.utils.data에 대해 더 자세히 알아보자.
참고 : https://hulk89.github.io/pytorch/2019/09/30/pytorch_dataset/
요약하자면 Dataset은 말그대로 Data를 가지고 있는 객체고 Data:oader를 통해 data를 가져올 수 있다고 한다.
두 번째 특성에서 말하듯이 __len__, __getitem__을 구현해야 하는데 그래서 그다음 구현하는 알고리즘이 나온다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# Define class for dataset
class toy_set(Dataset):
# Constructor with default values def __init__(self, length = 100, transform = None): self.len = length self.x = 2 * torch.ones(length, 2) self.y = torch.ones(length, 1) self.transform = transform
# Getter def __getitem__(self, index): sample = self.x[index], self.y [index] if self.transform: sample = self.transform(sample) return sample
# Get Length def __len__(self): return self.len |
위에서 만든 toy_set클래스를 이용하여 우리의 dataset을 만들고 index 0 즉 첫 번째 값을 뽑으면 __getitem__ 함수를 이용하여 x, y 각각 index 0 번째 값을 가져온다. len는 처음 설정한 100이 나온다.
그다음, Data에 적용할 Transforms에 대해 알아보자.
x에 1을 더하고 y에 2를 곱하는 transform을 class로 만든 것이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# Create tranform class add_mult
class add_mult(object):
# Constructor def __init__(self, addx = 1, muly = 2): self.addx = addx self.muly = muly
# Executor def __call__(self, sample): x = sample [0] y = sample [1] x = x + self.addx y = y * self.muly sample = x, y return sample |
cs |
원래 x, y값과 transform add_mult을 적용한 값을 출력해보면 x에는 1이 더해졌고 y에는 2가 곱해졌음을 확인할 수 있다.
하지만 이렇게 일일이 add_mult를 적용하는 것보다 쉬운 방법이 있다.
class toy_set(Dataset)를 만들 때 Transform이라는 parameter를 넣었기 때문이다.
이런 식으로 toy_set() 대신 toy_set(transform = a_m)으로 transform을 정해줘서 만들면 된다.
여러 개의 transforms을 적용하려면 Compose를 사용하면 된다.
예를 들어, add_mult()를 적용하고 mult()를 적용하려면 두 transforms을 합치고 적용하면 된다.
그런 다음 그 compose 된 transform을 toy_set의 transform 파라미터에 넣으면 끝!
1.5 Dataset
들어가기 전, show_data라는 함수를 만들어 나중에 image를 보여줄 때 쓰자.
다른 것들은 알겠는데 PIL는 항상 보기만 하고 제대로 몰라서 한 번 검색해보았다.
즉 from PIL import Image를 해줘야 image를 open, crop, save 등을 할 수 있다고 한다.
csv형식으로 된 파일을 불러와 pd의 dataframe으로 저장하는 과정이다. 맨 처음 경로를 설정하고 pd.read_csv를 이용해 data_name으로 둔다.
data_name.head()는 다음과 같이 dataframe의 앞부분을 보여주는 명령이다.
data_name.iloc [0,1]를 이용하여 0번째 row, 1번째 column 위치의 값을 가져온다. 위에서 표를 보면 img/fashion0.png임을 알 수 있다.
<참고>
이제 파일명들을 알았으니 Image를 Load 해보자.
여기서 directory는 ''로 설정되어있음.
아까 PIL로부터 import 한 Image를 이용해서 Image.open 해보자.
그리고 plt라이브러리로브터 imshow 할 수 있다.
최종적으로 Dataset Class를 만들어보자.
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 35 36 37 38 39 |
# Create your own dataset object
class Dataset(Dataset):
# Constructor def __init__(self, csv_file, data_dir, transform=None):
# Image directory self.data_dir=data_dir
# The transform is goint to be used on image self.transform = transform data_dircsv_file=os.path.join(self.data_dir, csv_file) # Load the CSV file contians image info self.data_name= pd.read_csv(data_dircsv_file)
# Number of images in dataset self.len=self.data_name.shape [0]
# Get the length def __len__(self): return self.len
# Getter def __getitem__(self, idx):
# Image file path img_name=os.path.join(self.data_dir,self.data_name.iloc [idx, 1]) # Open image file image = Image.open(img_name)
# The class label for the image y = self.data_name.iloc[idx, 0]
# If there is any transform method, apply it onto the image if self.transform: image = self.transform(image)
return image, y |
cs |
위에 class Dataset을 보면 return image, y 이므로 첫 번째는 image 두 번째는 이름을 return 한다.
다음은 torchvision을 이용해보자!
Torchvision이란?
- Torchvision 패키지는 딥러닝에서 쓰이는 popular datasets, model architectures 그리고 common transformations으로 구성되어있다고 한다.
- 예를 들면 dataset으로는 MNIST, CIFAR 등 우리가 이름만 들어도 아는 dataset이 있고, model로는 classification, Semantic Segmentation 그리고 Object Detection 등이 있다. transformation으로는 Transforms on PIL Image, Transforms on torch.Tensor 등이 있다.
그런데 왜인지 coursera에서 코드 실습하는 페이지에서는 torchvision.transforms가 import가 안된다.
따라서, 후에 해결한 후 이 포스팅을 수정할 예정이다.
일단 1주 차 강의 리뷰 끝!
'개발 > Deep Neural Networks with PyTorch 리뷰' 카테고리의 다른 글
[COURSERA] Deep Neural Networks with PyTorch by IBM 강의 리뷰 3-2 (0) | 2020.03.30 |
---|---|
[COURSERA] Deep Neural Networks with PyTorch by IBM 강의 리뷰 3-1 (0) | 2020.03.29 |
[COURSERA] Deep Neural Networks with PyTorch by IBM 강의 리뷰 2 (0) | 2020.03.29 |
[COURSERA] Deep Neural Networks with PyTorch by IBM 강의 리뷰 1 - 1 (0) | 2020.03.24 |
[COURSERA] Deep Neural Networks with PyTorch by IBM 강의 리뷰 INTRO (0) | 2020.03.23 |
댓글