일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Meta Pseudo Labels
- 컴퓨터구조
- shrinkmatch
- UnderstandingDeepLearning
- dcgan
- CycleGAN
- shrinkmatch paper
- conjugate pseudo label paper
- adamatch paper
- remixmatch paper
- mme paper
- CGAN
- simclrv2
- GAN
- 최린컴퓨터구조
- BYOL
- Pseudo Label
- 백준 알고리즘
- semi supervised learnin 가정
- Entropy Minimization
- cifar100-c
- CoMatch
- SSL
- tent paper
- Pix2Pix
- mocov3
- dann paper
- 딥러닝손실함수
- ConMatch
- WGAN
- Today
- Total
목록딥러닝 (76)
Hello Computer Vision
2개의 동일 모델이 있고 한개는 이미 학습이 어느 정도 됐고 다른 1개는 초기화 상태이다. 학습이 어느 정도 된 모델의 파라미터를 안된 모델의 가중치로 넘겨주고, 이 모델에 대해서 학습을 시킨다. 그렇다면 기존 넘겨준 모델의 가중치는 업데이트가 될까? 직관적으로는 안될 거 같지만 실험을 해봤다. import torch import torch.nn as nn import torch.optim as optim import torch.nn.functional as F x_train = torch.FloatTensor([[1], [2], [3]]) y_train = torch.FloatTensor([[2], [4], [6]]) layer = nn.Linear(1, 1) layerc = nn.Linear(1, 1..
이번에 실험하면서 CIFAR10-C 데이터셋을 다루게되었는데 시행착오도 많아가지고 공유해보려고 한다. 우선 https://zenodo.org/records/2535967 사이트에서 CIFAR10-C 데이터 다운로드 링크를 복사 후 터미널에 wget {dataest link} 를 하면된다. colab환경이라면 !wget하면 된다 그렇다면 tar를 확장자로 하는 압축파일을 다운로드 받게 되는데 압축을 푸는데 다양한 방법이 있지만 import tarfile tar = tarfile.open('/content/CIFAR-10-C.tar?download=1', 'r') tar.extractall() tar.close() 이렇게 한다면 압축 파일을 해제할 수 있다(위 환경은 colab환경이다) 그렇다면 이렇게 많은..
모델을 훈련 전에 복사할 필요성이 생겼는데 이번 기회에 copy, deepcopy를 비교해보려고 한다. 1. 다른 변수로 할당 우선 코딩 초보인 나에게 해당 변수 값을 다른 변수에 넘겨주면은 되지 않나 생각을 했다. a = [1,2,3] b = a a.append(4) print(f'a: {a}, 주소 : {id(a)}') print(f'b: {b}, 주소 : {id(b)}') a: [1, 2, 3, 4], 주소 : 2603786361344 b: [1, 2, 3, 4], 주소 : 2603786361344 이렇게 다른 변수를 사용하더라도 기존 변수에 대한 참조를 하기 때문에 값이 같이 변하는 것을 확인할 수 있고 메모리 주소도 같은 것을 확인할 수 있다. 이렇게 새로운 변수 생성하는 방법을 왜 사용하는지에..
데이터셋을 다루다보면은 cat, stack을 사용하는 코드들이 종종 있는데 이를 구분하기 위해 정리하려고 한다. 우선 코드로 먼저 확인하는게 제일 빠를 거 같다. x = torch.rand(3, 5) y = torch.rand(3, 5) a = torch.cat([x, y], dim = 0) b = torch.stack([x, y], dim = 0) print(a.shape) print(b.shape) torch.Size([6, 5]) torch.Size([2, 3, 5]) 결과로 보는 것처럼 torch.cat을 사용한다면 지정해준 dim에 텐서들을 붙이는 것을 확인할 수 있다. 그러나 torch.stack을 사용한다면 새로운 차원에서 텐서들을 붙이는 것을 확인할 수 있다.
TTT에서는 SSL을 활용해 이미지를 rotate시키고 classifier 가 방향을 맞추도록 해 encoder를 추가로 훈련시킨다. 이를 따로 증강을 활용하는 것이 아니라 tensor들의 위치를 바꿔준다. def tensor_rot_90(x): return x.flip(2).transpose(1, 2) plt.figure(figsize=(8, 8)) for i in range(8): # 원본 이미지 plt.subplot(8, 2, 2 * i + 1) plt.imshow(np.transpose(images[i].numpy(), (1, 2, 0))) plt.axis('off') # 90도 회전 이미지 rotated_image = tensor_rot_90(images[i]) plt.subplot(8, 2, ..
Pytorch를 사용하다보면은 detach가 쓰이는 코드를 종종만난다. 사실 이 전까지는 gradient에 대해서 별 생각이 없었다. 그런데 요즘 실험 및 논문을 읽으면서 gradient에 대한 이야기가 많이 나와 조금 정리해보려고 한다. 나는 detach를 사용하면 해당 데이터의 gradient를 사용하지 않는 것으로 알고 있었다. import torch import torch.nn as nn class TestModel(nn.Module): def __init__(self): super().__init__() self.layer1 = nn.Linear(10, 10) self.layer2 = nn.Linear(10, 10) self.layer3 = nn.Linear(10, 10) def forward(..
IDE는 Pycharm을 사용했고 기존에는 항상 Google Colab에서 list에다 결과값을 저장하고 matplotlib을 사용해서 시각화했는데 이제 tensorboard를 쓸 필요성을 느껴서 이번에 처음 써보았다. 우선 pip install tensorboarrd를 통해 tensorboard를 수행하면은 나만 그런지 모르겠는데 WARNING:tensorflow:From C:\Users ..... tf.compat.v1.losses.sparse_softmax_cross_entropy instead. 이러한 에러가 뜬다. 근데 결과적으로는 아무 문제없다. 보통 모든 설명글에서는 저장한 값에 대하여 tensorboard를 열고 싶으면 tensorboard --logdir=runs를 terminal에 입력..
딥러닝 모델을 돌리기 위해 데이터셋에 대한 DataLoader를 설정하고 Epoch마다 데이터셋을 돌리는 과정을 반복한다 그러나 이렇게 기계적으로 하는 와중에 SimCLR처럼 Similarity matrix를 고정적으로 batch_size * 2 로 만든다면 에러가 뜰 것이다. 왜냐하면 Matrix자체는 고정적으로 Batch_size * 2의 형태로 만들어지지만 실제 배치사이즈는 딱 떨어지지 않을 때도 있기 때문이다. 말로 하니까 조금 어려운데, 예시로 들어보자면 배치사이즈: 512, 총 데이터: 50,000 50,000 / 512는 딱 떨어지지 않기 때문에 에러가 생길 수 있다. 일반적인 Supervised setting에서는 일어나지 않는데 그 이유는 x, y 의 크기만 같으면 되기 때문이다. 추가로..