<수강한 강의>
[#15.Lab] How to Write Well-Organized DL Code from Scratch(Live Coding) - 딥러닝 홀로서기
[#16.Lec] Assignment #2 Review - 딥러닝 홀로서기
[#17.Lec] Advanced Optimizer than SGD - 딥러닝 홀로서기
[#18.Lab] Handling Visualization of 'Many' Experiments - 딥러닝 홀로서기
[#19.Lec] - Assignment #3 Review - 딥러닝 홀로서기
수강 날짜 : 220821-220823
<내용 정리>
[#15.Lab] How to Write Well-Organized DL Code from Scratch(Live Coding) - 딥러닝 홀로서기
TRAINING A CLASSIFIER_Pytorch CIFAR10 tutorial를 이해하면서 코드를 적절하게 수정한다. 추후 다시 보면 좋을 것 같다.
import torch.nn as nn
import torch.nn.functional as F
class MLP(nn.Module):
def __init__(self, in_dim, out_dim, hid_dim, n_layer, act):
super(MLP, self).__init__()
self.in_dim = in_dim
self.out_dim = out_dim
self.hid_dim = hid_dim
self.n_layer = n_layer
self.act = act
#fully connected
self.fc = nn.Linear(self.in_dim, self.hid_dim)
self.linears = nn.ModuleList()
for i in range(self.n_layer-1):
self.linears.append(nn.Linear(self.hid_dim, self.hid_dim))
self.fc2 = nn.Linear(self.hid_dim, self.out_dim)
if self.act == 'relu':
self.act = nn.ReLU()
def forward(self, x):
x = self.act(self.fc(x))
for fc in self.linears:
x = self.act(fc(x))
x = self.fc2(x)
return x
model = MLP(3072, 10, 100, 4, 'relu')
model
[#16.Lec] Assignment #2 Review - 딥러닝 홀로서기
1) colab GPU를 써도 왜 느릴까? -> Batch size를 작게 설정하는 경우 발생할 수 있다.
2) Regularization은 어떻게 구현해야 할까?
3) 결과 비교는 어떻게 해야 할까?
* pytorch에서 data loader를 구현할 때 batch size도 고려하는 것이 좋다.
[#17.Lec] Advanced Optimizer than SGD - 딥러닝 홀로서기 # 다시 듣기!
- overfitting : training set을 모델이 외워버리게 되는 것.
=> 해결하기 위해서는? Regularization : L2 Regularization, Dropout
- gradient vanishing : gradient가 0으로 수렴되어 버리는 것.
=> 해결하기 위해서는? ReLU Activation를 사용.
- Xavier Initialization : weight를 어떻게 초기화 할 것인지.
- Batch Normalization : activation function을 효과적으로 사용하게 만들기 위해서
<Gradient Descent>
- Batch Gradient Desent
: 모든 트레이닝 셋을 이용해서 gradient를 구한다.
-> 문제점? 1) Ram의 한계에 부딪힐 수 있다. 2) 한 스텝을 밟기위해 너무 오랜 시간이 걸린다.
- Stochastic Gradient Descent(SGD)
: training set 중에 작은 chunk(mini-batch)에 대해서면 gradient를 계산한다.
확률적(Stochastic)으로 미니 배치를 선택한다. -> local minimum도 피할 가능성이 커진다.
=> 장점? 미니배치로 계산했을 때 더 빠르다. GPU는 올리기만 하면 batch size에 상관없이 병렬적으로 계산을 하기 때문에 계산하는데 걸리는 속도는 거의 비슷한다.
<Advanced Gradient Descent Methods>
- Vanilla SGD 문제점) local minima를 벗어날 수 없다.
-> momentum으로 해결(일종의 관성을 이용) : 좀 더 빠른 학습도 가능.
momentum의 문제점) local minima는 빠져나갈 수 있지만, global minima에 도착해서도 멈추지 못할 수 있다.
-> Nesterov Accelerated Gradient(NAG)으로 해결
Vanilla SGD의 문제점) Step size is equal for every parameter
-> learning rate를 각각의 파라미터에 맞게 적용해보자. -> step size가 너무 작아질 수 있다는 문제 발생. 이걸 해결하기 위한 것이 RMSProp
- AdaDelta : 파라미터의 변화량도 고려함.
- Adam(Adaptive Moment Estimation) : 장점들을 모두 합쳐놓은 optimizer!
[#18.Lab] Handling Visualization of 'Many' Experiments - 딥러닝 홀로서기
- How to Save Experiment Results
: args에 있는 세팅 값들을 저장해야 한다.
1) 실험 세팅값들
2) epoch에 따른 loss, acc들
3) 최종 acc도 저장
=> 어떻게 저장할까?
중간에 프로세스가 멈춰도(인터넷이 튕기거나, 프로세스가 강제로 종료되거나...) 실험 결과들을 남기려면? json을 이용!
#json 다뤄보기
import json
a = {'value1':5, 'value2':10}
filename = 'test.json'
with open(filename,'w') as f:
json.dump(a,f)
with open(filename, 'r') as f:
result = json.load(f)
print(result)
!ls
!cat test.json
json은 딕셔너리를 저장하는 것!
- 실험 하나당 json 파일 하나를 만든다면 파일 이름은?
주로 바뀌는 변수 값들(n_layer같은)을 파일 제목에 같이 넣어보기? 그보다는 '실험 이름+실험 세팅 값의 해쉬.json'으로 파일 이름을 정한다.(hash 값이란? 같은 인풋이 들어오면 같은 값을 내놓음.)
# hash 값 만들어보기
import hashlib
a = "my name is gildong"
hash_key = hashlib.sha1(a.encode()).hexdigest()
print(hash_key)
=> 변수들이 담긴 딕셔너리(setting)를 str(setting)을 이용해 문자열로 바꾸어서 hash값을 얻을 수 있다.
# hash 값 만들어보기
import hashlib
setting = {'value1':5, 'value2':10, 'seq':[1,2,3,4,5], 'exp_name':'exp1'}
exp_name = setting['exp_name']
hash_key = hashlib.sha1(str(setting).encode()).hexdigest()
filename = '{}-{}.json'.format(exp_name, hash_key)
print(filename)
이 내용을 깔끔하게 def로 정리할 수도 있다.(https://github.com/heartcored98/Standalone-DeepLearning/blob/master/Lec4/Lab6_result_report.ipynb)
(28:20)
- pandas 이용과 시각화(seaborn)
[#19.Lec] - Assignment #3 Review - 딥러닝 홀로서기
'✨ 공부 기록 > 딥러닝' 카테고리의 다른 글
[홀로서기 7] 딥러닝 홀로서기 강의 정리(딥러닝 chap 23, 26) (0) | 2022.09.06 |
---|---|
[홀로서기 6] 딥러닝 홀로서기 강의 정리(chap 20, 21, 22) (0) | 2022.08.31 |
[홀로서기 4] 딥러닝 홀로서기 강의 정리(chap 11, 12, 13, 14) (0) | 2022.08.15 |
[홀로서기 3] 딥러닝 홀로서기 강의 정리(9.Lab-10.Lec) (0) | 2022.08.09 |
[홀로서기 2] 딥러닝 홀로서기 강의 정리(4.Lab-8.Lec) (0) | 2022.08.01 |