국비지원교육/Python
pytorch 설치, numpy와 tensorflow와 비교 with google colab
HanJW96
2024. 5. 28. 11:53
- pytorch 설치 (구글코랩 기본세팅)
위 런타임 누르고 런타임 유형변경 -> GPU로 변경
셀 이라고 한다. 코드 입력하는 셀을 코드셀 이라고 함.
위나 아래쪽으로 코드셀 또는 텍스트셀을 추가할 수 있다.
이건 텍스트셀 . 나중에 .py로 변경하고 파이참으로 열면 ''' ''' 주석
즉, 여러줄 주석으로 표시되는 부분을 이걸로 만들 수 있다.
간단한 글자조정 가능.
# 붙이면 제목글자가 된다.
오른쪽에 미리보기 표시됨
!pip3 install torch
!pip3 install torchvision
실행 눌러서 파이토치 설치
- Framework Comparison (패키지 비교)
Numpy vs Tensorflow vs Pytorch
output = x * y + z
보통 AI의 연산들이 행렬끼리 곱하고 더하는 연산이 많기 때문에
행렬만들고 계산하는걸 세개의 패키지로 실험
1. Numpy
import numpy as np
from datetime import datetime
start = datetime.now()
np.random.seed(0) # 랜덤값 발생 고정시킴
N, D = 3, 4
x = np.random.randn(N, D) # 3행 4열 배열에 0 ~ 1 사이의 랜덤값 채움
y = np.random.randn(N, D) # 3행 4열 배열에 0 ~ 1 사이의 랜덤값 채움
z = np.random.randn(N, D) # 3행 4열 배열에 0 ~ 1 사이의 랜덤값 채움
a = x * y
b = a + z
c = np.sum(b)
grad_c = 1.0
grad_b = grad_c * np.ones((N,D))
grad_a = grad_b.copy()
grad_z = grad_b.copy()
grad_y = grad_a * y
grad_x = grad_a *x
print(grad_x)
print(grad_y)
print(grad_z)
print('연산 처리 시간 : ', datetime.now()- start)
numpy 연산 처리 시간 : 0.0016초
2. Tensorflow
먼저 테스트에서 사용할 tensorflow.placeholder함수는 없어졌기 때문에
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
v1로 낮추는 작업을 해야함
#import tensorflow as tf
import numpy as np #원래는 셀마다 임포트할 필요가 없음
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
from datetime import datetime
start = datetime.now()
# 실행 동작을 미리 정의해 놓음
with tf.device('/gpu:0'): # 실행시 gpu 0 사용을 지정함
x = tf.placeholder(tf.float32) # 나중에 값을 넣을 공간을 만듦
y = tf.placeholder(tf.float32)
z = tf.placeholder(tf.float32)
a = x * y
b = a + z
c = tf.reduce_sum(b)
grad_x, grad_y, grad_z = tf.gradients(c, [x,y,z])
# 준비된 공간에 값을 채우는 설정
with tf.Session() as sess:
values = {
x: np.random.randn(N, D),
y: np.random.randn(N, D),
z: np.random.randn(N, D)
}
out = sess.run([c, grad_x, grad_y, grad_y], feed_dict=values)
c_val, grad_x_val, grad_y_val, grad_z_val = out
print(grad_x_val)
print(grad_y_val)
print(grad_z_val)
print('연산 처리 시간 : ', datetime.now()- start)
Tensorflow 연산 처리 시간 : 0.0456초
? Tensorflow 공간확보 때문에 조금 느릴 수도
3. pytorch
import torch
from torch.autograd import Variable
from datetime import datetime
start = datetime.now()
# 자동 미분 계산 클래스 : autograd.Variable
x = Variable(torch.randn(N,D).cuda(), requires_grad=True)
y = Variable(torch.randn(N,D).cuda(), requires_grad=True)
z = Variable(torch.randn(N,D).cuda(), requires_grad=True)
a = x * y
b = a + z
c = torch.sum(b)
# gradient(경사도) 자동 계산 수행
# 기울기(gradient)가 1.0 이라고 가정하고 최종 값인 c 에서
# backward를 통해서 역전파를 해 줍니다.
#c.backward(gradient=torch.cuda.FloatTensor([1.0])) # GPU 버전
c.backward(gradient=torch.tensor(1, dtype=torch.float)) # CPU 버전
print(x.grad)
print(y.grad)
print(z.grad)
print('연산 처리 시간 : ', datetime.now()- start)
pytorch 연산 처리 시간 : 0.0078초
tensor 보다 코드가 간결하다.
기울기 관련 지원해주는 코드가 많음