-- ๋ณธ ํฌ์คํ ์ ํ์ดํ ์น๋ก ๋ฐฐ์ฐ๋ ์์ฐ์ด ์ฒ๋ฆฌ (ํ๋น๋ฏธ๋์ด) ์ฑ ์ ์ฐธ๊ณ ํด์ ์์ฑ๋ ๊ธ์ ๋๋ค.
1. Colab์ผ๋ก ํ์ดํ ์น ์ด์ฉํ๊ธฐ
GPU ์๋ ํ๊ฒฝ์์ ํ์ดํ ์น๋ฅผ ์ค์นํ ์๋ ์๋๊ฑธ๊น? ์๊ฐ์ด ์ด๋ฐํ์ฌ ์์ธํ ์ฐพ์๋ณด์ง ๋ชปํ์ง๋ง, ๋๋ถ๋ถ pytorch๋ gpu cudaํ๊ฒฝ์์ ์ค์น๋ฅผ ์ง์ํ๋ ๊ฒ ๊ฐ๋ค. ๋๋ ๊ทธ๋จ.. ๋ ธํธ๋ถ ์ฌ์ฉ์์ด๊ธฐ ๋๋ฌธ์ gpu๊ฐ ์์ด์ ํ๋ ์์์ด colab์ผ๋ก ํ์ดํ ์น๋ฅผ ์ด์ฉํด์ผํ๋ค.
1.1 Colab์์ ํ์ดํ ์น ์ค์นํ๊ธฐ
์ฐ์ colab์ ๋ฐํ์ ํ๊ฒฝ์ GPU๋ก ๋ณ๊ฒฝ์์ผ์ฃผ์ด์ผ ํ๋ค.
์๋จ ๋ฉ๋ด๋ฐ์์ [๋ฐํ์] - [๋ฐํ์ ์ ํ ๋ณ๊ฒฝ ] - [ํ๋์จ์ด๊ฐ์๊ธฐ๋ฅผ GPU๋ก ๋ฐ๊ฟ์ฃผ๊ธฐ] ์ด ๊ณผ์ ์ ๊ฑฐ์ณ GPUํ๊ฒฝ์ผ๋ก ๊ตฌ์ฑํด์ฃผ๊ณ , ์๋ ์ฝ๋๋ฅผ ์คํํ๋ฉด ๊ฐ๋จํ๊ฒ ์ค์น๊ฐ ์๋ฃ๋๋ค.
!pip3 install torch
!pip3 install torchvision
2. ํ์ดํ ์น์ ํ ์
ํ์ดํ ์น๋ ์คํ ์์ค์ธ ๋ฅ๋ฌ๋ ํ๋ ์์ํฌ์ด๋ค. ์ ์ ํ๋ ์์ํฌ์ธ ์จ์๋ ธ, ํ ์ํ๋ก์ฐ์ ๋ฌ๋ฆฌ ๋์ ํ๋ ์์ํฌ๋ก '๋์ ๊ณ์ฐ ๊ทธ๋ํ'๋ฅผ ๊ตฌํํ๋ค. ๋ฐ๋ผ์ ๋๋ฒ๊น ์ด ์์ฃผ ํธ๋ฆฌํ๊ณ ๋ณต์กํ ๋ชจ๋ธ์ ์์ฝ๊ฒ ๋ง๋ค ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
2.1 ์ ์ ํ๋ ์์ํฌ์ ๋์ ํ๋ ์์ํฌ?
- ์ ์ ํ๋ ์์ํฌ
ํ ์ํ๋ก์ฐ๋ฅผ ๊ณต๋ถํด๋ด์ ์๊ฒ ์ง๋ง, ํ ์ํ๋ก์ฐ์ ์จ์๋ ธ์ ๊ฐ์ ์ ์ ํ๋ ์์ํฌ๋ ๋จผ์ ๊ณ์ฐ ๊ทธ๋ํ๋ฅผ ์ ์ํ๊ณ ์ปดํ์ผํ ๋ค์ ์คํํด์ผํ๋ค. ์ด ๋ฐฉ์์ ์ ํ ์์คํ ๊ณผ ๋ชจ๋ฐ์ผ ํ๊ฒฝ์์๋ ํจ์จ์ ์ผ ์ ์์ง๋ง, ์ ๋ ฅ๋ง๋ค ๋ค๋ฅธ ๊ทธ๋ํ๊ฐ ๊ตฌํ๋์ด์ผ ํ๋ ๋ณต์กํ ์ฐ๊ตฌ, ๊ฐ๋ฐ์์๋ ๋นํจ์จ์ ์ด๋ค.
- ๋์ ํ๋ ์์ํฌ
์ฒด์ด๋, ๋ค์ด๋ท, ํ์ดํ ์น์ ๊ฐ์ ํ๋ ์์ํฌ๋ ๋์ ํ๋ ์์ํฌ๋ค. ๋์ ๊ณ์ฐ ๊ทธ๋ํ๋ฅผ ๊ตฌํํ ์ ์๋ค๋ ๋ป์ธ๋ฐ, ์คํํ ๋๋ง๋ค ๋ชจ๋ธ์ ์ปดํ์ผ ํ์ง ์์๋ ๋๋ค. ํนํ ์ ๋ ฅ๋ง๋ค ๋ค๋ฅธ ๊ทธ๋ํ ๊ตฌ์กฐ๊ฐ ๋ง๋ค์ด์ง ์ ์๋ NLP๋ชจ๋ธ์ ์์ฃผ ์ ํฉํ ํ๋ ์์ํฌ๋ผ๊ณ ๋ณผ ์ ์๋ค. -- ์ด๊ฑด ๊ธฐ์ ๋ฉด์ ์์ ์ ํ์ดํ ์น๋ฅผ ์ฌ์ฉํ๋๊ฐ? ์ ๋ํ ๋ต๋ณ์ด ๋ ๊ฒ์ด๋ค.
2.2 ํ ์
ํ์ดํ ์น๋ ํ ์ ์กฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ ๋งํผ ํ ์๊ฐ ํต์ฌ์ด ๋๋ค. ํ ์๋, '๋ค์ฐจ์ ํ ์ด๋ธ์ ๋ด์ ์ํ ๊ฐ์ฒด'๋ผ๊ณ ํ ์์๋ค.
3. ํ ์ ์์ฑ
์ด ์ฑ ์์๋ ํฌํผ ํจ์ ํ๋๋ฅผ ์์ฑํ์ฌ ํ ์์ ํํ, ํฌ๊ธฐ, ๊ฐ์ ํธํ๊ฒ ๋ณด๊ฒ๋ ๋ง๋ค์ด ๋์๋ค. ๊ธฐ์ด ๊ฐ๋ ์ ํ์คํ ์ก์๋ณด์.
3.1 ํฌํผํจ์ ์์ฑ
def describe(x):
print("ํ์
: {}".format(x.type()))
print("ํฌ๊ธฐ: {}".format(x.type()))
print("๊ฐ: {}".format(x.type()))
3.2 ํ ์ ์์ฑ
๊ธฐ๋ณธ์ ์ธ ํ ์ ์์ฑ์ ํํ๋ ์๋์ ๊ฐ๋ค.
import torch
describe(torch.Tensor(2,3))
๊ทธ๋ผ ์ด์ ๋ค์ํ ํํ๋ก ํ ์๋ฅผ ํ์ฑํด ๋ณด๊ฒ ๋ค.
3.2.1 ๋๋คํ๊ฒ ์ด๊ธฐํํ ํ ์
describe(torch.rand(2,3))
3.2.2 filled() ๋ฉ์๋ ์ฌ์ฉํ๊ธฐ
- ๋ด์ฅํจ์๋ฅผ ํ์ฉํ์ฌ ์ผ์ ๊ฐ์ผ๋ก ํ ์๋ฅผ ์ฑ์ธ ์ ์๋ค.
describe(torch.zeros(2,3))
x = torch.ones(2,3)
describe(x)
- filled() ๋ฉ์๋
fill_() ๋ฉ์๋๋ฅผ ํ์ฉํ์ฌ ํน์ ๊ฐ์ผ๋ก ํ
์๋ฅผ ์ฑ์ธ ์๋ ์๋ค.
fill_()์์ ๋ณด์ด๋ (_) ๊ฐ ์๋ ๋ฉ์๋๋ in-place ๋ฉ์๋๋ผ๊ณ ํ๊ณ , ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์๊ณ ๊ธฐ์กด์ ํ
์๊ฐ์ ๋ฐ๊พธ๋ ์ฐ์ฐ์ ์ํํ๋ค๊ณ ์๊ณ ์์ผ๋ฉด ๋๋ค. (uniform_,, ๋ฑ ๋ค์ํ๊ฒ ์ฌ์ฉ)
#(_)๊ฐ ํฌํจ๋ ๋ฉ์๋ ์ด๊ธฐ ๋๋ฌธ์, x๊ฐ์ฒด๋ฅผ ์๋กญ๊ฒ ์์ฑํ๋ ๊ฒ์ด ์๋ ํ์ฌ๊ฐ์ ๋ณ๊ฒฝํ๋ ๋ฐฉ์์ผ๋ก ์งํ๋๋ค.
x.fill_(5)
describe(x)
3.2.3 ํ์ด์ฌ ๋ฆฌ์คํธ, ๋ํ์ด๋ฅผ ํ์ฉํ ํ ์ ๋ง๋ค๊ธฐ
- ํ์ด์ฌ ๋ฆฌ์คํธ๋ฅผ ๊ฐ์ผ๋ก ํ๋ ํ ์๋ฅผ ๋ง๋ค ์ ์๋ค.
x = torch.Tensor([[1,2,3], [4,5,6]])
describe(x)
- ๋ํ์ด ๋ฐฐ์ด์ ํ์ฉํ์ฌ ํ
์๋ฅผ ๋ง๋ค ์ ์๋ค.
๋ํ์ด ๋ฐฐ์ด์ ํ์ฉํ๋ฉด ๋์ , tensor์ ํ์
์ด FloatTensor๊ฐ ์๋๋ผ DoubleTensor ๊ฐ ๋๋ค๋ ์ ์ ๊ธฐ์ตํ์. ๊ทธ ์ด์ ๋ float, double, float64์ ํฌ๊ธฐ์ ๊ด๋ จ์ด ์๋ค.
import numpy as np
npy = np.random.rand(2,3)
describe(torch.from_numpy(npy))