일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- CV
- pytorch
- 3d
- computervision
- 머신러닝
- REACT
- algorithm
- PRML
- Front
- clean code
- 딥러닝
- GAN
- Vision
- 자료구조
- FGVC
- ML
- dl
- Torch
- Meta Learning
- Depth estimation
- web
- cs
- 알고리즘
- math
- FineGrained
- Python
- nlp
- classification
- SSL
- nerf
- Today
- Total
목록CV (110)
KalelPark's LAB
Gradient Clipping이란? 주로 RNN계열에서 gradient vanishing이나 gradient exploding이 많이 발생하는데, gradient exploding을 방지하여, 학습의 안정화를 도모하기 위해 사용하는 방법입니다. Gradient Clipping과 L2_Norm Clipping이란, gradient가 일정 threshold를 넘어가면, clipping을 해줍니다. clipping은 gradient의 L2 norm으로 나눠주는 방식입니다. Clipping이 없으면, gradient가 너무 뛰어서, global minimum에 도달하지 않고, 너무 엉뚱한 방향으로 향하게 되지만, Clipping을 해주게 되면, gradient vector가 방향은 유지하고, 적은 값의 이동을..
딥러닝을 돌리다보면, Memory가 부족하면, CUDA Out Of Memory를 자주 만나게 됩니다. GPU 메모리가 부족이 많이 발생하였을 때, 메모리 부족이 일어나는 이유이기도 때문입니다. batch size가 학습에 큰 영향을 미치지 않는다면 상관이 없지만, batch size는 학습에 큰 영향을 줍니다. batch size가 큰 배치사이즈를 사용하는 이유는 학습시에 정보의 노이즈를 제거하고 더 나은 gradient decsent를 수행할수 있습니다. Explained of Gradient Accumulate [CODE] model.zero_grad() # Reset gradients tensors for i, (inputs, labels) in enumerate(training_set): pre..
MixUp 구현. import torch import numpy as np import matplotlib.pyplot as plt import torchvision import torchvision.transforms as transforms transform = transforms.Compose([ transforms.Resize((224, 224)), transforms.ToTensor(), # transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)) ]) batch_size = 4 trainset = torchvision.datasets.STL10(root='./temp', split = "train", download=True, transform=tran..
파이썬 프로그래밍의 상당 부분은 데이터를 포함하는 클래스를 정의하고, 클래스에 속하는 객체들이 서로 상호작용하는 방법을 기술하는 것으로 여겨집니다. 모든 파이썬 클래스는 함수와 attribute를 함께 캡슐화하는 일종의 컨테이너라고 할 수 있습니다. 파이썬은 데이터를 관리할 때 사용할 수 있도록, 리스트, 튜플, 집합, 딕셔너리 등에서 활용됩니다. * FrequencyList를 리스트(list)의 하위 클래스로 만듦으로써, 리스트가 제공하는 모든 표준 함수를 FrequencyList에서도 사용할 수 있습니다. class FrequencyList(list): def __init__(self, members): super().__init__(members) def frequency(self): counts ..
BatchSize에 따른 loss의 변화율 - batch size의 크기에 따라 학습되는 과정은 달라질 수 있습니다. batch size가 작으면, 순간 loss가 커져서 convex hole에 위치한 곳에서 급격하게 자리를 변경할 우려가 있습니다. - batchsize가 크면, 여러 데이터를 평균으로 loss가 구해지기 때문에 훨씬 robustness 해집니다. SSL 시, Batchsize가 커야하는 이유가 아래와 동일합니다. 여러 데이터를 평균으로 backpropagation을 해야 성능이 올라갑니다. 또한 우측의 표를 보면, LR에 작으면 Batchsize가 작을수록 높은 성능이 나오지만, LR이 큰 경우, Batchsize가 클수록 성능이 높이 나오는 것을 알 수 있습니다. 하지만, Batchs..
Problem SSL로 Batchsize를 최대한 늘려 학습하고자 하는데, 잘 안되어 분산처리를 봤다. 사실 연관은 없는 것 같다.. (불가능.ㅠ) 결론 저희 연구실에서는 SSL을 하려면,TeslaV100을 하나 장만해야 함을 느꼈습니다.. import os local_rank=int(os.environ["LOCAL_RANK"]) import torch import torch.distributed as dist from torch.utils.data.distributed import DistributedSampler import torchvision.transforms as T from torch.utils.data import DataLoader from torchvision.models import ..
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..
코드에서 값을 관리하는 부분이 점점 복잡해지고 있음을 깨닫는 즉시 해당 기능을 클래스로 분리하는 것이 좋습니다. 이를 통하여, 데이터를 더 잘 캡슐화해주는 정의된 인터페이스를 활용하는 것이 가능합니다. 우선 기초 지식부터 다듬어 보도록 하겠습니다. 인터페이스와 구체적인 구현 사이에 잘 정의된 추상화 계층을 만들 수 있습니다. Tuple : Tuple 자료 구조는 불변한 순서가 있는 객체로 생성하여, 값을 변경할 수 없음 Tuple은 튜플에 있는 요소에 접근할 때, 순서로 기억하기 때문에, 순서로 접근해야 하는 단점이 있음. 그러므로, Namedtuple을 사용하면 더욱 편리해집니다. Namedtuple : Class가 아니고, collections 내 존재합니다. 사용 예시 - 위치 또는 키워드 Argu..