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
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 |