Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

AI study/๋”ฅ๋Ÿฌ๋‹ ํ”„๋ ˆ์ž„์›Œํฌ

[Pytorch] Colab์— Pytorch ์„ค์น˜ํ•˜๊ธฐ / ํ…์„œ ์ƒ์„ฑํ•˜๊ธฐ

๊ฐ์ž ๐Ÿฅ” 2021. 7. 16. 08:59
๋ฐ˜์‘ํ˜•

-- ๋ณธ ํฌ์ŠคํŒ…์€ ํŒŒ์ดํ† ์น˜๋กœ ๋ฐฐ์šฐ๋Š” ์ž์—ฐ์–ด ์ฒ˜๋ฆฌ (ํ•œ๋น›๋ฏธ๋””์–ด) ์ฑ…์„ ์ฐธ๊ณ ํ•ด์„œ ์ž‘์„ฑ๋œ ๊ธ€์ž…๋‹ˆ๋‹ค.

 

1. Colab์œผ๋กœ ํŒŒ์ดํ† ์น˜ ์ด์šฉํ•˜๊ธฐ

https://pytorch.org/

 

PyTorch

An open source machine learning framework that accelerates the path from research prototyping to production deployment.

pytorch.org

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))

 

๋ฐ˜์‘ํ˜•