딥러닝_torch를 사용해보자

용권순·2021년 1월 11일
0

딥러닝

목록 보기
2/5
post-thumbnail

개요

저번시간에 anaconda를 사용해서, torch를 설치하고, jupyter notebook을 사용해봤다. 그럼 이제 torch를 본격적으로 사용해보자.

Pytorch

torch란 무엇인가?

  • torch란 facebook에서 제공하는 딥러닝 도구로서, numpy와 효율적인 연동을 지원하는 편리한 도구이다.
  • 구글에서 만든 tensorflow나 pytorch나 기본적인 data structure은 tensor이다.

    tensor란 2차원 이상의 array이며, matrix, vector의 일반화된 객체이다.

    • 일반화 되었다는 것은 무슨 의미일까?
      • vector는 1차원 tensor이다.
      • matrix는 2차원 tensor이다.
      • 색을 나타내는 RGB는 3차원 tensor이다. 사진출처1

Version확인

우선 pytorch를 사용하기 위해서 import를 해보자

import torch 
print(torch.__version__)
1.7.1

필자의 torch는 1.7.1 version이다. version이 다르면 메소드가 안되는 경우도 있으니 주의하길 바란다.

생성

torch.tensor((data)): tensor로 만들어 준다.

V_data = [1.,2.,3.] 
V = torch.tensor(T_data)
print(V) 
tensor([1., 2., 3.])

T_data를 [1., 2., 3.]의 float형태의 vector로 만들어주었다. 이제 T에다가 torch.tensor()를 사용해 vector를 tensor로 만들어 준 것.


※ torch가 업데이트 되면서 torch.tensor(data)를 사용해도 error가 나지 않지만,torch의 버전에 따라 torch.tensor((data))를 해야하는 경우도 있다고 하니 주의하기 바란다.

V2 = torch.tensor((T_data))
print(V2)
tensor([1., 2., 3.])

결과가 같음을 확인 할 수 있다.


matrix의 tensor생성 역시 vector와 같다.

M_data = [[1., 2., 3.], [4., 5., 6]]
M = torch.tensor(M_data)
print(M)
tensor([[1., 2., 3.],
        [4., 5., 6.]])

슬라이싱,인덱스

tensor의 슬라이싱과 인덱스 접근은 python과 다르지 않다.

print("T ="T)
print('T[0] = ',T[0])
print('M =',M)
print("M[0] =",M[0])
print("M[0][0]= ",M[0][0])
print("M[:,0] = ",M[:,0]) # 슬라이싱
V = tensor([1., 2., 3.])
V[0] =  tensor([[1., 2.],
        [3., 4.]])
M = tensor([[1., 2., 3.],
        [4., 5., 6.]])
M[0] = tensor([1., 2., 3.])
M[0][0]=  tensor(1.)
M[:,0]= tensor([1., 4.])

데이터 타입

tensor의 기본적인 타입은 float으로 되어있어, torch를 출력하면 torch의 데이터만 출력되지만, dtype을 int, double로 바꾸면 datatype이 같이 출력된다.

x_data =torch.tensor([1.,2.,3.,],dtype = torch.double)
print(x_data)
y_data =torch.tensor([1.,2.,3.,],dtype = torch.int)
print(y_data)
tensor([1., 2., 3.], dtype=torch.float64)
tensor([1, 2, 3], dtype=torch.int32)

Gaussinas N(0,1)생성

torch.randn(size,size) 사이즈 만큼의 tensor를 0~1사이의 값을 랜덤하게 생성한다. 가우시안 분포인 만큼 평균과 표준편차를 이용해 분포를 변경할 수 있다.

x = torch.randn((3, 4, 5))# 4행 5열의 matrix를 3개 만들었다.
print(x)
tensor([[[-0.4329, -0.8261, -0.3230, -0.2012, -0.7572],
         [ 0.9558,  0.1524, -0.5267, -0.7010,  1.6860],
         [-0.0171, -0.6956, -0.5280,  0.0354, -0.7516],
         [ 1.0376,  0.3869, -1.2719,  1.0490,  0.8589]],
        [[-0.5772, -0.4624,  0.3307,  0.1433,  1.5560],
         [ 0.4705,  1.7702, -0.6031,  1.9666, -0.0286],
         [-0.0192, -0.2696,  0.5941, -0.8741, -0.5719],
         [-1.4852,  1.0875,  0.9100, -0.4243, -0.7704]],
        [[-2.3253, -0.2038,  0.1531,  0.4596, -0.5290],
         [-0.5955,  1.5410, -0.7018, -1.0801, -0.0078],
         [-0.3605,  0.1488,  0.5377, -1.2628, -0.0755],
         [-1.9379, -0.5651,  0.4143,  0.2677,  0.8293]]])

tensor연산

tensor의 연산은 numpy의 array연산과 비슷하다.

x = torch.tensor([1., 2., 3.])
y = torch.tensor([4., 5., 6.])
z = x + y
print(z)
tensor([5., 7., 9.])

tensor도 numpy의 np.sum(array,axis)을 지원한다.

a= torch.tensor([[1.,2.,3.],[4.,5.,6.,]])
print(a)
print(a.sum()) #tensor의 전부를 합쳤다.
print(a.sum(axis=0))# 열 방향으로 합침
print(a.sum(axis=1)) # 행 방향으로 합침
print(torch.sum(a))
print(torch.sum(a,axis=0))
print(torch.sum(a,axis=1))
tensor([[1., 2., 3.],
        [4., 5., 6.]])
tensor(21.)
tensor([5., 7., 9.])
tensor([ 6., 15.])
tensor(21.)
tensor([5., 7., 9.])
tensor([ 6., 15.])
profile
수학계산학부 석사생입니다.

0개의 댓글