본문 바로가기

컴린이 일기장/Today I Learned

[TIL] 1월 둘째주~셋째주 연구실 일

반응형

[주절주절]

- Deeplab v3 +
- Pix2Pix HD 

 

[Today I Learned]

# Pytorch Dataset

-  pytorch.org/docs/stable/_modules/torch/utils/data/dataset.html#Dataset

- 커스텀 Dataset을 만들 때는 일반적으로 위의 Dataset 클래스를 상속 받고 몇몇 함수를 overriding해서 사용한다.

- 이 때 Dataset은 추상 클래스(Abstract class)이다. 추상 클래스는 메서드 목록만을 가진 클래스로 상속받는 클래스에서 메서드 구현을 강제하기 위해 사용한다. 추상 클래스를 만들 때는 abstract base class의 약자인 abc 모듈을 가져와야한다. 그리고 클래스의 괄호 안에 metaclass = ABCMeta를 지정하고, 메서드를 만들 때 @abstractmethod를 붙여 추상 메서드로 지정한다. (추상 메서드는 모두 구현되어야 한다.) 

+ 흠 근데 오피셜 코드가 그렇게 구현되어있진않다. 또 뭔가 상속받는 점, 주석 등을 보았을 때는 한 단계 더 깊게 들어가야할 것 같은데 그렇게까지 찾아보진 않았다. 

from abc import *

class 추상클래스이름(metaclass=ABCMeta):
	@abstractmethod
    def 메서드이름(self):
    	코드

- Dataset이 구현을 요구하는 함수는 __getitem__, __len__이다. 일반적으로 코드 짤 땐 __init__까지 직접 구현해준다.

- __getitem__ 함수가 실행되면, 데이터셋의 index값이 넘어오게 된다. 

 

# torchvision.transforms.ToTensor

- 단순히 텐서로 바꾸는 일만 하는 것이 아니라 스케일링이 되기 때문에 ground truth(target) 이미지에 대해서는 torchvision의 ToTensor를 이용해선 안된다.

# VS Code 디버깅 방법


# GPU 여러 개인 서버에서 원하는 것 고르는 법 (CUDA_VISIBLE_DEVICES, gpu_ids)

 

# List comprehension with If-else

flags = (True, False, False, True, True)

# Case 1
[l for (l,f) in zip((1,2,3,4,5),flags) if f]
>> [1,4,5]

# Case 2
[l if f for (l,f) in zip((1,2,3,4,5), flags)]
>> Syntax error

# Case 3
[l if f else 0 for (l,f) in zip((1,2,3,4,5), flags)]
>> [1,0,0,4,5]

 

[질문 노트]

-

 

반응형