코딩걸음마

[딥러닝] Pytorch의 기초 본문

딥러닝_Pytorch

[딥러닝] Pytorch의 기초

코딩걸음마 2022. 6. 23. 13:48
728x90

1. Pytorch의 Tensor Allocation

import torch

#실수 tensor 생성
ft = torch.FloatTensor([[1, 2],
                        [3, 4]])

#정수 tensor 생성
lt = torch.LongTensor([[1, 2],
                       [3, 4]])

#byte tensor 생성 (0과 1로 구성)
bt = torch.ByteTensor([[1, 0],
                       [0, 1]])


#garbage tensor 임의의 값을 포함하는(실수) 텐서 생성
x = torch.FloatTensor(10, 5) #(행, 열)

output------------------------------------------------------------
#tensor([[2.7444e+20, 2.8298e+20, 1.1289e+27, 3.4271e-12, 4.5144e+27],
#        [1.8515e+28, 1.9364e+26, 1.7738e+22, 1.2123e+04, 7.1846e+22],
#        [2.4176e-12, 7.5555e+31, 7.4415e+28, 1.8465e+25, 2.6289e-15],
#        [7.0367e+22, 3.7181e-14, 1.6109e-19, 1.8888e+31, 6.6660e-33],
#        [1.9431e-19, 1.8987e+28, 7.1061e+31, 4.2964e+24, 1.7442e+28],
#        [1.7444e+28, 6.9776e+22, 1.6404e-34, 4.4894e+21, 2.9781e+35],
#        [1.7369e+19, 1.0899e+27, 1.4328e-19, 1.8918e+23, 7.1443e+31],
#        [1.5039e+25, 2.0193e-19, 6.2609e+22, 4.7428e+30, 2.8298e+20],
#        [3.0304e+35, 7.3968e+20, 1.7841e+25, 4.4644e+30, 2.7198e+23],
#        [5.0944e-14, 2.8298e+20, 3.0304e+35, 7.2251e+28, 2.7368e+30]])

2 . Pytorch 와 Numpy의  관계 (Pytorch ≒Numpy?)

Pytorch의 장점을 소개하는 글을 보면 Pytorch가 Numpy와 비슷하다는 말을 자주 듣는다.

기본 연산이 매우 유사하기 때문이다. 기본형만 봐도 그렇다.

예시)

numpy 에서 array를 생성할때  np.array([1 , 2 ])

pytorch에서 tensor를 생성할때 torch.FloatTensor([ 1, 2 ]) 

구조가 거의 똑같다고 보면된다.

또한 numpy와의 호환성은 또 하나의 장점이다.

다음 예시는 np.array를 torch로 바꾸는 코드이다.

import numpy
import torch

#np.array 생성
x = np.array([[1, 2],
              [3, 4]])
              
#np.array 로부터 torch로 변환
x = torch.from_numpy(x)
print(x, type(x))

물론 torch에서 np.array로도 변환이 가능하다.

x = x.numpy()
print(x, type(x))

3. 기초 함수 모음

type 변경 코드

ft = torch.FloatTensor([[1, 2],
                        [3, 4]])
                        
#정수 tensor로 변환                        
ft.long()

#실수 tensor로 변환
ft.float()

 

 

 

tensor는 다차원을 넘나들기에 한눈에 보기 쉽지 않다.

x = torch.FloatTensor([[[1, 2],
                        [3, 4]],
                       [[5, 6],
                        [7, 8]],
                       [[9, 10],
                        [11, 12]],
                       [[13, 14],
                        [15, 16]]])

다음은 tensor의 크기와 차원정보를 간단히 알려주는 코드이다.

print(x.size())
print(x.shape)


#output--------------------------------------------------------
#torch.Size([4, 2, 2])
#torch.Size([4, 2, 2])

(4,2,2)라는 결과값을 볼수 있는데 이는 (1차원 원소 개수,  2차원 원소 개수,  3차원 원소 개수.....)를 뜻한다.

 

다음은 차원의 개수를 알려주는 코드이다. 

print(x.dim())
print(len(x.size()))

dim이라는 코드로 바로 호출할수 있고, x.size() 로 차원을 표현하는 tuple의 길이를 출력하는 방식으로 호출할 수 있다.

 

다음은 해당 차원의 원소의 개수를 출력하는 코드이다. 

print(x.size(0))
print(x.shape[0])

0 은 인덱스를 의미하면 1번째 원소를 뜻한다. 파이썬이므로 역시 -1은 마지막 원소를 뜻한다.

728x90
Comments