본문 바로가기
AI

[PyTorch]Tensor-part2

by Reodreamer 2022. 9. 15.
반응형

이번 포스트는 Tensor-part1에 이어지는 내용을 다루고자 한다. 

이전 포스트를 아직 확인하지 못했다면 아래의 링크로 들어가 먼저 보고 오면 더 좋을 것 같다. 

 

 

[PyTorch]Tensor-part1

텐서의 특징 텐서는 배열과 행렬과 비슷한 자료구조이다. PyTorch에서 텐서를 이용하여 입력과 출력, 그리고 모델의 파라미터를encode 한다. 텐서는 NumPy의 ndarray와 비슷하지만 한 가지 차이점이 있

dream-be.tistory.com

 

이번에는 텐서의 속성, 텐서 연산에 대해 공부해보자. 

 

텐서의 속성(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

댓글