728x90
1. 모델 생성을 위한 준비과정
Vectorization(벡터화): 입력, 가중치 값들을 벡터화해야 중복되는 연산을 막고 편하게 계산이 가능하다.
따라서 입력값이 여러개라면 기존에 벡터로 표현했던 입력벡터를 행렬로 표현할 수 있다. 예를들어, 입력값이 3개라면 사진과 같이 Input (3*2)행렬이 w (2*3)행렬과 곱해져서 L (3*3)행렬이 만들어지고 다시 w(3*3)행렬과 곱해져서 o(3*3)행렬이 된 후에 softmax함수와 cross entropy함수를 거치면 3개의 원소를 가진 벡터가 된다. 출력값인 loss는 이 3개의 원소의 평균값이 되고 loss를 0이 되도록하는 하는 것이 학습의 목표이다.
<Torch 라이브러리>
torch.autograd : 자동미분을 해주는 클래스이다.
*autograd 사용시 주의사항
- 계산과정에 있는 것들은 모두 tensor객체만 올 수 있다.
- 마지막 출력물이 스칼라일때만 자동미분이 된다.
- leaf tensor에 대해서만 미분이 가능하다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#autogradient 예시
a = torch.ones(3,requires_grad=True) #[1,1,1]
b = a+1 #[2,2,2]
c = b*b #[4,4,4]
# c.backward() 오류: 스칼라가 아니므로 자동미분 불가
d = c.sum() #12
# backward() 를 호출할 때, autograd는 이러한 변화도들을 계산하고
#이를 각 텐서의 .grad에 저장한다.
d.backward()
a.grad # [4,4,4]출력
#b.grad, c.grad, d.grad 모두 오류: leaf tensor에 대해서만 미분가능하다.
|
cs |
torch.nn
여러가지 클래스를 포함하는 인공신경망의 모델 구현을 위한 라이브러리이다. FC Layer, CNN, RNN, Transformers 등의 구조가 미리 입력되어 있다. 따라서 계산과정에 집중하지 않고 모델의 학습에 집중해서 디버깅이 가능하다.
nn라이브러리 중에서도 Module 클래스의 몇가지 메서드 를 살펴보면 다음과 같다.
- train(mode=True): w값들을 변경하면서 학습시킬때 사용한다.
- eval(): 주어진 w값들로 활용할 때 사용한다.
- cpu(), cuda(device=None): 모델을 cpu 혹은 gpu로 돌릴 것인지 결정한다.
2. 모델 생성 및 학습
모델생성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#torch.nn을 이용한 모델 생성 예시
import torch
import torch.nn as nn
class Model(nn.Module): #nn.Module을 상속받는다.
def __init__(self): #필요한 객체를 만든다.
super(Model, self).__init__()
self.fc1 = nn.Linear(784,100)
self.fc2 = nn.Linear(100,10)
self.relu = nn.ReLU()
def forward(self,x): #입력값을 받아서 출력함.
x = self.fc1(x)
x = self.relu(x)
x = self.fc2(x)
return x
|
cs |
모델학습
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#torch.nn을 이용한 모델 학습 예시
# Loss 구하기
cls_loss = nn.CrossEntropyLoss()
loss = cls_loss(outputs, label)
# 가중치 변경
learning_rate = 0.01
optimizer = optim.SGD(network.parameters(), lr=learning_rate) #파라미터: 생성된모델, 학습률
optimizer.zero_grad() #초기화
loss.backward() #미분값 구하기
optimizer.step() #가중치 변경
|
cs |
728x90
'Deep Learning' 카테고리의 다른 글
[DL] 하이퍼파라미터 튜닝 정리 (0) | 2022.05.01 |
---|---|
[DL] Gradient Descent의 문제점과 여러가지 Optimzer (0) | 2022.04.17 |
[DL] ANN 활성함수 (Activation function) 종류 (0) | 2022.04.17 |
[DL] Back-propagation과 Chain Rule (1) | 2022.04.04 |
[DL] 인공신경망에 관련된 개념 정리 (0) | 2022.03.20 |
댓글