우선, 해당 포스트는 Stanford University School of Engineering의 CS231n 강의자료와 모두를 위한 딥러닝 시즌2의 자료를 기본으로 하여 정리한 내용임을 밝힙니다.



Type casting

### Type casting
lt = torch.LongTensor([1, 2, 3, 4])
print(lt)

print(lt.float())

우선 LongTensor lt를 만들어준다. lt.float()라는 간단한 함수를 통하여 LongTensor lt를 FlaotTensor로 변환할 수 있다.


bt = torch.ByteTensor([True, False, False, True])
print(bt)

print(bt.long())
print(bt.float())

PyTorch에서 사용하는 Boolean Type의 Tensor는 ByteTensor라고 한다. 이 ByteTensor 또한 .long(), .float()와 같은 함수를 통하여 long, float의 자료형을 가지는 Tensor로 변환시킬 수 있다.



Ones/Zeros

### ones, zeros
x = torch.FloatTensor([[0, 1, 2], [2, 1, 0]])
print(x)

print(torch.ones_like(x))
print(torch.zeros_like(x))

np.ones(), np.zeros(), np.ones_like(), np.zeros_like()와 거의 비슷한 기능을 하는 함수라고 생각하면 된다.

다만 torch.ones_like()와 torch.zeros_like()는 device 지정 또한 같게 만들어준다는 점에서 다른 점을 가지고 있다. cpu/gpu tensor, 혹은 multi-gpu를 사용할 경우 몇 번 gpu의 tensor인지 까지도 같게 선언해준다.



One-hot encoding

### One-hot encoding
lt = torch.LongTensor([[0], [1], [2], [0]])
print(lt)
lt.shape

one_hot = torch.zeros(4, 3) # batch_size = 4, classes = 3
one_hot

one_hot.scatter_(1, lt, 1)
print(one_hot)

torch.zeros와 scatter function을 함께 사용하여 간단하게 위와 같이 one-hot encoding 또한 해줄 수 있다.



In-place Operation

### In-place Operation
x = torch.FloatTensor([[1, 2], [3, 4]])

print(x.mul(2.))
print(x)

Tensor의 연산 결과를 메모리에 새로 선언하지 않고, 기존의 Tensor에 수정해주고 싶을 때 사용하는 함수이다.

일반적인 multiplication 함수인 .mul()함수를 사용했을 때에는 연산 이후에 x를 살펴보아도 연산 전과 똑같은 결과를 return해 준다는 것을 알 수 있다.

print(x.mul_(2.))
print(x)

반면 “ _ “, 즉 In-place operation을 사용한 multiplication 함수인 .mul_()를 사용했을 때에는 연산 이후에 x가 연산 결과로 바뀌어 있는 것을 확인할 수 있다.



Reference

CS231n, Stanford University School of Engineering

모두를 위한 딥러닝 시즌2