반응형
이번 포스트는 Tensor-part1에 이어지는 내용을 다루고자 한다.
이전 포스트를 아직 확인하지 못했다면 아래의 링크로 들어가 먼저 보고 오면 더 좋을 것 같다.
이번에는 텐서의 속성, 텐서 연산에 대해 공부해보자.
텐서의 속성(Attribute)
텐서의 속성은 shape, dtype(데이터 타입), device와 같은 정보를 의미한다.
tensor = torch.rand(3,4)
print(f'Shape of tensor: {tensor.shape}')
print(f'Datatype of tensor: {tensor.dtype}')
print(f'Device of tensor: {tensor.device}')
Out:
Shape of tensor: torch.Size([3, 4])
Datatype of tensor: torch.float32
Device of tensor: cpu
텐서 연산
본격적으로 텐서의 연산에 대해서 알아보자. 텐서의 연산은 array 연산과 같이 매우 다양한 연산기능이 있다. 예를 들어 인덱싱, 슬라이싱과 같은 행렬조작, 선형대수, 산술연산 등을 비롯하여 더 많은 연산기능들이
있다.
기본적으로 텐서는 CPU에 생성되고 CPU 연산을 한다. 하지만, 실제로는 tensor.to() 메소드를 사용하여 GPU로 device를 변경하고 거기서 연산을 하는 것이 일반적이다. 하지만 이는 텐서를 명시적으로 이동하는 것이기
때문에 사이즈가 큰 텐서를 복사하는 것은 메모리 효율을 저하시킬 수 있다.
GPU 사용 가능 여부 확인
아래의 torch.cuda.is_available()를 이용해 연결 가능한 GPU의 유무를 확인할 수 있다.
torch.cuda.is_available()
Out:
False
현재 GPU에 연결되어 있지 않기 때문에 False를 반환한다.
텐서 조작(tensor manipulation) : indexing, slicing
tensor = torch.rand(4,4)
print(f'tensor : {tensor}')
print(f'First row : {tensor[0]}')
print(f'First column : {tensor[:,0]}')
print(f'Last column: {tensor[:,-1]}')
Out:
First row : tensor([[0.7996, 0.6974, 0.7539, 0.2423],
[0.2118, 0.4685, 0.6773, 0.7623],
[0.7063, 0.5434, 0.5680, 0.4896],
[0.4995, 0.0423, 0.9973, 0.8719]])
First row : tensor([0.7996, 0.6974, 0.7539, 0.2423])
First column : tensor([0.7996, 0.2118, 0.7063, 0.4995])
Last row : tensor([0.2423, 0.7623, 0.4896, 0.8719])
텐서 합치기
텐서들을 합칠 때는 torch.cat() 메소드를 이용한다.
tensor_cat = torch.cat([tensor,tensor2, tensor, tensor2, tensor], dim=1)
print(tensor_cat)
Out:
tensor([[1., 1., 1., 1., 0., 1., 1., 1., 1., 0., 1., 1., 1., 1.],
[1., 1., 1., 1., 0., 1., 1., 1., 1., 0., 1., 1., 1., 1.],
[1., 1., 1., 1., 0., 1., 1., 1., 1., 0., 1., 1., 1., 1.],
[1., 1., 1., 1., 0., 1., 1., 1., 1., 0., 1., 1., 1., 1.]])
산술 연산(arithmetic operation)
1. matrix multiplication
# @과 matmul 동일한 연산을 한다.
y1 = tensor @ tensor.T
y2 = tensor.matmul(tensor.T)
print(y1)
print(y2)
Out:
tensor([[4., 4., 4., 4.],
[4., 4., 4., 4.],
[4., 4., 4., 4.],
[4., 4., 4., 4.]])
tensor([[4., 4., 4., 4.],
[4., 4., 4., 4.],
[4., 4., 4., 4.],
[4., 4., 4., 4.]])
2. element-wise multiplication
# 텐서의 요소별로 곱셈(element-wise multiplication)을 한다.
t1 = tensor * tensor
t2 = tensor.mul(tensor)
print(t1)
print(t2)
Out:
tensor([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
tensor([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
이번에는 텐서를 기본적으로 다루는 법을 알아봤다. 다음은 PyTorch에서 기본적으로 제공되는 데이터 셋들과 PyTorch의 핵심 중 하나인 DataLoader와 관련된 내용을 다뤄보려고 한다.
반응형
'AI' 카테고리의 다른 글
[논문리뷰]Attention Is All You Need (1) | 2022.09.20 |
---|---|
[PyTorch]Dataset과 DataLoader (1) | 2022.09.16 |
[PyTorch]Tensor-part1 (0) | 2022.09.14 |
[Pytorch]패키지 기본구성 (0) | 2022.09.13 |
[논문리뷰]Generative Adversarial Nets (0) | 2022.09.13 |
댓글