728x90
반응형

Tensor 연산

전치행렬, 인덱싱, 슬라이싱, 수학 연산, 선형대수, 랜덤 샘플링 등은 https://pytorch.org/docs/stable/torch.html

에서 확인하면 된다.

 

torch — PyTorch 1.8.1 documentation

Shortcuts

pytorch.org

연산을 할 때는 GPU를 쓰는게 일반적으로 더 빠르다. 

Colab을 사용한다면, Edit>Notebook Settings에서 GPU를 할당해서 사용하면 된다. (pytorch.org 튜토리얼 상단에 링크가 있다.)

더보기

Colaboratory란 무엇인가요?

줄여서 'Colab'이라고도 하는 Colaboratory는 Google 리서치팀에서 개발한 제품입니다. Colab을 사용하면 누구나 브라우저를 통해 임의의 Python 코드를 작성하고 실행할 수 있습니다. Colab은 특히 머신러닝, 데이터 분석 및 교육에 적합합니다. 더욱 기술적으로 설명하면, Colab은 설정 없이도 사용 가능한 호스팅 Jupyter 메모장 서비스로, GPU를 포함한 컴퓨팅 리소스를 무료로 제공합니다.

출처 : research.google.com/colaboratory/faq.html

Colaboratory란 무엇인가요?

줄여서 'Colab'이라고도 하는 Colaboratory는 Google 리서치팀에서 개발한 제품입니다. Colab을 사용하면 누구나 브라우저를 통해 임의의 Python 코드를 작성하고 실행할 수 있습니다. Colab은 특히 머신러닝, 데이터 분석 및 교육에 적합합니다. 더욱 기술적으로 설명하면, Colab은 설정 없이도 사용 가능한 호스팅 Jupyter 메모장 서비스로, GPU를 포함한 컴퓨팅 리소스를 무료로 제공합니다.

출처 : research.google.com/colaboratory/faq.html

표준 NumPy 같은 인덱싱과 슬라이싱

tensor = torch.ones(4, 4)
tensor[:, 1] = 0	//모든 행의 1열을 0으로 변경
print(tensor)

out :

tensor([[1., 0., 1., 1.],
        [1., 0., 1., 1.],
        [1., 0., 1., 1.],
        [1., 0., 1., 1.]])

행렬 곱

print(f"tensor.mul(tensor) \n {tensor.mul(tensor} \n")
#Alternative syntax:
print(f"tensor * tensor \n {tensor * tensor}")

x.copy_(y), x.t_() 같이 언더바(_)가 있는 함수는 변수값(x)를 바꾼다.

In-place(제자리) 연산은 메모리를 절약하지만 직접적으로 기록을 없애기 때문에 권장하지는 않는다.

print(tensor, "\n")
tensor.add_(5)
print(tensor)

out:

t: tensor([2., 2., 2., 2., 2.])
n: [2. 2. 2. 2. 2.]
tensor([[1., 0., 1., 1.],
        [1., 0., 1., 1.],
        [1., 0., 1., 1.],
        [1., 0., 1., 1.]])

tensor([[6., 5., 6., 6.],
        [6., 5., 6., 6.],
        [6., 5., 6., 6.],
        [6., 5., 6., 6.]])

Tensor -> NumPy 배열 변환 가능

텐서와 넘파이 배열은 메모리 주소를 공유할 수 있다, 그래서 서로 변환이 가능하다.

t = torch.ones(5) // 1로 5개 채움
print(f"t: {t}")
n = t.numpy() //텐서를 numpy 배열로 변환하여 저장
print(f"n: {n}")

out:

t: tensor([1., 1., 1., 1., 1.])
n: [1. 1. 1. 1. 1.]

텐서에 변화가 생기면 Numpy 배열에도 반영된다.

t.add_(1) // t에 1씩 더함
print(f"t: {t}")
print(f"n: {n}")

out:

t: tensor([2., 2., 2., 2., 2.])
n: [2. 2. 2. 2. 2.]

Numpy 배열 -> Tensor 로도 변환 가능

728x90
반응형

'딥러닝, 머신러닝 기초 > Pytorch' 카테고리의 다른 글

Pytorch 튜토리얼 : Tensor란?  (0) 2021.04.15
728x90
반응형

Tensors 소개

파이토치에서 텐서는 모델의 파라미터(매개변수)와 모델의 입력과 출력을 인코딩하기 위해 사용한다.

 

텐서는 numpy 라이브러리의 다차원 행렬 자료구조인 ndarray와 비슷하다. 다만, 텐서는 계산량이 많아 GPU에서 계산해야한다.

import torch
import numpy as np

Tensor Initialization(초기화) 

1. 리스트 

list[]는 바로 텐서로 변환할 수 있다.

data = [[1,2],[3,4]]
x_data = torch.tensor(data)

2.배열

ndarray는 torch.from_numpy(np_array)를 통해 텐서로 변환할 수 있다.

(np.array 함수는 ndarray를 만드는 함수이다.)

np_array = np.array(data)
x_np = torch.from_numpy(np_array)

3.다른 텐서 

명시적으로 재정의하지 않는 한, 매개변수로 받은 텐서의 shape, datatype등 속성을 그대로 받는다.  

ones_like 함수 : 인자로 받은 텐서와 같은 shape의 1로 가득한 텐서로 변환

rand_like 함수 : 사이즈를 튜플로 입력하지 않고 인자텐서로 정의하고 랜덤 값 텐서로 변환

x_ones = torch.ones_like(x_data) # x_data의 속성을 물려받음
print(f"Ones Tensor: \n {x_ones} \n")

x_rand = torch.rand_like(x_data, dtype=torch.float) # 명시적으로 데이터 타입을 재정의함
print(f"Random Tensor: \n {x_rand} \n")

out:

Ones Tensor:
 tensor([[1, 1],
        [1, 1]])

Random Tensor:
 tensor([[0.2657, 0.4719],
        [0.8944, 0.3807]])

4. 랜덤 값 또는 상수 값 사용

shape은 텐서의 차원을 나타내는 행렬이다.

torch.rand(shape) 함수 : 랜덤값으로 텐서 초기화

torch.ones(shape) 함수 : 모두 1로 초기화

torch.zeros(shape) 함수 : 모두 0으로 초기화

shape = (2,3,)
rand_tensor = torch.rand(shape)
ones_tensor = torch.ones(shape)
zeros_tensor = torch.zeros(shape)

print(f"Random Tensor: \n {rand_tensor} \n")
print(f"Ones Tensor: \n {ones_tensor} \n")
print(f"Zeros Tensor: \n {zeros_tensor}")

out:

Random Tensor:
 tensor([[0.8177, 0.7039, 0.9206],
        [0.2288, 0.7906, 0.9867]])

Ones Tensor:
 tensor([[1., 1., 1.],
        [1., 1., 1.]])

Zeros Tensor:
 tensor([[0., 0., 0.],
        [0., 0., 0.]])

Tensor 속성

Tensor attributes : shape, datatype, and the device

-shape : 몇차원 배열인지

-dtype : 텐서의 데이터 타입

-device : 텐서가 저장된 장치  


 

728x90
반응형

'딥러닝, 머신러닝 기초 > Pytorch' 카테고리의 다른 글

Tensor 연산  (0) 2021.04.25

+ Recent posts