본문 바로가기
Python Library/PyTorch

[PyTorch] 텐서 속성 (Attribute) / 연산 (Operation)

by goatlab 2022. 1. 13.
728x90
반응형
SMALL

속성 (Attribute)

 

tensor = torch.rand(3,4)

print(f"Shape of tensor: {tensor.shape}")
print(f"Datatype of tensor: {tensor.dtype}")
print(f"Device tensor is stored on: {tensor.device}")
Out:

Shape of tensor: torch.Size([3, 4])
Datatype of tensor: torch.float32
Device tensor is stored on: cpu

 

tensor의 속성은 텐서의 모양 (shape), 자료형 (datatype) 및 어느 장치에 저장되는지를 나타낸다.

 

연산 (Operation)

 

전치 (transposing), 인덱싱 (indexing), 슬라이싱 (slicing), 수학 계산, 선형 대수, 임의 샘플링 (random sampling) 등, 100가지 이상의 tensor 연산들을 여기 에서 확인할 수 있다. 각 연산들은 CPU보다 빠른 GPU에서 실행할 수 있다.

 

기본적으로 tensor는 CPU에 생성된다. to 메소드를 사용하면 GPU의 가용성 (availability)을 확인한 뒤 GPU로 tensor를 명시적으로 이동할 수 있다. 장치들 간에 큰 tensor들을 복사하는 것은 시간과 메모리 측면에서 비용이 많이든다.

 

# GPU가 존재하면 tensor를 이동
if torch.cuda.is_available():
    tensor = tensor.to('cuda')
tensor = torch.ones(4, 4) # indexing and slicing
print('First row: ', tensor[0])
print('First column: ', tensor[:, 0])
print('Last column:', tensor[..., -1])
tensor[:,1] = 0
print(tensor)
Out:

First row:  tensor([1., 1., 1., 1.])
First column:  tensor([1., 1., 1., 1.])
Last column: tensor([1., 1., 1., 1.])
tensor([[1., 0., 1., 1.],
        [1., 0., 1., 1.],
        [1., 0., 1., 1.],
        [1., 0., 1., 1.]])
a = torch.FloatTensor([[1, 2],
                       [3, 4]])
b = torch.FloatTensor([[1, 2],
                       [1, 2]])

c = torch.matmul(a, b)
c
tensor([[ 3.,  6.],
        [ 7., 14.]])

 

tensor 합치기

 

torch.cat 을 사용하여 주어진 차원에 따라 일련의 tensor를 연결할 수 있다.

 

t1 = torch.cat([tensor, tensor, tensor], dim=1)
print(t1)
Out:

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

 

산술 연산 (Arithmetic operations)

 

# 두 tensor 간의 행렬 곱 (matrix multiplication)을 계산한다. y1, y2, y3은 모두 같은 값을 갖는다.
y1 = tensor @ tensor.T
y2 = tensor.matmul(tensor.T)

y3 = torch.rand_like(tensor)
torch.matmul(tensor, tensor.T, out=y3)


# 요소별 곱 (element-wise product)을 계산한다. z1, z2, z3는 모두 같은 값을 갖는다.
z1 = tensor * tensor
z2 = tensor.mul(tensor)

z3 = torch.rand_like(tensor)
torch.mul(tensor, tensor, out=z3)

 

단일 요소 (single-element) tensor

 

tensor의 모든 값을 하나로 집계 (aggregate)하여 요소가 하나인 tensor의 경우, item() 을 사용하여 python 숫자 값으로 변환할 수 있다.

 

agg = tensor.sum()
agg_item = agg.item()
print(agg_item, type(agg_item))
Out:

12.0 <class 'float'>

 

바꿔치기 (in-place) 연산

 

연산 결과를 피연산자 (operand)에 저장하는 연산을 바꿔치기 연산이라고 부르며, "_" 접미사를 갖는다. 예를들어, x.copy_(y) 나 x.t_() 는 x를 변경한다.

 

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

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.]])

 

https://tutorials.pytorch.kr/beginner/basics/tensorqs_tutorial.html

 

텐서(Tensor) — PyTorch Tutorials 1.10.0+cu102 documentation

Note Click here to download the full example code 파이토치(PyTorch) 기본 익히기 || 빠른 시작 || 텐서(Tensor) || Dataset과 Dataloader || 변형(Transform) || 신경망 모델 구성하기 || Autograd || 최적화(Optimization) || 모델 저

tutorials.pytorch.kr

 

728x90
반응형
LIST

'Python Library > PyTorch' 카테고리의 다른 글

[PyTorch] 변형 (Transform)  (0) 2022.01.13
[PyTorch] DATASET / DATALOADER  (0) 2022.01.13
[PyTorch] NumPy 변환 (Bridge)  (0) 2022.01.13
[PyTorch] 텐서 (Tensor)  (0) 2022.01.13
파이토치 (PyTorch)  (0) 2022.01.13