본문 바로가기
머신러닝-딥러닝/study

[pytorch] 파이토치로 시작하는 Image Segmentation (1)

by 복복씨 2021. 12. 16.
더보기

잠깐 파이썬 복습하기! (self, init 같은것들이 기억이 안난다)

https://www.inflearn.com/questions/4642

https://velog.io/@magnoliarfsit/RePython-1.-self-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0

1. init

인스턴스 생성시에 init 메서드를 호출한다.

  __init__은 파이썬에서 클래스의 생성자를 만들때 항상 동일한 규칙입니다. __init__을 사용하면 클래스명을 쓰고 옆에 바로 인자들을 채워 넣음으로써 그 값들을 지닌 객체를 만들어 낼 수 있죠.

 

2. self

그리고 메서드의 첫 번째 인자는 항상 self여야 한다고 했습니다. 하지만 메서드의 첫 번째 인자가 항상 self여야 한다는 것은 사실 틀린 말입니다. 이번 절에서는 파이썬 클래스에서 self의 정체를 확실히 이해해 봅시다.

 

먼저 다음과 같이 두 개의 메서드가 정의된 Foo 클래스를 만들어 봅시다. 여기서 눈여겨봐야 할 점은 func1() 메서드의 첫 번째 인자가 self가 아님에도 클래스를 정의할 때 에러가 발생하지 않는다는 점입니다.

 

 

self 객체의 인스턴스 그 자체를 말한다. 즉, 객체 자기 자신을 참조하는 매개변수인 셈이다. 객체지향 언어는 모두 이걸 메소드에 안보이게 전달하지만, 파이썬은 클래스의 메소드를 정의할 때 self를 명시한다. 메소드를 불러올 때 self는 자동으로 전달된다. self를 사용함으로 클래스내에 정의한 멤버에 접근할 수 있게된다.

 

메서드의 첫 번째 인자는 self지만 호출할 때는 아무것도 전달하지 않는 이유는 첫 번째 인자인 self에 대한 값은 파이썬이 자동으로 넘겨주기 때문입니다.

 

아하! 그러면 self 어쩌구 하는건 전부 클래스 자체에 접근하기 위해서 아닌 클래스로 만든 "인스턴스"에 접근할 수 있는 속성이나 메서드구나! 이거를 클래스 내에서 정의할 때 self 라는 이름으로 약속해서 사용하기로 되어있구나! 


출처: https://sikaleo.tistory.com/114 [SIKALEO]

 

파이토치는 파이썬 기반 패키지

 

-gpu를 사용하기 위해 numpy를 안쓰고 대체 한다.

-유연성과 속도를 제공한다 

 

1. Tensor

Tensors는 numpy의 ndarrays와 비슷하다

 

x.veiw(resize,reshape)

x.item() < 하나의 원소로 구성된 tensor를 갖고 있따면, 숫자 값을 얻기 위해 item()사용

https://pytorch.org/docs/stable/torch.html

 

torch — PyTorch 1.10.0 documentation

Shortcuts

pytorch.org

 

__getitem__ 함수는 주어진 인덱스 idx 에 해당하는 샘플을 데이터셋에서 불러오고 반환합니다. 인덱스를 기반으로, 디스크에서 이미지의 위치를 식별하고, read_image 를 사용하여 이미지를 텐서로 변환하고, self.img_labels 의 csv 데이터로부터 해당하는 정답(label)을 가져오고, (해당하는 경우) 변형(transform) 함수들을 호출한 뒤, 텐서 이미지와 라벨을 Python 사전(dict)형으로 반환합니다.

 

class MyDataSet(Dataset): def __init__(self): # 인자를 받아 인스턴스 변수를 초기화 def __len__(self): # 데이터 셋의 길이를 리턴한다. return len() def __getitem__(self): # 학습 이미지와 이미지의 GT (cifar10이므로 이미지의 class)를 리턴한다. return traning_data, ground_truth