목록AI/딥러닝 (19)
Joonas' Note
(이전글 작성 중) 논문: https://arxiv.org/pdf/1703.10593.pdf 논문 저자 PyTorch 구현체: https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix/ CycleGAN Image-to-Image Translation에 대한 논문 중 pix2pix를 기반으로 나온 이후의 논문이다. (pix2pix는 작성중) 그러다보니, Discriminator는 PatchGAN을 쓰고, Generator로는 LSGAN을 사용하고 있다고 한다. pix2pix는 데이터 셋에서 변환하려는 두 이미지 쌍을 pair하게 가지고 있어야했지만, CycleGAN에서는 unpair한 데이터 셋 A, B를 주어도 잘 변환하는 점이 특징이다. 즉, 실제 사진을 모네..
이전 글 - [딥러닝 일지] WGAN (Wasserstein GAN) WGAN-GP 논문: https://arxiv.org/abs/1704.00028 앞선 WGAN에서 애매하게 넘어간 것이 있다. 바로 weight clipping 이다. 얼마만큼의 weight로 clipping을 제한할 것인가는 매직 넘버였다. 논문에서는 [-0.01, 0.01]을 사용했지만, 대부분의 가중치들이 양쪽 끝에 걸린 것을 볼 수 있다. Gradient penalty는 weight clipping처럼 한 쪽으로 몰려있지 않고 가중치가 고르게 퍼져있다. 변경 사항으로는, loss function을 gradient penalty를 계산해서 새로 정의한 것과, 판별자 모델에서 배치 정규화(Batch normalization) 층이 ..
이전 글 - [딥러닝 일지] PyTorch로 DCGAN 훈련해보기 WGAN 논문: https://arxiv.org/pdf/1701.07875.pdf DCGAN의 한계와 차이점 WGAN은 기존의 DCGAN 네트워크 구조는 거의 그대로 두고, 손실 함수만 바꿔서 학습을 안정화시켰다. 모드 붕괴 이진 분류(Binary Cross Entropy)로 진짜/가짜 여부만 판별하기 때문에 발생하는 문제가 있다. 결국은 판별자를 속이는 이미지를 만들도록 학습했기 때문에, 잘 속이는 일부 샘플(mode)을 발견하면 그것만 계속 만들어낸다. 잠재 공간의 모든 포인트가 일부 샘플로 모이면, 손실 함수의 미분값이 0에 가까운 값으로 무너지게 된다. (mode collapse) 이전 글에서도 직접 학습해 본 결과에서 확인할 수 ..
이전 글 - [딥러닝 일지] VAE; Variational Auto Encoder DCGAN Deep Convolutional Generative Adversarial Network에 대한 내용은 인터넷에 충분하게 많이 있으니 생략한다. 아래 링크가 가장 읽기 좋았다. https://jaejunyoo.blogspot.com/2017/02/deep-convolutional-gan-dcgan-2.html https://memesoo99.tistory.com/32 논문 링크: https://arxiv.org/pdf/1511.06434.pdf Tutorial 파이토치 공식 문서의 튜토리얼에 DCGAN에 대한 코드와 설명이 이미 잘 되어있다. DCGAN Tutorial — PyTorch Tutorials 1.11..
이전 글 - [딥러닝 일지] Auto Encoder (with MNIST) AE와 다른 점 인코더로 매핑한 잠재 공간의 어떤 포인트들이 정규 분포의 형태로 만들어진다는 점이다. 다시 말해, 디코더로 만들어지는 비슷한 샘플 이미지들은 비슷한 잠재 공간으로부터 만들어진다는 의미이다. 잠재 공간을 살펴보면, 각 레이블별로 AE에 비해 더 뭉쳐있을 것이다. 이제 encoder는 각 차원별로 확률 분포를 구하기 위해 평균(mean)과 표준편차(std)를 학습한다. 특징들의 평균과 분산을 계산하는 것이다. z가 되는 수식에서 엡실론 \( \varepsilon \) 은 표준 정규 분포 \( {\displaystyle \mathrm {N} (0,1)} \) 를 따르는 적당한 난수이다. 코드에서 바뀌는 부분은 이렇다. ..
이전 글 - [딥러닝 일지] MNIST Competition 생성 모델 이번에는 MNIST 데이터셋으로 0~9 사이의 숫자를 주면 28x28 크기의 숫자 이미지를 만들어내는 생성 모델을 연습했다. 그 중에서도, 가장 기초적인 형태의 오토 인코더(Auto Encoder) 모델이다. 입력 이미지를 잠재 공간(Latent space)의 어떤 형태로 만드는 Encoder 부분과, 잠재 공간의 값을 다시 재구성하는 Decoder 부분으로 이루어진다. 여기서 잠재 공간의 차원은 2개, 10개 등 상관없고 당연하겠지만 고차원일수록 많은 표현들을 내포할 수 있으므로 좋다. 레이어를 분리해서 학습을 진행하는 경우도 있고 하나로 합쳐서 학습해도 되는데, 중간값을 확인할 수 있도록 분리해서 진행했다. encoded = En..
오류 RuntimeError: DataLoader worker is killed by signal: Bus error. It is possible that dataloader's workers are out of shared memory. Please try to raise your shared memory limit. DataLoader를 사용하는 코드에서 worker를 너무 많이 사용해서 공유 메모리가 부족해진 문제이다. 공유 메모리의 용량을 늘리면 당연히 해결되겠지만, 그럴 수 없는 경우도 있다. 해결 방법 Linux 계열의 경우에는 df -h 명령어로 메모리 사용 현황을 확인할 수 있다. Filesystem Size Used Avail Use% Mounted on overlay 1.8T 202G ..
집에 있는 데스크탑에 주피터를 새로 설치했다. 아나콘다는 따로 사용하지 않다보니까 별도로 가상환경을 준비했다. 간단하게 모델을 학습하려고 이전에 잘 동작했던 노트북 파일을 조금 수정해서 실행했는데, 아래와 같은 에러가 났다. File C:\Python38\lib\site-packages\torch\cuda\__init__.py:210, in _lazy_init() 206 raise RuntimeError( 207 "Cannot re-initialize CUDA in forked subprocess. To use CUDA with " 208 "multiprocessing, you must use the 'spawn' start method") 209 if not hasattr(torch._C, '_cuda..