일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- SSL
- Vision
- Torch
- CV
- 머신러닝
- Python
- web
- 3d
- classification
- nlp
- cs
- Meta Learning
- nerf
- algorithm
- PRML
- REACT
- FGVC
- 알고리즘
- pytorch
- ML
- 딥러닝
- 자료구조
- dl
- Depth estimation
- math
- clean code
- GAN
- FineGrained
- computervision
- Front
- Today
- Total
목록pytorch (14)
KalelPark's LAB
Pytorch unfold란? Batched tensor에 대하여, 마치 Convolution처럼, Slidingg하면서, locl block을 구하는 것이다. 예를들면, 해당 MNIST의 경우 1, 1, 28, 28 사이즈의 경우 -> 1, 49, 16 으로 변환한 것이다. EX) import torch.nn as nn from matplotlib import pyplot as plt from torchvision import datasets, transforms if __name__ == '__main__': train_data = datasets.MNIST(root='./data/', train=True, download=True, transform=transforms.ToTensor()) test..
Abstract 본 논문은 label 없이, model을 학습하는 Self-Supervised Learning을 분석합니다. 본 논문은 3가지 method를 비교합니다. (BiGAN, RotNet, DeepCluster). 데이터가 상당히 많더라도, Supervision과 같이 학습하는 것은 불가능합니다. 1) 본 논문은 초기 layer에서는 natural images의 통계에 대한 정보를 갖는 것이 힘들다는 것을 설명하고, 2) self-supervision에서는 그러한 표현력을 Self-supervision을 통해서, 학습될 수 있다고 설명합니다. 그리고, 대규모 데이터셋을 사용하는 것 대신 합성 변환을 활용하여, low-level statistics를 포착할 수 있습니다. Introduction 본..
Python에서의 일반적으로 자주 활용되는 메소드(Magic Method)인 __str__ 메서드와 __repr__ 메서드의 차이 두 메소드 간에는 미묘한 차이가 있습니다. 따라서 차이점을 명확하게 아는게 좋습니다. 공통점 - 두 메소드는 모두 "객체를 문자열로 반환"한다는 공통점이 존재 아래의 코드를 활용해보면 __repr__ 와 __str__이 겹친다는 것을 알 수 있습니다. import torch import torch.nn as nn class model(nn.Module): def __init__(self): super().__init__() self.linear1 = nn.Linear(10, 100) self.linear2 = nn.Linear(100, 100) self.linear3 = nn..
Pytorch에서 CUDA 호출은 asynchronize이기 때문에, 코드를 동기화 해줘야 합니다. 시간을 측정할 때, 사용됩니다. torch.cuda.Event()는 device의 progress를 모니터링하는데 사용할 수 있는 synchronization markers입니다. -> CUDA stream 내부 명령 흐름 중 특정 지점에 표시를 남기는 것입니다. 정확하기 시간을 측정하고자 한다면, synchronize를 해야한다고, 공식 문서에서 언급했습니다. 이벤트가 처음 record되거나, 다른 프로세스를 내보낼 때, 기본 CUDA 이벤트가 느리게 초기화 됩니다. 생성 후에는 동일한 장치의 stream만 event로 기록할 수 있습니다. 그러나 모든 장치의 stream은 이벤트를 기다릴 수 있습니다...
Pytorch를 사용할 때, 모델을 빠르게 학습시켜야 할 경우가 있습니다. 이러한 경우, 병렬화를 사용하는 것이 좋습니다. - 학습을 더 빨리 끝내기 위해서, - 모델이 너무 커서 이를 분할하여, GPU에 올리기 위함입니다. * 기존 torch.nn.DataParallel의 문제점은 1) 멀티쓰레드 모듈을 사용하기에 Python에서 상당히 효율적이지 않습니다. - Python은 GIL (Global Interpreter Lock)에 의하여, 하나의 프로세스에서 동시에 여러개의 쓰레드가 작동할 수 없습니다. 그러므로, 멀티 쓰레드가 아닌 멀티 프로세스 프로그램을 만들어서 여러개의 프로세스를 동시에 실행하게 해야 합니다. 2) 하나의 모델에서 업데이트 된 모델이 다른 device로 매 step마다 복제해야 ..
Pytorch에서의 Distributed Package 사용하기 - 규모가 큰 모델을 학습할 때는, 보통 분산 학습을 진행합니다. Multi-GPU 학습을 할 때, 분산 학습을 사용할 수 있습니다. 직접 구현할 수도 있지만, Pytorch에서 제공하는 기능을 사용합니다. - 아래의 코드는 ImageNet1K를 돌리는 경우를 보여줍니다. https://github.com/pytorch/examples/blob/main/imagenet/main.py main_worker에서 dist.init_process_group을 통하여, GPU마다 분산 학습을 위해서 초기화를 진행합니다. torch docs에 따르면, multi-gpu시, backend를 nccl로 설정하라고 되어 있습니다. DistributedDat..
Logger - 서버에서 프로그램을 돌릴 때, 알아보기 쉽게 많은 것을 저장해두는 것이 좋습니다. print를 단순하기 사용하기 보다는, logger를 활용해서 저장해두는 것이 좋습니다. - 만약 loggging 시, text 파일을 이어쓰고자 한다면, mode를 "w"가 아닌 "a"를 사용하면 됩니다. wandb와 같이 어떻게 보면 유용하게 활용할 수 있습니다. 저는 이전에 tqdm을 사용하는데, 이제는 logger를 사용하려고 합니다. import sys class Logger(object): def __init__(self, local_rank = 0, no_save = False): self.terminal = sys.stdout self.file = None self.local_rank = lo..
Split란? Split의 경우 데이터당 최대 자료구 N개를 가지게 하는 방법입니다. 만약 원하고자 하는 split_size로 나누고자 하지만, 정확한 size로 나누는 것이 불가능하다면, 마지막 size는 작습니다. Chunk란? chunks의 경우 데이터를 n개로 나누는 방법입니다. chunk의 경우 n개의 그룹을 만드는 것이다. * 쉽게 이해하고자 한다면, chunk는 n개의 그룹을 만드는 것이고, split의 경우 n개로 구성된 그룹을 만드는 것이다.