본문 바로가기

Deep Learning

Generative Adversarial Network (GAN) 설계 시 고려할 부분 GAN은 Generator와 Discriminator가 서로 경쟁하며 학습이 진행되는 network 구조라서 어느 하나의 성능이 낮으면 한 쪽으로 훅 치우치는 경향이 있다. Optimizer와 Learning rate에 따른 성능 차이도 꽤 심하게 나타난다. GAN에서 개인적으로 가장 곤란한 게 성능이 안 나와서 train loss든 train accuracy든 들여다봐도 뭐가 문제인지 해석하기 어렵다는 점이다. 이럴 땐 우선 Discriminator의 복잡도를 올려보자. 더보기
(5) Domain-Adversarial training of Neural Networks (DANN) Keras Code Review Domain Adaptation의 한 부류인 Latent Feature Space Trasnformation에 대한 다섯번째 정리 글이다. 이번 글에서는 Domain-Adversarial training of Neural Networks 논문를 Keras로 직접 구현한 코드 리뷰 시간을 갖고자 한다. 이전에 혼자서 CycleGAN 구현했던 코드를 바탕으로 여러 Github 참고하면서 작업을 진행했다. 먼저 이전 글에서 설명했던 그림을 다시 봐보면서 구현 시 고려해야할 점들을 짚어보자. Inputa Data를 Source와 Target으로 구성하면서 어떻게 Task Classifier는 Source만으로 학습하게 만들지?? 어떻게 하면 Generator가 Domain 특성은 뭉개면서 Task에는 좋은 Fe.. 더보기
(4) Advancing medical Imaging Informatics by Deep Learning-Based Domain Adaptation - Adversarial Training Domain Adaptation의 한 부류인 Latent Feature Space Transformatioon에 대한 네 번째 정리 글이다. 두 번째, 세 번째 글에서는 Divergence minimization에 대해 다뤘었고, 이번 글에서는 Adversarial training에 대해 정리하려고 한다. 논문에서는 Adversarial training에 대해 6 문장 정도만 할당해서 간략하게 언급하고 있는데 그 내용을 정리해보면 아래와 같다. DA를 위해 GAN의 경쟁적 학습 개념을 적용한 방법이다. generator와 discriminator를 경쟁적으로 학습시킨다. discriminator가 input image의 domain이 source인지 target인지를 구분 못하도록 generator를 학.. 더보기
(3) Advancing Medical Imaging Informatics by Deep Learning-Based Domain Adaptation - Maximum Mean Discrepancy 이전 글에서 나는 "다음 글에서는 Maximum Mean Discrepancy 와 Wasserstein distance에 대해 정리하도록 하겠다." 고 당차게 말했지만.. 와 Wasserstein distance라는 게 엄청나게 수학적 개념, 특히 확률에서 출발한 방법이더라. 확률에 대한 감이 어느정도 잡히고 나서야 제대로 이해할 수 있겠다는 생각이 들었다. 그러려면 단시간에는 불가능하니... 우선 Maximum Mean Discrepance (MMD)에 대해서만 정리하고자 한다. Maximum Mean Discrepancy (최대 평균 불일치) MMD도 두 데이터 분포 사이의 차이를 측정하는 방법이고, 그림에 나와있는 수식처럼 차이를 계산한다. 평균하고 빼고 제곱한 결과가 MDD 값이다. 무얼 평균? .. 더보기
0 ~ 255의 픽셀 값을 왜 0 ~ 1로 rescale하는 걸까? 제목 그대로다. CNN을 사용할 때면 보통 input image를 255로 나눠서 0~1 사이의 값을 갖도록 맞춘다. 왜 그러는 걸까? 정확한 근거를 못 찾아서 어디까지나 내 생각이지만, neural network가 feature scale에 예민한 모델이라 0 ~ 1로 맞춰주는 게 아닐까 싶다. 그리고 스쳐 지나가듯 읽은 사이트에서 255라는 값이 network 학습에 바로 사용하기에는 너무 큰 값이라서 0 ~ 1로 rescaling하는 것이라는 글을 본 기억이 있다. 제대로 된 결론은 못 내렸지만.. 뭐 그냥 그렇다고... 나처럼 궁금해하는 사람이 있을까 해서.. 정확히 알고 계신분 댓글 남겨주시면 감사하겠습니다! 더보기
(2) Advancing Medical Imaging Informatics by Deep Learning-Based Domain Adaptation - Divergence minimization Latent Feature Space Transformation에 대해 더 자세히 정리하는 두 번째 글이다. 적어도 4개 정도는 더 써야 원하는만큼의 지식을 챙겨갈 수 있지 않을까 싶다. 모르는 개념도 많고.. 어려워서 공부하는데도 꽤 오랜 시간과 노력이 필요할 것 같다. Latent Feature Space Transformation의 목적은 말 그대로 network를 통해 추출되는 feature들을 사용해서 DA를 하는 것이다. 예를 들어 CNN에서는 여러 개의 convolutional layer를 거쳐 feature map들이 생성될텐데, Latent Feature Space Transformation에서는 DA를 위해서 이 feature map들을 어떻게 해보겠다는 거다. 적절한 feature m.. 더보기
ImgaeDataGenerator.flow_from_directory을 이용해 이미지 증식하는 방법 Data augmentation은 Network의 robustness를 높이기 위해 거의 default로 적용하는 방법이다. 케라스에서는 ImageDataGenerator 클래스의 몇 가지 클래스 함수들로 이미지 로드 뿐만 아니라 augmentation을 지원한다. flow( ) flow_from_directory( ) flow_from_dataframe( ) 이번 글에선 flow_from_directory( ) 함수를 사용해서 augmentation을 하는 방법에 대해 정리하고자 한다. 그러기 위해선 일단 사용할 이미지가 필요하다. 저작권 문제에서 자유로운 https://pixabay.com/ 에서 마음에 드는 고양이와 강아지 사진을 각각 2장씩 골라 아래와 같은 폴더 구조로 저장하자. 여기서 이렇게 .. 더보기
keras.models.Model( ) 케라스에서 모델 설계를 할 때 Sequential( )을 주로 사용해왔다. 단순히 이전 layer의 output이 다음 layer의 input으로 들어가는 선형적인 경우에 사용해주면 아주 편리하기 때문이다. 그래서 단점도 존재한다. DenseNet( ) 같이 선형적 흐름이 아닌 모델 설계의 경우엔 사용하질 못 한다. keras.models.Model( )을 사용하면 Sequential( )의 불편한 점에서 벗어날 수 있다. 이 놈은 Multi Input / Multi Output을 지원한다. 위와 같은 흐름을 갖는 모델을 설계하고 싶다면 Model( )을 사용해주면 된다. import keras from keras.layers import Input, Embedding, LSTM, Dense from k.. 더보기