2020-08-19 23:02:33

텐서(tensor)는 행렬이라고 생각해도 무방할 것 같습니다. 파이토치로 텐서를 생성할 때 정수를 행렬의 요소로 담으려면 torch.IntTensor를, 실수를 행렬의 요소로 담으려면 torch.FloatTensor 또는 torch.DoubleTensor를 사용할 수 있습니다[1].

 

오늘은 1차원 텐서, 2차원 텐서, 3차원 텐서를 차례로 생성해보도록 하겠습니다.

 

1차원 텐서

먼저 저는 정수를 요소로 하는 1차원 텐서를 생성하겠습니다.  

 

 

텐서의 차원은 x.dim()으로 확인이 가능하고, 크기는 x.shape로 확인할 수 있습니다. 다음과 같이 말이죠. 

 

 

1차원 텐서이므로 차원으로는 1이 나왔고, 요소가 5개인 1차원 텐서이므로 크기로 5가 출력이 되었습니다. 

 

2차원 텐서

이번에는 실수를 요소로 하는 2차원 텐서를 만들어보겠습니다. 

 

 

보시다시피 차원이 2이고, 크기는 2 x 3인 텐서가 생성되었습니다. 

 

3차원 텐서

이번에는 3차원 텐서를 생성해보겠습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
= torch.IntTensor(
   [
   [[00000],
   [5050505050],
   [100100100100100],
   [150150150150150],
   [00000]],
   
   [[1010101010],
   [6060606060],
   [110110110110110],
   [160160160160160],
   [00000]],
   
   [[2020202020],
   [7070707070],
   [120120120120120],
   [170170170170170],
   [250250250250250]],
   ]
   )
 
print(z)
cs

 

 

조금 복잡해보이죠. 그렇게 보일 뿐입니다. 마찬가지로 이 텐서의 차원과 크기를 확인해보겠습니다. 

 

1
2
print(z.dim())
print(z.shape)
cs

 

 

3차원, 3 x 5 x 5 크기의 텐서라는 것을 알 수 있습니다.

 

3차원 텐서, 즉 3차원 행렬은 왠지 RGB 컬러 이미지를 표현해낼 수 있을 것 같지 않나요? 그래서 생성한 3차원 텐서를 한번 display해보도록 하겠습니다. plt.imshow()로 display가 가능하게 하려면 permute 메서드를 이용해서 크기를 5 x 5 x 3으로 바꿔줘야 합니다. 그러면 display가 가능합니다. 

 

1
2
3
4
5
6
7
z1 = z.permute(120)
 
print(z1.dim())
print(z1.shape)
 
import matplotlib.pyplot as plt
plt.imshow(z1)
cs

 

 

예상대로 3차원 텐서는 컬러 이미지의 형태로 보여질 수 있습니다. 

 

 

<참고자료>

[1] https://pytorch.org/docs/stable/tensors.html, PyTorch, "TORCH.TENSOR"

[2] https://wikidocs.net/52460, PyTorch로 시작하는 딥 러닝 입문, "02. 텐서 조작하기(Tensor Manipulation) 1"

[3] https://stackoverflow.com/questions/53623472/how-do-i-display-a-single-image-in-pytorch/53633017, stackoverflow, "How do I display a single image in PyTorch?"