안녕하세요, 여행벌입니다.
오늘은 Pytorch 기본 연산들에 대해서 배워보도록 하겠습니다.
Pytorch library를 설치하지 못하신 분은 아래 포스팅을 먼저 읽어주세요!
https://travelbeeee.tistory.com/75
이 포스팅을 읽으시는 분들이 Pytorch 라이브러리를 이용해서
손쉽게 딥러닝을 구현할 수 있도록 최대한 세세하게 포스팅을 해보도록 하겠습니다!
1. Tensor 기본 연산 명령어
파이토치는 데이터를 추상화하는 Tensor와 Variable을 제공합니다.
그중 Tensor는 numpy 배열과 유사해서 유용하게 사용할 수 있습니다.
Tensor와 Variable 타입 모두 GPU에서 동작해 'GPU의 빠른 연산력을 사용할 수 있다.'는 장점이 있다고 합니다!
그러면 여러 함수들을 익혀볼까요?
● torch.Tensor() : tensor 배열을 생성한다. numpy 배열을 input으로 받으면 tensor 배열로 변환해준다.
● torch.randn() : 평균 0, 분산 1인 정규 분포를 따라서 tensor 배열을 생성한다.
● torch.add(x,y) : tensor 배열 x, y를 더해준다.
● torch.add(x, y, out = result) : tensor 배열 x, y를 더해 result tensor 배열에 저장한다.
● y.add(x) : tensor 배열 y 에 x를 더한 값을 y에 in_place 하게 저장한다.
● x + y : numpy 배열처럼 tensor 배열 x, y를 더한다.
● x - y : numpy 배열처럼 tensor 배열 x, y를 뺀다.
● x * y : numpy 배열처럼 tensor 배열 x, y를 행렬 곱을 한다.
● .size() : tensor 배열의 크기를 알려준다.
import numpy as np
import torch
# 1번 코드
x = torch.Tensor(5,3) # 5 x 3 tensor 배열을 만든다.
print(x)
# 2번 코드
y = np.random.rand(5,3) # 5 x 3 numpy 배열을 만든다.
print(y)
# 3번 코드 중요!
z = torch.Tensor(y) # numpy 배열 y를 tensor 배열로 바꿔 저장한다.
print(z)
print(type(z))
먼저 numpy 와 torch library를 import 하겠습니다. 1번 코드를 보시면, numpy 배열과 비슷하게 tensor 배열을 만들 수 있습니다. 위에서 tensor 타입은 numpy와 비슷하다고 했는데, 3번 코드를 보시면 numpy 배열인
y를 tensor 배열로 쉽게 변환할 수 있는 것을 확인할 수 있습니다.
출력 :
tensor([[0.0000, 0.0000, 0.0000],
[0.0000, 0.0000, 0.0000],
[0.0000, 0.0000, 0.0000],
[0.0000, 0.0000, 0.0000],
[0.0000, 0.0000, 0.0000]])
[[0.67086163 0.55784783 0.62186057]
[0.99621408 0.86104033 0.17540402]
[0.22081897 0.53235119 0.6920162 ]
[0.02901596 0.3410925 0.69009763]
[0.62706006 0.16814722 0.5602715 ]]
tensor([[0.6709, 0.5578, 0.6219],
[0.9962, 0.8610, 0.1754],
[0.2208, 0.5324, 0.6920],
[0.0290, 0.3411, 0.6901],
[0.6271, 0.1681, 0.5603]])
<class 'torch.Tensor'>
z에 numpy 배열이 tensor 배열로 바뀐 후 저장된 것을 확인할 수 있습니다.
import torch
x = torch.rand(5,3)
print(x)
y = torch.rand(5,3)
print(y)
print(x+y)
print(torch.add(x,y))
result = torch.Tensor(5,3) # 결과를 담아줄 배열을 만든다.
torch.add(x,y, out = result)
print(result)
다음으로는 여러 가지 덧셈 문법에 대해서 알아보도록 하겠습니다.
numpy 배열처럼 직접 x + y를 할 수도 있고, torch.add 함수를 이용할 수도 있습니다.
torch.add 함수는 특이하게 결과값을 out을 통해 변수에 저장할 수도 있습니다.
출력 :
# print(x)
tensor([[0.1405, 0.4824, 0.5622],
[0.4702, 0.0449, 0.5176],
[0.8134, 0.2111, 0.0923],
[0.9565, 0.9365, 0.7615],
[0.1268, 0.6055, 0.6063]])
# print(y)
tensor([[0.8514, 0.3682, 0.6901],
[0.9142, 0.6101, 0.8050],
[0.0158, 0.1671, 0.3655],
[0.9922, 0.4498, 0.1291],
[0.3218, 0.4852, 0.7165]])
# print(x+y)
tensor([[0.9919, 0.8506, 1.2523],
[1.3843, 0.6550, 1.3226],
[0.8291, 0.3782, 0.4578],
[1.9488, 1.3863, 0.8907],
[0.4486, 1.0906, 1.3228]])
# print(tensor.add(x,y))
tensor([[0.9919, 0.8506, 1.2523],
[1.3843, 0.6550, 1.3226],
[0.8291, 0.3782, 0.4578],
[1.9488, 1.3863, 0.8907],
[0.4486, 1.0906, 1.3228]])
# print(result)
tensor([[0.9919, 0.8506, 1.2523],
[1.3843, 0.6550, 1.3226],
[0.8291, 0.3782, 0.4578],
[1.9488, 1.3863, 0.8907],
[0.4486, 1.0906, 1.3228]])
또, 다음과 같이 in_place하게 덧셈을 진행할 수도 있습니다.
y.add(x) # y 배열에 x 배열을 더해서 y 배열에 다시 저장.
print(y)
출력 :
# print(y)
tensor([[0.9919, 0.8506, 1.2523],
[1.3843, 0.6550, 1.3226],
[0.8291, 0.3782, 0.4578],
[1.9488, 1.3863, 0.8907],
[0.4486, 1.0906, 1.3228]])
배열의 크기를 알아볼 수도 있습니다.
print(x.size())
print(y.size())
출력 :
torch.Size([5, 3])
torch.Size([5, 3])
오늘은 여기까지만 다뤄보고,
다음 포스팅 때 다른 명령어들을 알아보겠습니다!
'Others' 카테고리의 다른 글
[한국지능시스템학회 2019 추계학술대회] 논문 준비과정(2) (0) | 2019.12.03 |
---|---|
[한국지능시스템학회 2019 추계학술대회] 논문 준비과정(1) (0) | 2019.11.18 |
[차근차근Pytorch] Windows10 환경설정하기 (0) | 2019.09.20 |
[Ubuntu] Anaconda(아나콘다) 설치하기 (0) | 2019.08.07 |
[Django] Anaconda를 이용한 Django 시작하기 (1) | 2019.05.31 |