일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- BYOL
- CycleGAN
- adamatch paper
- tent paper
- WGAN
- conjugate pseudo label paper
- 컴퓨터구조
- 딥러닝손실함수
- CoMatch
- dcgan
- GAN
- semi supervised learnin 가정
- Meta Pseudo Labels
- mocov3
- ConMatch
- 최린컴퓨터구조
- Pix2Pix
- mme paper
- shrinkmatch paper
- UnderstandingDeepLearning
- Entropy Minimization
- SSL
- CGAN
- dann paper
- simclrv2
- Pseudo Label
- 백준 알고리즘
- remixmatch paper
- cifar100-c
- shrinkmatch
- Today
- Total
목록딥러닝 (76)
Hello Computer Vision
딥러닝 모델들을 공부하다 다른 사람들의 모델들의 코드를 보고 공부할 때가 있는데 함수 내에 *args 혹은 **kwargs 가 들어간 것을 심심찮게 볼 수 있다. 예전부터 봐왔었고 그럴 때마다 궁금해서 쳐봤는데 이번에 정리하려고한다. *args 란? args 는 arguments 의 줄임말이다. 우리가 함수를 정의할 때 앞으로 쓰일 모든 것들을 미리 파라미터로 정의하면 좋겠지만 그러지 못할 때도 있다. 그럴 때 필요한 것들만 미리 정의해놓고 나머지는 *args로 남겨두는 것이다. 예시로 한번 살펴보겠다. def myfunction(first, second, *args): print(first, second) for arg in args: print(arg) myfunction('세수하기','공부하기', ..
해당 내용에 대한 출처와 이미지는 밑에 남겨 두었습니다. 우리가 아무리 혁신적인 아이디어와 모델을 가지고 있더라도 가장 중요한 것은 이 모델이 잘 학습할 수 있느냐다. 본인이 가지고 있는 모델의 100% 성능을 끌어내기 위해 사람들은 여러 하이퍼 파라미터를 훈련한다. 여기서 잘 학습할 수 있느냐는 gradient descent과정에서 잘 수렴하냐이다. 해당 함수를 convex function(볼록 함수)라고 한다. 만약 손실함수가 이러하다면 초기 weight가 어떻든 잘 수렴할 것입니다. 그렇지만 우리가 만나는 함수들은 대부분 non convex function일 텐데요, 이렇게 무시무시한 함수 사이에서 우리의 손실값은 minimum값을 찾아야합니다. 잘 찾으면 좋겠지만 아마 local minimum 안..
이번 데이터마이닝 수업에서 예측과 분류하는데 한가지 기법으로 Neural Network가 나오는데 이를 설명하시면서 손실함수 내용들이 나왔다. 분명 내가 자주 쓰는건데 낯설었다. 그래서 한번 정의하려고 한다. 1. MSE(Mean Squared Error) 가장 직관적인 손실함수 방법이다. $$ E = Loss = \frac{1}{2} (y - \hat{y})^2 $$ $y$는 정답값이고 $\hat{y}$ 는 예측값을 의미합니다. 번외로 $\bar{y}$ 는 평균값을 의미합니다. 예시 정답 : 10(y) 예측 : 5 오차 : (10-5)^2 = 25 MSE의 특징이라하면 큰 오차에 대해 더 많은 처벌을 줄 수 있다는 점입니다. MAE(Mean Absolute Error) 와는 다르게 미분이 가능해서 주로..
이번에 kaggle 대회 참여를 위해 CycleGAN공부를 하던 도중 완성된 모델에 대해 한눈에 알아보려고 summary기능을 사용해보려고 했는데 (기존에는 keras를 사용해서 model.summary() 사용) 파이토치에서는 동일하게 적용되지 않더라고요 그래서 찾아본 결과 3가지 방법이 있었는데요. 1. 모델 입력하기 mod = Discriminator(3) mod Discriminator( (initial): Sequential( (0): Conv2d(3, 64, kernel_size=(4, 4), stride=(2, 2), padding=(1, 1), padding_mode=reflect) (1): LeakyReLU(negative_slope=0.2) ) (model): Sequential( (0..
지금까지 딥러닝 모델들을 공부하면서 CNN을 어떻게 쌓냐에 집중했지 BatchNorm 쓸 때는 습관적으로 쓰고는 했는데, 어떨 때는 BatchNorm1d를 쓰고 , BatchNorm2d를 쓰는 것을 발견했네요 (다른 사람의 코드를 쓰는 것도 생각을 많이 하고 써야겠다는 생각을 합니다..) 그래서 pytorch document 에서 찾아본 결과 BatchNorm1d : 2d or 3d input에 한하여 사용 BatchNorm2d : 4d input에 한하여 사용 이렇게 쓰인다고 합니다. 제가 공부하는 GAN모델에 한정하여 생각한다면 처음 노이즈(batchsize, 100)를 넣고 생성자부분에서 MLP를 진행할 때 정규화를 사용하고 싶다면 BatchNorm1d를 사용하고 판별자 네트워크를 짤 때는 이미지형..
딥러닝에 빠지고 공부한지 반년 정도의 시간이 흘렀는데요, Backpropagation이라는 개념을 어렴풋이 알고 있었고 모델을 훈련시킬 때 잘 되겠지 하고, 생각을 했지만 앞으로 계속 모델을 만질텐데 이러한 black box부분을 정확히는 모르더라도 어떻게 돌아가는지는 알아야 겠다고 생각해 한번 손으로 써보고 정리해보려고합니다. 일단 backpropagation을 왜 사용할까? 이 이유에 대해서는 gradient descent 를 왜 사용하는지부터 알면 좋을 거 같은데요, 왜냐하면 backpropagation은 gradient descent를 최대한으로 활용하기 위한 알고리즘이기 때문입니다. gradient descent에 대해서는 간략하게 정리해놓은 글이 있는데 봐주시면 도움이 될 거 같습니다. 비전공..
딥러닝 모델을 만지면서 당연히 해왔던 것들인데 기초는 닦아도 닦아도 끝이 없기 때문에 한번 정리하고 넘어가려고 합니다. 사실 이 내용만해도 한 학기 수업을 할 수 있을 정도로 방대하지만 앞으로의 모델을 만지면서 당분간 무리없을 정도로 정리해보려고 합니다. (사실 우연히 본 영상이 너무 재밌어서 한번 정리하고 넘어가야 할 것 같네요.. 해당 동영상은 여기 Grdient Descent는 경사하강법입니다. 그리고 많은 논문에서 'gradient가 소실되었네' ,'gradient가 없어 학습이 진행이 안되네 ' 이러한 문구들을 많이 찾아볼 수 있습니다(최근 논문들을 보면서 더 느끼는 거 같습니다) 그렇다면 이 Gradient Descent는 왜 필요한 걸까요? 예를 들어 MNIST 데이터셋을 통해 숫자들을 구별..
이번에 논문 구조를 구현하는 과정에서 (DCGAN, LSGAN) 가중치 초기화하는 과정을 거쳤는데요 어이없는 착각을 하면서 며칠간 가중치 초기화만 만졌습니다.. 그래서 가중치 초기화 이 녀석이랑 너무 친해진 거 같아서 다른 분들께 도움이 되고자 합니다. 1. Why 가중치 초기화? 왜 하는지에 대해서는 이미 다른 분들이 많이 포스팅하였더라고요. gradient 관련해서 많이들 쓰시는데 쓰시는 Neural Network에 맞게 쓰시면 될 거 같습니다 (He / Xavier) 그리고 논문에서 모델 구조에 대해 설명하면서 가중치 초기화에 대해 언급하는 경우가 있으니 그럴 경우 그에 맞게 초기화하면 될 거 같습니다. 2. 가중치 초기화 코드 net = nn.Sequential( nn.Conv2d(3, 2, 3)..