하루 하루

펭귄브로의 3분 딥러닝 파이토치맛_1일차 본문

IT/Artificial intelligence

펭귄브로의 3분 딥러닝 파이토치맛_1일차

san_deul 2020. 4. 16. 16:23

 

파이토치 :딥러닝 프레임워크로 쉽게 GPU를 활용해서 인공신경망을 만들어 학습시킬 수 있도록 돕는다.

ANN

#1 텐서의 차원

import torch 
x = torch.tensor([[1,2,3],[4,5,6],[7,8,9]]) 
x = torch.unsqueeze(x,0) 
x = torch.squeeze(x,0) 
print("size ", x.size) 
print("shape", x.shape) 
print("랭크", x.ndimension())

torch.unsqueeze() , torch.squeeze() , x.view 는 텐서의 원소 수를 유지하면서 모양과 차원을 바꿈

그래서 만약 원소 수와 다르게 모양이나 차원을 바꾸려고 하면 error가 발생한다.

 

#2 행렬의 연산

import torch 
w = torch.randn(5,3,dtype = torch.float) 
x = torch.tensor([[1.0,2.0],[3.0,4.0],[5.0,6.0]]) 
b = torch.randn(5,2,dtype = torch.float) 
wx = torch.mm(w,x) 
result = wx + b

 

# Autograd

경사하강법 : 예측 결과와 데이터의 정답의 오차를 표현한 함수f(x) 가 있을 때, f'(x)의 값을 통해서 오차의 값이 최소인 위치를 찾는 것

파이토치는 Autograd는 미분 계산을 자동화해서 경사하강법을 쉽게 구한다.

 

import torch 
w = torch.tensor(1.0,requires_grad = True) 
# requires_grad = True 이면 Autograd 계산 시 w 미분 값을 w.grad에 저장 
a = w*2 
l = a**2 + a 
l.backward() 
print('l을 w로 미분한 값은 {}'.format(w.grad))

 

#오염된 이미지를 복원

 

weird_function(원본이미지 ) = 오염된 이미지 일 때,

오염된 이미지와 weird_function( ) 으로 원본이미지 추출

-> random_tensor를  weird_function(random_tensor) = 오염된 이미지 일 때까지 생성

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

경사하강법을 20,000번 반복해서 얻은 이미지

 

 

for i in range(0,20000):
    random_tensor.requires_grad_(True)
    hypothesis = weird_function(random_tensor)
    loss = distance_loss(hypothesis, broken_image)
    loss.backward()
    with torch.no_grad(): 
        random_tensor = random_tensor-lr *random_tensor.grad

 

# 분류 모델 구현하기 

 

더보기

1. 라이브러리 추가

- > torch, numpy, sklearn , matplotlib,  torch.nn.functional

 

2. Data set 생성

 

 -> sklearn의 make_blobs() 함수 이용 

 

3. 생성된 데이터셋 시각화 

 

-> matplotlib 을 이용해서 시각화 

 

4. 데이터 셋을 파이토치 tensor로 변환 

 

5. 신경망 모델 정의 

 

6. 신경망 모델 생성 및 관련 변수와 알고리즘 정의

 

7. 학습 전 모델 성능 평가

 

8. 신경망 학습

 

9. 학습 후 모델 성능 평가

 

10. 학습된 가중치 저장

 

11. 저장된 가중치를 불러와 새로운 모델에 적용 ( 전이 학습 ) 

Comments