본문 바로가기

728x90

boostcamp AI tech/boostcamp AI

(64)
AlexNet, VGGNet, GoogleLeNet, ResNet, DenseNet 1. AlexNet - Image Classification task에서 당시 매년 1등을 차지했던 모델이다. - 당시에는 더 많은 파라미터를 학습시키고 싶ㅇgpu 메모리 크기의 한계 때문에 모델을 반으로 나눠서 각 gpu에 학습을 시켰다. - ReLU activation, drop, data augmentation 등 지금에서는 많이 익숙한 기법이지만 당시에는 새로운 시도였다. - 현재에 와서는 일반적으로 잘 되는 모델의 standard를 만들었다고 볼 수 있다. - sigmoid, tanh에서 발생하는 vanishing gradient 문제를 ReLU를 통해 극복했다. 2. VGGNet - 특징을 뽑자면 3 by 3 kernel을 사용했고 dropout(0.5)를 사용했다. - alexnet이 11 ..
Regularization - generalization을 높이기 위한 노력들에 대해 알아보자. - testset에서의 성능을 낮추지 않으면서 training에서 학습을 방해하는 개념이다. Early stopping - validation loss가 커지는 지점 전에서 학습을 멈춘다. Weight decay, Parameter Norm Penalty - 네트워크의 parameter들의 크기가 작으면 작을수록 좋다. - function space에서 뉴럴 네트워크가 만들어내는 함수가 부드러우면 generalization에 더 좋다는 가정이 깔려있다. - 그래서 loss를 줄일때, 학습 파라미터들의 크기도 함께 줄이는 방법이다. Data Augmentation - 데이터가 아주아주아주 많으면 generalization에는 반드시 좋다..
Optimization Momentum - 새 batch에 대한 weight를 조정할 때, 이전 배치에서 계산한 gradient의 관성을 유지한다. - 현재 위치에서의 gradient와 현재까지의 momentum을 가지고 구한다. - batch에 따라 gradient가 요동치는 상황에서 효과가 있을 수 있다. - local minimum convergence를 방해해서 local minimum를 벗어나는데 활용될 수 있다. Nesterov Accelerated Gradient - 현재까지의 momentum과 해당 momentum이 안내하는 곳으로 이동한 곳에서의 gradient를 가지고 구한다. - converging 속도가 빠르다. Adagrad - 많이,자주 변한 파라미터 w1에 대해서는 앞으로 적게 변화시키고, 적게,조금..
Multi gpu training, Hyper parameter Search, etc 1. Multi gpu training - Multi gpu training: - 모델의 sequence1은 gpu0에, sequence2는 gpu1에 분리해서 계산 하거나 (모델 나누기) - 데이터 절반은 gpu0에, 나머지 절반은 gpu1에 분리해서 계산 하고 결과를 평균내거나 (데이터 나누기) - DataParallel : 한명의 gpu가 나머지 gpu에게 데이터 분배, 취합 등의 역할을 수행 (다른 gpu보다 메모리 더 사용) - DistributedDataParallel : 이 방식으로 데이터를 나누고자 dataloader를 만들 때는 distributedSampler 정의, pin_memory=True등의 설정이 필요함. 예를들어 n개의 cpu가 n개의 gpu에게 각각 데이터를 주고 받고 한다..
Monitoring tools 1. Tensorboard from torch.utils.tensorboard import SummaryWriter import numpy as np writer = SummaryWriter(logs_base_dir) for n_iter in range(100): writer.add_scalar('Loss/train', np.random.random(), n_iter) writer.add_scalar('Loss/test', np.random.random(), n_iter) writer.add_scalar('Accuracy/train', np.random.random(), n_iter) writer.add_scalar('Accuracy/train', np.random.random(), n_iter) wri..
Model save, load & Transfer Learning 1. Save and load Model parameters for param_tensor in model.state_dict(): print(param_tensor, "\t", model.state_dict()[param_tensor].size()) torch.save(model.state_dict(), os.path.join(MODEL_PATH, "model.pt")) new_model = TheModelClass() new_model.load_state_dict(torch.load(os.path.join(MODEL_PATH, "model.pt")) - 모델의 parameter만 model.pt로 저장해두고 불러 올 수 있다. (모델 class는 가지고 있어야한다.) from torchsummary ..
PyTorch Project 1. Project Template https://github.com/victoresque/pytorch-template GitHub - victoresque/pytorch-template: PyTorch deep learning projects made easy. PyTorch deep learning projects made easy. Contribute to victoresque/pytorch-template development by creating an account on GitHub. github.com pytorch-template/ │ ├── train.py - main script to start training ├── test.py - evaluation of trained model ..
PyTorch Basics - pytorch의 핵심은 auto grad이다. 자동으로 미분을 해준다. w = torch.tensor(2.0, requires_grad=True) y = w**2 z = 10*y + 50 z.backward() print(w.grad) # dz/dw = 40 a = torch.tensor([2., 3.], requires_grad=True) b = torch.tensor([2., 3.], requires_grad=True) Q = 3*a**3 - b**2 external_gradient = torch.tensor([1,1]) Q.backward(gradient = external_gradient) # 변수가 a,b두개 이므로 external_gradient추가 print(a.grad) # [36, 8..

728x90