TensorFlow๊ฐ ๊ตฌ๊ธ์์ ๋จธ์ ๋ฌ๋์ ์ํด์ ์ ๊ณตํ๋ ์คํ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋ฏ์ด PyTorch ๋ํ FaceBook์์ ์ ๊ณตํ๋ Deep Learning์ ์ง์ํ๊ธฐ์ํ ์คํ์์ค ํ๋ซํผ์ด๋ค.
TensorFlow ๋ PyTorch์์ Tensor ๋ผ๋ ์ฉ์ด๊ฐ ๋์ค๋๋ฐ ํ ์๋ NumPy ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ง์ํ๋ ์ด๋ ์ด๊ฐ ๋งคํธ๋ฆญ์ค๋ ๋ฒกํฐ ๋ณํ ๊ณ์ฐ์ ์ฌ์ฉ๋ ์ ์์ง๋ง ๋ณด๋ค ๋ ๋จธ์ ๋ฌ๋์ ํนํํ ๋ฆฌ์คํธํ ๋ฐ์ดํฐ๋ก์ Classification์ ์ํ ๋ณํ์ ํตํด์๋ ๊ณ ์ ํ ๋ฐ์ดํฐ์ ์ฑ๊ฒฉ์ ์ ์งํ๋ ํน๋ณํ ๋ฐ์ดํฐ๋ก ๋ณด๋ฉด ๋ ๊ฒ์ด๋ค.
์ผ๋ฐ์ ์ผ๋ก TensorFlow๋ฅผ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ณผ์ ์์๋ NumPy ํ ์ด๋ ์ด ๋ฐ์ดํฐ์ Tensor ๋ฐ์ดํฐ๋ค์ด ์์ฌ์ ๋ํ๋์ง๋ง ๊ฐ ๋ฐ์ดํฐ๋ค์ ํน์ฑ์ด ์ด๋ ์ด๋ ๋๋ ํ ์๋์ ๋ฐ๋ผ์ ์ ์ฉํด์ผ ํ ์ปดํจํ ์ฐ์ฐ ๋ช ๋ น๋ค์ด ์๋ก ๋ค๋ฅผ ์๋ฐ์ ์๋ค.
ํนํ PyTorch๋ ๊ฐ๊ธ์ NumPy ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ง์์ ๋ฒ์ด๋ Deep Learning์ด๋ผ๋ ์ง ๋๋ GPU์ ์ํ ๊ณ ์ ์ฐ์ฐ์ ๋์ฑ ํธ๋ฆฌํ๊ฒ ํ ์ ์๋๋ก ๊ธฐ์กด์ TensorFlow์๋ ์ฐจ๋ณํ๋ ํ ์ ์ฐ์ฐ ์ฒด๊ณ๋ฅผ ์ง์ํ๊ณ ์๋ค.
๋ง์ Deep Learnig ๋ฌธ์ ๋ค์ด ์ด๋ฏธ TensorFlow ๋ Keras ๋๋ Scikit-learn ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ํด๊ฒฐ์ด ๋์ด ์์ง๋ง 2018๋ ๊ฒฝ๋ถํฐ๋ ์๋๊ฐ ์๋์ธ ๋งํผ GPU ๋์ ์ด ๋์ด๋๊ณ ์์ผ๋ฉฐ ๋จธ์ ๋ฌ๋์ ์์ญ๋ Deep Learning ๊ณผ Transfer Learning ์ ํฌํจํ์ฌ ํ๋๋๊ณ ์๋ ์ค์ด๋ค. ํนํ Transfer Learning ๋ฌธ์ ๋ ์๊ธํ ํด๊ฒฐ์ด ํ์ํ ๋์ด์ผ ํ ์ฅ๋ฒฝ์ผ๋ก์ ํ์คํ ์๊ณ ๋ฆฌ๋ฌ์ ์ถํ์ด ์์ด์ผ ํ ๋ถ์ผ์ด์ง๋ง ํ์ค์ ์ผ๋ก ๊ทธ๋ด๋ฏํ ์๋ฃจ์ ์ด ๋ณด์ด์ง ์๋ ์ํฉ์ด๋ค.
PyTorch๋ฅผ ์กฐ๊ธ ์ ๋ฌธํด ๋ณด๋ฉด TensorFlow ์ ๋ฌด์จ ์ ์ด ๋ค๋ฅธ์ง ์ ํํ๊ฒ ์๊ธฐ๋ ์ด๋ ต์ง๋ง ์ ์ด๋ ์ ๊ณตํ๋ ํํ ๋ฆฌ์ผ ์์ ๋ค๋ง ๋ด๋ ๊ธฐ์กด์ ์ด๋ณด์ ์ธ ๋จธ์ ๋ฌ๋ ๋จ๊ณ๋ฅผ ํ์ฉ ๋ฐ์ด ๋์ด 2019๋ ์์ ์์๋ ์ฝ์ฌ๋ฆฌ ํด๊ฒฐํ๊ธฐ ์ด๋ ค์ด ๋ฌธ์ ๋ค๋ก๋ถํฐ ์์ํ๋ ๊ฒ์ผ๋ก ๋ณด์ ๋จธ์ ๋ฌ๋์ ์๋ก์ด ์๋ ์ด ์์๋๋ ๋ฏํ๋ค. ํ์ง๋ง ๋ฑ ๋ถ๋ฌ์ง๊ฒ ๋ฌด์ด๋ผ ํํํ๊ธฐ ์ฝ์ง ์์ผ๋ฏ๋ก PyTorch์์ ์ ๊ณตํ๋ ์์ ๋ค ์ญ๋ ต์ ํตํด ๊ทธ ํน์ฑ์ ์์๋๊ฐ๋ ๊ฒ์ด ์ข์ ๋ฏํ๋ค. ์์ธ๋ฌ ์ด๋ฏธ ๊ตฌ๊ธ Colabo์์ GPU ์ฐ์ฐ ์๋น์ค๋ฅผ ๋ฌด๋ฃ๋ก ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ PyTorch๋ฅผ ์์ ์์ฌ๋ก ์ตํ๋๋ฐ ํฐ ๋์์ด ๋ ๊ฒ์ด๋ค.
NumPy ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋์ฒดํ ์ ์๋ torch ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋งคํธ๋ฆญ์ค์ ํ ์ ์ฌ์ฉ๋ฒ์ ์์๋ณด์. ์ฌ๊ธฐ์ ๋ถํฐ๋ ์๋์ฝ๋ค์ ๋ณ๋๋ก ์ค์น๋ torch ๊ฐ์ํ๊ฒฝ์์ ์์ ํ๊ฑฐ๋ ์๋๋ฉด Colabo์์ ์์ ํ๋ฉด ๋๋ค. ๋จ ์๋์ฝ๋ค์ ์ค์นํ๋ TensorFlow ๊ฐ์ํ๊ฒฝ์์ torch ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชจ๋์ ๋ถ๋ฌ ์ฌ์ฉํ ์๋ ์์์ผ๋ Colabo์์๋ torch๋ฅผ ์ฌ์ฉํ๋ TensorFlow๋ฅผ ๋ถ๋ฌ ์ฌ์ฉํ๋ ๋ฌธ์ ๊ฐ ๋์ง ์๋ ๊ฒ ๊ฐ์ผ๋ ์ฐธ์กฐํ๊ธฐ ๋ฐ๋๋ค.
PyTorch ๊ธฐ๋ณธ ์ฐ์ฐ ํํ ๋ฆฌ์ผ
torch.rand(n,m)๋ ๋ฆฌ์คํธํ ๋งคํธ๋ฆญ์ค์ ๋๋ค number๋ฅผ ์ฑ์ ์ด๊ธฐํ ์ํจ๋ค. torch.empty(n,m)์ ๋ฆฌ์คํธํ ๋งคํธ๋ฆญ์ค๋ฅผ ๋น์ฐ์ง๋ง ๋ค์ฌ๋ค๋ณด๋ฉด ๋ง ๊ทธ๋๋ก ๋น์์ง ๊ฒ์ ์๋๊ณ ์ด๋ค ์๊ฐ ๋ค์ด ์๋ค. ๋ฐ๋ฉด์ torch.zeros(n,m)์ ์ฌ์ฉํด์ผ ๋ฆฌ์คํธํ๋งคํธ๋ฆญ์ค๋ฅผ 0.0 ์ผ๋ก ์ฑ์ธ ์ ์๋ค.
์ค์ ๊ฐ๋ค์ torch.tensor() ๋ช ๋ น์ผ๋ก ํ ์ํ ํ์. ์์ธ๋ฌ ์ด ๋ช ๋ น์ methodํํ์ฌ ์ ์ฉํด ๋ณด์. ํํ ๋ฆฌ์ผ์ ์๋ ๊ฐ๋จํ ์์ ๋ค์ธ๋ฐ PyTorch ์ฌ์ดํธ์ ๋ณ๋๋ก ๋ช ๋ น๋ค์ ์ ๋ฆฌํ ๋ฆฌ์คํธ๋ ๋ฐ๋ก ์๋๋ฏํ๋ฉฐ TensorFlow ์ ๋น์ทํ ๊ฐ๋ ์ผ๋ก ์ ์ฉํ๋ฉด ๋ ๊ฒ์ด๋ค.
ํ ์ x์ ์ฌ์ด์ฆ๋ฅผ ์ถ๋ ฅํด๋ณด์. ์ถ๋ ฅ ๊ฒฐ๊ณผ torch.Size([4,2])๋ ํํ(tuple)์ด๋ฏ๋ก ํํ ์ฐ์ฐ ๋ฒ์น์ ๋ฐ๋ฅธ๋ค. ์ฐธ๊ณ ๋ก NumPy ์๋ ์ด๋ ์ด ์ฌ์ด์ฆ๋ฅผ ์์๋ณด๋ ๋ช ๋ น์ด ์๋ค.
torch ํ ์๋์ด ์ง์ ์ ์ธ ๋ง์ ์ฐ์ฐ์ด๋ torch ๋ง์ ๋ช ๋ น์ ์ฌ์ฉํ torch ํ ์๋๋ค์ ์ฐ์ฐ์ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ค๋ค. torch ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ถ๋ฌ์จ ์ํ์์ ์ฌ์ฉํ๋ ํ์ด์ torch ํ ์ ์ฐ์ฐ๋ print ๋ช ๋ น ๋ด์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฏํ๋ค.
Torch ํ ์ NumPy ์ด๋ ์ด ๋ณํ
torchํ ์๋์์ ํ์์ NumPy ์ด๋ ์ด๋ก ๋ณํ์ด ํ์์ ์ด๋ฉฐ ๊ทธ ๋ฐ๋๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค. ํนํ matplot ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ทธ๋ํฝ ์ฒ๋ฆฌํ๋ ค๋ฉด torch ํ ์์ NumPy ์ด๋ ์ด๋ก ๋ณํ์ ํ์์ ์ด๋ค. ์๋๋ torch ํ ์์ NumPy ๋ณํ ๋ช ๋ น ์ฌ๋ก์ด๋ค.
๋ฐ๋ฉด์ NumPy ์ด๋ ์ด๋ก๋ถํฐ torch ํ ์๋ก์ ๋ณํ๋ ์๋์ ๊ฐ์ด ๊ฐ๋ฅํ๋ค.
์ด๋ฏธ TensorFlow๋ฅผ ๋ง๋ฆฌ ์ ํด ๋ณด์ ๋ถ๋ค์ ์ ์๊ธฐ์ ๋ด์ฉ์ด PyTorch ๋จธ์ ๋ฌ๋์์ ์ค์ํ์ง ์ดํด๊ฐ ๊ฐ ๊ฒ์ผ๋ก ๋ณธ๋ค. ๊ทธ ์ธ์๋ PyTorch ํน์ ์ ๋ฌธ๋ฒ์ด ๋ง์ด ์์ ์ ์๊ฒ ์ง๋ง ํ์ํ ๋ ์ฐพ์๋ณด๋ฉด ๋ ๋ฏํ๋ค.
์ฌ๊ธฐ ์๊ฐํ ๋ด์ฉ์ ์๋ url ์ฃผ์์ ์๋ฌธ ๋ด์ฉ์ ์ฐธ์กฐํด์ ๋ณต์ฌ ํด๋ค ๊ตฌ๊ธ Colabo์ ์คํํด ๋ณด๋ฉด ์ข์ ๊ฒ์ด๋ค.