[Day12] 최적화
Optimization
CNN 첫걸음
중요
여러 최적화 방법을 비교시 필요 부분을 정리 합니다.
nn.Linear
import torch.nn as nn
nn.Linear(in_features: int, out_features: int, bias: bool=True)
선형 layer을 만드는데 in_features
인자는 input의 features의 개수, out_features
인자는 output의 features개수를 설정한다. 그 다음으로 bias
인자는 절편 값을 사용할 것인지에 대한 설정 값이다.
nn.Sequential
import torch.nn as nn
# nn.Sequential() 사용법
# Example of using Sequential
model = nn.Sequential(
nn.Conv2d(1,20,5),
nn.ReLU(),
nn.Conv2d(20,64,5),
nn.ReLU()
)
# Example of using Sequential with OrderedDict
model = nn.Sequential(OrderedDict([
('conv1', nn.Conv2d(1,20,5)),
('relu1', nn.ReLU()),
('conv2', nn.Conv2d(20,64,5)),
('relu2', nn.ReLU())
]))
해당 함수는 여러 layer을 묶어주는 함수가 된다. layer을 초기화시 직접 입력시 순서대로 입력 가능하고 OrderedDict로 이름과 모델을 같이 입력 해 줄 수 있다.
import torch.nn as nn
model = nn.Sequential()
model.add_module(layer_name,layer)
아니면 위와 같이 먼저 객체를 만들고 add_module
메서드을 통해서 ('layer_name',layer)을 인자로 넣어주어도 된다.
optim
최적화 방법은 아래와 같이 설정 할 수 있다.
import torch.optim as optim
optm_sgd = optim.SGD(model_sgd.parameters(),lr=LEARNING_RATE)
optm_momentum = optim.SGD(model_momentum.parameters(),lr=LEARNING_RATE,momentum=0.9)
optm_adam = optim.Adam(model_adam.parameters(),lr=LEARNING_RATE)
sgd 최적화 방법:SGD
메서드를 사용하여 lr
까지만 지정해 준다.
momentum 최적화 방법: SGD
메서드를 사용하여 lr
,momentum
값을 지정해 준다.
adam 최적화 방법: Adam
메서드를 사용하여 lr
인자 지정해 준다.
각 방법의 첫번째 인자는 모델의 parameters()
를 넣어 줘야한다.
피어세션
이번 피어세션에서는 알고리즘 문제를 풀고 토론하였다.
from collections import deque
import sys
def tuple_sort(x,y):
return (min(x,y),max(x,y))
def bfs(i,j):
q=deque()
q.appendleft((i,j))
visit[i][j]=cnt
ans=1
while q :
x,y=q.pop()
for d,s in zip(dir,bin(castle[x][y])[2:].zfill(4)):
nx, ny = x + d[0], y + d[1]
if 0<= nx <m and 0<= ny <n:
if s=='0':
if visit[nx][ny] == 0:
q.appendleft((nx, ny))
visit[nx][ny]=cnt
ans+=1
elif visit[nx][ny]!=0 and visit[nx][ny]!=cnt :
connect.add(tuple_sort(cnt,visit[nx][ny]))
return ans
n,m=map(int,sys.stdin.readline().split())
visit=[[0]*n for _ in range(m)]
dir=[(1,0),(0,1),(-1,0),(0,-1)] #남, 동, 북, 서
castle=[]
connect=set()
room={}
for _ in range(m):
castle.append(list(map(int,sys.stdin.readline().split())))
cnt=0
large_room=float('-inf')
remove=float('-inf')
# 가장 큰방과 방의 개수
for i in range(m):
for j in range(n):
if visit[i][j]==0:
cnt+=1
room[cnt]=bfs(i,j)
if large_room < room[cnt]:
large_room=room[cnt]
# 벽 제거하여 가장 넓은 방
for x,y in connect:
if remove < room[x]+room[y]:
remove=room[x]+room[y]
print(cnt)
print(large_room)
print(remove)
'AI > 부스트 캠프 AI tech' 카테고리의 다른 글
[Day16] NLP 기초 (0) | 2021.02.15 |
---|---|
[Day15] Generative model (0) | 2021.02.05 |
[Day14] RNN (0) | 2021.02.04 |
[Day13] CNN (0) | 2021.02.03 |
[Day11] 딥러닝 기초 (0) | 2021.02.01 |
[Day10] 시각화/통계학 (0) | 2021.01.29 |
[Day9] Pandas II,확률론 (0) | 2021.01.28 |
[Day8] Pandas I,딥러닝 학습방법 이해하기 (0) | 2021.01.27 |