일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- adamatch paper
- cifar100-c
- shrinkmatch
- CoMatch
- 최린컴퓨터구조
- Pseudo Label
- SSL
- UnderstandingDeepLearning
- dcgan
- Entropy Minimization
- BYOL
- mme paper
- CycleGAN
- dann paper
- mocov3
- 딥러닝손실함수
- WGAN
- ConMatch
- semi supervised learnin 가정
- Pix2Pix
- CGAN
- tent paper
- conjugate pseudo label paper
- GAN
- Meta Pseudo Labels
- 백준 알고리즘
- 컴퓨터구조
- remixmatch paper
- shrinkmatch paper
- simclrv2
- Today
- Total
목록딥러닝/파이토치 (33)
Hello Computer Vision
데이터셋을 다루다보면은 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 의 크기만 같으면 되기 때문이다. 추가로..
파이썬 코드들을 보면은 많은 코드들에서 if __name__ == '__main__': 이라는 것을 발견할 수 있다. 물론 많은 분들이 이에 대해 작성해놓았지만 안잊어버리기 위해 적어놓으려고 한다. 우선 __name__ 은 파이썬에 내장되어 있는 변수라고 할 수 있다. 해당 변수는 만약 파일이 interpreter통해 수행된다면(해당 파일이 직접적으로 수행된다면) __main__ 이라는 변수가 되는 거고 만약 다른 파일로부터 import 되서 수행된다면 해당 파일의 이름으로 변수가 저장된다. 예시를 통해 알아보는 것이 제일 빠르다. def print_test(): if __name__ == '__main__': print('interpreter 통해 직접 출력') else: print('해당 파일 imp..
이번에 FixMatch관련하여 코드를 뜯어보던 중 배울 점도 있고 기록해야겠다는 생각을 했다. 1. torchvision dataset 을 상속받는 class를 생성할 때 들어가는 파라미터들을 줄 수 있다. 사실 너무나도 당연한 것일 수 있지만 그동안 코드를 뜯어보지 않고 기계적으로 수행하다보니 몰랐던 거 같다. class CIFAR10SSL(datasets.CIFAR10): def __init__(self, root, indexs, train=True, transform=None, target_transform=None, download=False): super().__init__(root, train=train, transform=transform, target_transform=target_tran..
이번에 대회를 나가면서 baseline 코드를 수행했는데 코드 일부에 torch.cuda.amp.GradScaler 및 autocast 가 있는 것을 확인하였다. 이전에도 본적이 있어서 알아봤던 거 같은데 기억이 안나 다시 한번 공부하고 기록해놓으려고 한다. 우선 이 코드를 왜 쓰는지 알아보기 위해서는 Auto Mixed Precision 이 필요하다. 그리고 이걸 알아보기 전에 부동소수점 즉 Floating Point에 대한 정보를 필요로 한다. 나도 잘 몰라서 기본적으로만 적으려고 한다. 부동소수점은 한가지 방식이 아니라 여러가지 방식으로 나타낼 수 있는데 FP16, FP32, FP64, FP 128이 있다. 값을 세밀하게 표현하기 위해서는 더 높은 숫자인 FP128, FP 64를 사용해야하지만 그만..