필요 모듈 설정

import numpy as np
import torch

텐서 타입 지정

Torch 데이터 선언 시, 사용할 수 있는 데이터 타입은 

  32-bit floating Point : FloatTensor

  64-bit floating Point : DoubleTensor

  16-bit floating Point : HalfTensor

  8-bit integer : ByteTensor(unsigned), CharTensor(signed)

  16-bit integer : ShortTensor

  32-bit integer : IntTensor

  64-bit integer : LongTensor

으로 선언을 할 수 있습니다.

보통, 계산을 하기 위한 데이터들에는 FloatTensor를 사용하고 Int형 숫자를 사용할 때는 LongTensor 사용하며, True/False 사용 시, ByteTensor를 사용합니다.

np_array = np.array([0., 1., 2., 3.])
float_torch = torch.FloatTensor(np_array)
double_torch = torch.DoubleTensor(np_array)
long_torch = torch.LongTensor(np_array)
int_torch = torch.IntTensor(np_array)
bool_torch = torch.ByteTensor([True, False])
print(float_torch)
print(double_torch)
print(long_torch)
print(int_torch)
print(bool_torch)
tensor([0., 1., 2., 3.])
tensor([0., 1., 2., 3.], dtype=torch.float64)
tensor([0, 1, 2, 3])
tensor([0, 1, 2, 3], dtype=torch.int32)
tensor([1, 0], dtype=torch.uint8)

덧셈(+) 및 뺄셈(-)

tc1 = torch.FloatTensor([1.,2.])
tc2 = torch.FloatTensor([3.,4.])
tc3 = torch.FloatTensor([5.])
tc4 = torch.FloatTensor([[6.],[7.]])
print(tc1)
print(tc2)
print(tc3)
print(tc4)
tensor([1., 2.])
tensor([3., 4.])
tensor([5.])
tensor([[6.],
        [7.]])
print(tc1 + tc2) # 같은 차원 (vector + vector)
print(tc1 + tc3) # vector + scalar
print(tc1 + tc4) # (2 x 1) vector + (1 x 2) vector
print("---------------------")
print(tc1.add(tc2)) # 같은 차원 (vector + vector)
print(tc1.add(tc3)) # vector + scalar
print(tc1.add(tc4)) # (2 x 1) vector + (1 x 2) vector

다음과 같이 + 기호를 사용하여도 되고, add 함수를 사용해도 됩니다.

다른 차원 계산시 벡터를 맞춘 후에 계산을 합니다.

tensor([4., 6.])
tensor([6., 7.])
tensor([[7., 8.],
        [8., 9.]])
---------------------
tensor([4., 6.])
tensor([6., 7.])
tensor([[7., 8.],
        [8., 9.]])

뺄셈은 +대신 -사용, 혹은 add 대신 sub

실습은 패스!

tc_2d = torch.FloatTensor([[1., 2.], [3., 4.]])
print(tc_2d)
tensor([[1., 2.],
        [3., 4.]])
print(tc_2d.sum())
print(tc_2d.sum(dim=0))
print(tc_2d.sum(dim=1))

첫 번째 : 모든 원소들의 합을 구한다.

두 번째 : dim=0 -> 세로 획을 그어서 각각 더하고 계산

세 번째 : dim=1 -> 가로 획을 그어서 각각 더하고 계산

tensor(10.)
tensor([4., 6.])
tensor([3., 7.])

곱셈(X)

덧셈과 작동 원리는 같습니다.

tc1 = torch.FloatTensor([1.,2.])
tc2 = torch.FloatTensor([3.,4.])
tc3 = torch.FloatTensor([5.])
tc4 = torch.FloatTensor([[6.],[7.]])
print(tc1)
print(tc2)
print(tc3)
print(tc4)
tensor([1., 2.])
tensor([3., 4.])
tensor([5.])
tensor([[6.],
        [7.]])
print(tc1 * tc2) # 같은 차원 (vector + vector)
print(tc1 * tc3) # vector + scalar
print(tc1 * tc4) # (2 x 1) vector + (1 x 2) vector
print("---------------------")
print(tc1.mul(tc2)) # 같은 차원 (vector + vector)
print(tc1.mul(tc3)) # vector + scalar
print(tc1.mul(tc4)) # (2 x 1) vector + (1 x 2) vector
tensor([3., 8.])
tensor([ 5., 10.])
tensor([[ 6., 12.],
        [ 7., 14.]])
---------------------
tensor([3., 8.])
tensor([ 5., 10.])
tensor([[ 6., 12.],
        [ 7., 14.]])

평균(Mean) (/)

tc1 = torch.FloatTensor([1,2])
tc2 = torch.FloatTensor([3,4])
tc3 = torch.FloatTensor([5])
tc4 = torch.FloatTensor([[6],[7]])
print(tc1.mean())
print(tc2.mean())
print(tc3.mean())
print(tc4.mean())
tensor(1.5000)
tensor(3.5000)
tensor(5.)
tensor(6.5000)
tc_2d = torch.FloatTensor([[1., 2.], [3., 4.]])
print(tc_2d.mean())
print(tc_2d.mean(dim=0))
print(tc_2d.mean(dim=1))

첫 번째 : 모든 원소들의 평균을 구한다.

두 번째 : dim=0 -> 세로 획을 그어서 각각 더하고 평균 계산

세 번째 : dim=1 -> 가로 획을 그어서 각각 더하고 평균 계산

tensor(2.5000)
tensor([2., 3.])
tensor([1.5000, 3.5000])
반응형

+ Recent posts