외부에서 노트북으로 코딩하느라 갑자기 vim 쓰는 중인데 

아직 단축키 알못이라 ㅜ indentation 맞추기가 너무 빡세다 

 

stackoverflow에 찾아보니까 자동으로 indentation 맞춰주는 방법이 있는 듯 하다

https://stackoverflow.com/questions/235839/indent-multiple-lines-quickly-in-vi

 

Indent multiple lines quickly in vi

It should be trivial, and it might even be in the help, but I can't figure out how to navigate it. How do I indent multiple lines quickly in vi?

stackoverflow.com

뭐 위에 처럼 이런 코드가 있긴 한데 좀더 심플한 방법은 

esc 로 커맨드 모드에 들어간 후 

gg=G

를 순서대로 입력하는 것이다. 

그럼 아래처럼 몇개의 라인이 indentation 교정됐는지를 알려주면서 깔끔하게 복붙해서 밀린 indentation 까지는 맞춰준다 ! 

아래가 결과인데.. data augmentation 코드가 ,)으로 끝나서 그런지 그 이후로가 

의도하지 않은 1tab이 더 들어가져있다. 

흠.. 그래도 이정도면 귀찮음을 90% 정도 해결해주니까 성능은 만족. 

혹시 아래 코드가 왜 1tab 들어가져있는지 알게 된다면 다시 글을 수정하겠다. 

완벽하지는 않지만 90%정도 정확한듯 !! 

 

https://wikidocs.net/32945

 

endswith()_ 접미사로 문장찾기

### 정의된 문자열이 지정된 접미사로 끝나면 True를 돌려주고, 그렇지 않으면 False를 돌려줍니다. 접미사는 찾고자 하는 접미사들의 튜플이 될 수 도 있습니다. 선택 ...

wikidocs.net

참고

 

남의 코드보다가 새로운거 배워서 적어놓는 꿀팁

 

string 뒤에 .endswith() 을 붙이면 접미사를 확인하고 bool을 return한다.

 

A = 'This is test String!'
A.endswith('!')
#True를 return

A.endswith('String!')
#True를 return

A.endswith('String')
#False를 return

 

위 그림은 유명한 generative model 도식.

의외로 처음 GAN을 가르칠때는 대부분 스킵하지만 

공부할 수록 정말 공부할게 많은 그림이라고 생각이 든다. 

 

-----------------------------------------------------------------------------------

 

첫번째 분류인 Explicit / Implicit 구분은 명시적으로 어떠한 분포를 적고 모델링하느냐 아니냐의 차이

Explicit : 명시적으로 어떠한 확률 분포를 정해서 분석 (수식으로 분포를 정의할 수 있는 경우 )

Implicit : 명시적으로 확률 분포를 정하지 않고 모델링 (ex. GAN, NeRF)

 

Explicit의 두 갈래 중 

Tractable : 식을 적당하게 풀 수 있는 선에서 작성하되, 그 풀이는 명확하게

Approximate : 식은 정확하게 쓰되, 그 풀이가 간단하지 않으니 대체 식을 사용해서 풀이를 적당히 우회 

 

 

Generative model을 공부하기 위한 초석

 

머신러닝은 Probability Density를 찾기 위한 과정이다.

예를 들어 Classification 모델의 결과물은 입력 이미지가 각 Class에 해당할 확률을 의미한다.

모델의 출력물을 확률로 해석하도록 학습하거나, 모델의 출력물이 확률 분포를 담을 수 있도록 수식을 설계하는 것  

 

Generative model도 결국 random성을 가진  noise가 들어가서
train data의 분포를 닮은 inference image가 나오는 것 처럼 언뜻 생각되지만,
그건 inference 과정에서의 해석이고 

train 과정을 잘 살펴보면 train data의 집합이 들어가서 distribution을 출력하도록 학습이 된다. 

 

Prior vs Posterior

Prior는 말그대로 사전확률.

어떠한 사건이 관측되기 전에 선험적으로 알고 있는 확률이다.  EX) P(A)

Posterior는 어떠한 사건이 관측되고 나서 업데이트된 확률이다.  EX) P(A|B) : B라는 사건이 관측되고 나서의 A의 확률

 

 

 

위와 같은 식에서 P(A)는 사전 확률, P(B|A)는 likelihood, P(A|B)는 posterior 확률이다. 

 

따라서 Posterior ∝ likelihood * prior라는 식을 얻을 수 있다. (P(B)도 하나의 사전확률로 고정이니까)

 

 

이러한 분포를 추정하는 방법에서는 Maximum Likelihood와 Maximum a Posterior 방식 두가지가 있다.

prior는 구할 수가 없으니, likelighood를 구해서 가장 높은 모델을 고르거나

Posterior가 가장 높아지는 모델을 고르거나 하는 상황이다. 

 

경험적으로 Maximum likelihood의 결과가 더 좋다고 알려져있다. 

 

따라서 초창기의 GAN을 비롯한 VAE등의 generative model 들은 Maximum likelihood를 loss로 사용한다 

 

 

'딥러닝 공부 > Generatives' 카테고리의 다른 글

03. Generative model 분류  (0) 2022.02.16
01. GAN의 성능지표 비교 설명 - IS vs FID  (0) 2022.02.04
[GAN] Intro - GAN이란?  (0) 2020.11.10

+ Recent posts