Tensor allocation

  • FloatTensor: 실수

  • LongTensor: 정수 값 이라고 생각하면 편하다, 주로 인덱스 값을 담기 위해 쓰인다.

  • ByteTensor: 0과 1값을 담을 때 사용한다.

  • BoolTensor: True와 False를 담을 때 사용한다.

[코드]

import torch

#----- FloatTensor
ft = torch.FloatTensor([[1, 2],
                        [3, 4]])
print("FloatTensor:\n{}\n".format(ft))

#----- LongTensor
lt = torch.LongTensor([[1, 2],
                        [3, 4]])
print("LongTensor:\n{}\n".format(lt))

#----- ByteTensor
bt = torch.ByteTensor([[1, 0],
                        [0, 1]])
print("ByteTensor:\n{}\n".format(bt))

#----- BoolTensor
boolt = torch.BoolTensor([[1, 0],
                          [0, 1]])
print("BoolTensor:\n{}\n".format(boolt))

[결과]

FloatTensor:
tensor([[1., 2.],
        [3., 4.]])

LongTensor:
tensor([[1, 2],
        [3, 4]])

ByteTensor:
tensor([[1, 0],
        [0, 1]], dtype=torch.uint8)

BoolTensor:
tensor([[ True, False],
        [False,  True]])

Tensor and Numpy Compatibility

  • Numpy와 Tensor 사이의 자유로운 호환이 가능하다.

  • from_numpy(x): numpy -> tensor 변환

  • .numpy(): tensor -> numpy 변환

[코드]

import torch
import numpy as np 

#----- numpy array 정의
x = np.array([[1, 2],
              [3, 4]])
print(x, type(x), "\n")

#----- numpy -> tensor
y = torch.from_numpy(x)
print(y, type(y), "\n")

#----- tensor -> numpy
z = y.numpy()
print(z, type(z), "\n")

[결과]

[[1 2]
 [3 4]] <class 'numpy.ndarray'> 

tensor([[1, 2],
        [3, 4]]) <class 'torch.Tensor'> 

[[1 2]
 [3 4]] <class 'numpy.ndarray'> 

Type casting

  • tensor의 type을 쉽게 변환할 수 있다.

  • .long(), .float(),.byte(), .bool() 사용

[코드]

print("FloatTensor -> LongTensor: \n{}\n".format(ft.long()))

print("LongTensor -> FloatTensor: \n{}\n".format(lt.float()))

print("FloatTensor-> ByteTensor: \n{}\n".format(torch.FloatTensor([1, 0]).byte()))

print("FloatTensor-> ByteTensor: \n{}\n".format(torch.FloatTensor([1, 0]).bool()))

[결과]

FloatTensor -> LongTensor: 
tensor([[1, 2],
        [3, 4]])

LongTensor -> FloatTensor: 
tensor([[1., 2.],
        [3., 4.]])

FloatTensor-> ByteTensor: 
tensor([1, 0], dtype=torch.uint8)

FloatTensor-> ByteTensor: 
tensor([ True, False])

Get shape

  • 다음 두 가지 방법을 통해 shape를 얻을 수 있다.
  • .size(), .shape

[코드]

x = torch.FloatTensor([[[1, 2],
                        [3, 4]],
                       [[5, 6],
                        [7, 8]],
                       [[9, 10],
                        [11, 12]]])
print(x.size())
print(x.shape)

[결과]

torch.Size([3, 2, 2])
torch.Size([3, 2, 2])

[코드]

#----- 0 번째 차원의 element 갯수
print(x.size(0))
print(x.shape[0])

#----- 마지막 차원의 element 갯수
print()
print(x.size(-1))
print(x.shape[-1])

[결과]

3
3

2
2

Get number of dimensions

  • 다음 두 가지 방법을 통해 차원의 갯수를 얻을 수 있다
  • .dim(), len(.size())

[코드]

print(x.dim())
print(len(x.size()))

[결과]

3
3

이 포스팅은 패스트캠퍼스 김기현의 딥러닝 유치원 강의 기반으로 작성되었다.