- ν μνλ‘μ°μ ν¨κ» λ¨Έμ λ¬λ, λ₯λ¬λμμ κ°μ₯ λ리 μ¬μ©λλ νλ μμν¬
- μ΄κΈ°μλ TorchλΌλ μ΄λ¦μΌλ‘ LuaμΈμ΄ κΈ°λ°μΌλ‘ λ§λ€μ΄μ‘μΌλ, νμ΄μ¬ κΈ°λ°μΌλ‘ λ³κ²½ν κ²μ΄ νμ΄ν μΉ
- λ΄μλνκ΅μ νμ΄μ€λΆ(λ©κ°)μ΄ κ³΅λμΌλ‘ κ°λ°νμκ³ , νμ¬ κ°μ₯ λμ€μ μ΄κ³ μ¬μ©μκ° λ§μ λ¨Έμ λ¬λ, λ₯λ¬λ νλ μμν¬

πΉ λͺ¨λ μν¬νΈ
import torch
print(torch.__version__) # λ²μ
νλμ μμλ₯Ό μλ―Έ
var1 = torch.tensor([10]) # μ€μΉΌλΌ
var1
> tensor([10])
type(var1)
torch.Tensor
var2 = torch.tensor([10.5]) # λ€μν μλ£ν μ¬μ© κ°λ₯
var2
> tensor([10.5000])
# λ μ€μΉΌλΌμ μ¬μΉ μ°μ°
print(var1 + var2)
print(var1 - var2)
print(var1 * var2)
print(var1 / var2)
> tensor([20.5000])
> tensor([-0.5000])
> tensor([105.])
> tensor([0.9524])
μμκ° λ κ° μ΄μ λμ΄λ κ²½μ°
vec1 = torch.tensor([1, 2, 3])
vec1
> tensor([1, 2, 3])
vec2 = torch.tensor([1.4, 2.5, 3.3])
vec2
> tensor([1.4000, 2.5000, 3.3000])
# λ 벑ν°μ μ¬μΉ μ°μ° (κ°μ ν¬μ§μ
λΌλ¦¬ κ³μ°λ¨)
print(vec1 + vec2)
print(vec1 - vec2)
print(vec1 * vec2)
print(vec1 / vec2)
> tensor([2.4000, 4.5000, 6.3000])
> tensor([-0.4000, -0.5000, -0.3000])
> tensor([1.4000, 5.0000, 9.9000])
> tensor([0.7143, 0.8000, 0.9091])
vec3 = torch.tensor([5, 10])
vec3
> tensor([ 5, 10])
vec1 + vec3
> RuntimeError: The size of tensor a (3) must match the size of tensor b (2) at non-singleton dimension 0
2κ° μ΄μμ 벑ν°κ°μ κ°μ§κ³ λ§λ€μ΄μ§ κ°μΌλ‘, ν΄κ³Ό μ΄μ κ°λ μ κ°μ§ λ°μ΄ν°λ€μ λμ΄
mat1 = torch.tensor([[1, 2], [3, 4]])
mat1
> tensor([[1, 2],
[3, 4]])
mat2 = torch.tensor([[7, 8], [9, 10]])
mat2
> tensor([[ 7, 8],
[ 9, 10]])
# λ νλ ¬μ μ¬μΉμ°μ°
print(mat1 + mat2)
print(mat1 - mat2)
print(mat1 * mat2)
print(mat1 / mat2)
> tensor([[ 8, 10],
[12, 14]])
> tensor([[-6, -6],
[-6, -6]])
> tensor([[ 7, 16],
[27, 40]])
> tensor([[0.1429, 0.2500],
[0.3333, 0.4000]])
- λ€μμ νλ ¬μ΄ λͺ¨μ΄λ©΄ ν μ
- λ°°μ΄μ΄λ νλ ¬κ³Ό λ§€μ° μ μ¬ν νΉμ μλ£κ΅¬μ‘°
- νμ΄ν μΉλ ν μλ₯Ό μ¬μ©νμ¬ λͺ¨λΈμ μ λ ₯κ³Ό μΆλ ₯, λͺ¨λΈμ λ§€κ°λ³μλ€μ μ²λ¦¬
tensor1 = torch.tensor([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
tensor1
> tensor([[[1, 2],
[3, 4]],
[[5, 6],
[7, 8]]])
tensor2 = torch.tensor([[[9, 10], [11, 12]], [[13, 14], [15, 16]]])
tensor2
# λ ν
μμ μ¬μΉ μ°μ°
print(tensor1 + tensor1)
print(tensor1 - tensor1)
print(tensor1 * tensor1)
print(tensor1 / tensor1)
> tensor([[[ 2, 4],
[ 6, 8]],
[[10, 12],
[14, 16]]])
> tensor([[[0, 0],
[0, 0]],
[[0, 0],
[0, 0]]])
> tensor([[[ 1, 4],
[ 9, 16]],
[[25, 36],
[49, 64]]])
> tensor([[[1., 1.],
[1., 1.]],
[[1., 1.],
[1., 1.]]])
# ν¨μλ₯Ό μ΄μ©ν μ¬μΉ μ°μ°
print(torch.add(tensor1, tensor2))
print(torch.subtract(tensor1, tensor2))
print(torch.multiply(tensor1, tensor2))
print(torch.divide(tensor1, tensor2))
print(torch.matmul(tensor1, tensor2)) # νλ ¬κ³±
> tensor([[[10, 12],
[14, 16]],
[[18, 20],
[22, 24]]])
> tensor([[[-8, -8],
[-8, -8]],
[[-8, -8],
[-8, -8]]])
> tensor([[[ 9, 20],
[ 33, 48]],
[[ 65, 84],
[105, 128]]])
> tensor([[[0.1111, 0.2000],
[0.2727, 0.3333]],
[[0.3846, 0.4286],
[0.4667, 0.5000]]])
> tensor([[[ 31, 34],
[ 71, 78]],
[[155, 166],
[211, 226]]])
print(tensor1.add_(tensor2)) # tensor1μ κ²°κ³Όλ₯Ό λ€μ μ μ₯
print(tensor1.subtract_(tensor2))
> tensor([[[10, 12],
[14, 16]],
[[18, 20],
[22, 24]]])
> tensor([[[1, 2],
[3, 4]],
[[5, 6],
[7, 8]]])
data = [[1, 2], [3, 4]]
data
> [[1, 2], [3, 4]]
data_tensor = torch.tensor(data)
data_tensor
> tensor([[1, 2],
[3, 4]])
import numpy as np
ndarray = np.array(data_tensor)
ndarray
> array([[1, 2],
[3, 4]])
data_tensor = torch.tensor(ndarray)
data_tensor
> tensor([[1, 2],
[3, 4]])
a = torch.ones(2, 3) # μμκ° λͺ¨λ 1μΈ 2ν 3μ΄μ§λ¦¬ νλ ¬ λ§λ¦
a
> tensor([[1., 1., 1.],
[1., 1., 1.]])
b = torch.zeros(3, 4) # μμκ° λͺ¨λ 0μΈ 3ν 4μ΄μ§λ¦¬ νλ ¬ λ§λ¦
b
> tensor([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
c = torch.full((3, 4), 7) # μμκ° λͺ¨λ 7μΈ 3*4 νλ ¬
c
> tensor([[7, 7, 7, 7],
[7, 7, 7, 7],
[7, 7, 7, 7]])
d = torch.empty(2, 3) # 2*3 νλ ¬μ μλ―Έμλ κ°
d
> tensor([[ 0.0000e+00, 0.0000e+00, -8.1644e+17],
[ 3.1483e-41, -1.2856e+17, 3.1483e-41]])
e = torch.eye(5) # 5*5 λ¨μνλ ¬
print(e)
> tensor([[1., 0., 0., 0., 0.],
[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.]])
f = torch.arange(10) # 0λΆν° 9
f
> tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
g = torch.rand(2, 3) # 2*3 λλ€κ°
g
> tensor([[0.2585, 0.7093, 0.5408],
[0.2508, 0.8948, 0.3658]])
h = torch.randn(2, 3) # νκ· μ΄ 0μ΄κ³ , νμ€νΈμ°¨κ° 1μΈ μ κ·λΆν¬μμ 무μμ μνλ§
h
> tensor([[ 0.4006, -0.1566, 1.3604],
[ 0.1733, 0.8811, -1.5512]])
i = torch.arange(16).reshape(2, 2, 4) # 2ν 4μ΄μ§λ¦¬ 2κ° (a, b, c -> bν cμ΄μ§λ¦¬ aκ°)
i, i.shape
> (tensor([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11],
[12, 13, 14, 15]]]),
torch.Size([2, 2, 4]))
# permute(): μ°¨μμ μ§μ ν μΈλ±μ€λ‘ λ³ν
# i.shape = ([2, 2, 4])
j = i.permute((2, 1, 0)) # [2, 2, 4] -> [4, 2, 2]
j, j.shape
> (tensor([[[ 0, 8],
[ 4, 12]],
[[ 1, 9],
[ 5, 13]],
[[ 2, 10],
[ 6, 14]],
[[ 3, 11],
[ 7, 15]]]),
torch.Size([4, 2, 2]))
a = torch.arange(1, 13).reshape(3, 4)
a
> tensor([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
a[1]
> tensor([5, 6, 7, 8])
a[0, -1]
> tensor(4)
a[1:-1]
> tensor([[5, 6, 7, 8]])
a[:2, 2:]
> tensor([[3, 4],
[7, 8]])
μ½λ©μμ device λ³κ²½νλ λ²:
μλ¨ λ©λ΄ -> λ°νμ -> λ°νμ μ νλ³κ²½ -> νλμ¨μ΄ κ°μκΈ°λ₯Ό GPUλ‘€ λ³κ²½ -> μ μ₯ -> μΈμ λ€μ μμ λ° λͺ¨λ μ€ν