hye-log

[๋ถ€์ŠคํŠธ์บ ํ”„ AI Tech]WEEK 02_DAY 06 ๋ณธ๋ฌธ

Boostcourse/AI Tech 4๊ธฐ

[๋ถ€์ŠคํŠธ์บ ํ”„ AI Tech]WEEK 02_DAY 06

iihye_ 2022. 9. 26. 18:42

๐ŸŽ€ ๊ฐœ๋ณ„ํ•™์Šต


[1] Introduction to PyTorch

1. ๋”ฅ๋Ÿฌ๋‹์˜ ํ”„๋ ˆ์ž„์›Œํฌ

1) computation ๊ด€์ ์—์„œ PyTorch์™€ TensorFlow์˜ ์ฐจ์ด

- PyTorch : Define by Run

- TensorFlow : Define and Run

- ์ฐธ๊ณ  ์ž๋ฃŒ : https://datasciencecareer.wordpress.com/2020/12/09/ml03-pytorch-vs-tensorflow/

 

2. Computational Graph

1) ์—ฐ์‚ฐ ๊ณผ์ •์„ ๊ทธ๋ž˜ํ”„๋กœ ํ‘œํ˜„

2) Define and Run : ๊ทธ๋ž˜ํ”„๋ฅผ ๋จผ์ € ์ •์˜ํ•˜๊ณ  ์‹คํ–‰ ์‹œ์ ์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ด

3) Define by Run(Dynamic Computational Graph) : ์‹คํ–‰์„ ํ•˜๋ฉด์„œ ๊ทธ๋ž˜ํ”„๋ฅผ ์ƒ์„ฑํ•จ -> Pythonic Code

 

3. PyTorch

1) Numpy ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๋Š” Tensor ๊ฐ์ฒด๋กœ array  ํ‘œํ˜„

2) ์ž๋™๋ฏธ๋ถ„์„ ์ง€์›ํ•˜์—ฌ DL ์—ฐ์‚ฐ ์ง€์›

3) ๋‹ค์–‘ํ•œ ํ˜•ํƒœ์˜ DL์„ ์ง€์›ํ•˜๋Š” ํ•จ์ˆ˜, ๋ชจ๋ธ์„ ์ง€์›


[2] PyTorch Baiscs

1. Tensor

1) ๋‹ค์ฐจ์› Arrays๋ฅผ ํ‘œํ˜„ํ•˜๋Š” PyTorch ํด๋ž˜์Šค

2) numpy์˜ ndarray์™€ ๋™์ผ(TensorFlow์˜ Tensor์™€ ๋™์ผ)

 

2. view() vs. reshape()

1) tensor์˜ ๋ชจ์–‘์„ ๋ฐ”๊พธ๋Š” ํ•จ์ˆ˜

2) view() : ์›๋ณธ ๋ฐ์ดํ„ฐ์™€ ์—ฐ๊ฒฐ๋˜์–ด ๊ธฐ์กด ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด view ํ•จ์ˆ˜๋กœ ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ๋„ ๋ณ€๊ฒฝ๋จ

# tensor -> view : ์›๋ณธ ๋ฐ์ดํ„ฐ์™€ ์—ฐ๊ฒฐ
a = torch.zeros(3, 2)       # tensor([[0., 0.], [0., 0.], [0., 0.]])
b = a.view(2, 3)            # tensor([[0., 0., 0.], [0., 0., 0.]])
a.fill_(1)                  # tensor([[1., 1.], [1., 1.], [1., 1.]])

b			    # tensor([[1., 1., 1.], [1., 1., 1.]])

3) reshape() : ์›๋ณธ ๋ฐ์ดํ„ฐ์˜ ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ค์–ด ๊ธฐ์กด ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋„ reshape ํ•จ์ˆ˜๋กœ ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Œ

# tensor -> reshape : ๋ณต์‚ฌ๋ณธ์„ ๋ฐ˜์˜
a = torch.zeros(3, 2)         # tensor([[0., 0.], [0., 0.], [0., 0.]])
b = a.t().reshape(6)          # tensor([0., 0., 0., 0., 0., 0.])
a.fill_(1)                    # tensor([[1., 1.], [1., 1.], [1., 1.]])

b			      # tensor([0., 0., 0., 0., 0., 0.])

 

3. torch.squeeze() vs. torch.unsqueeze()

1) squeeze() : ์ฐจ์›์˜ ๊ฐœ์ˆ˜๊ฐ€ 1์ธ ์ฐจ์›์„ ์‚ญ์ œ

# squeeze
tensor_ex = torch.rand(size=(2, 1, 2))
print(tensor_ex.squeeze())
print(tensor_ex.squeeze().shape)        # torch.Size([2, 2])

2) unsqueeze() : ์ฐจ์›์˜ ๊ฐœ์ˆ˜๊ฐ€ 1์ธ ์ฐจ์›์„ ์ถ”๊ฐ€

# unsqueeze
tensor_ex = torch.rand(size=(2, 2))
print(tensor_ex.unsqueeze(0))
print(tensor_ex.unsqueeze(0).shape)     # torch.Size([1, 2, 2])

 

4. torch.mm() vs. torch.matmul()

1) ํ–‰๋ ฌ๊ณฑ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜

2) torch.mm() : 2์ฐจ์› ํ–‰๋ ฌ๊ณฑ์„ ๊ณ„์‚ฐ. ์ฐจ์›์ด ๋งž์•„์•ผ ํ•จ.

# Plus Case - 2์ฐจ์› ํ–‰๋ ฌ๊ณผ 2์ฐจ์› ํ–‰๋ ฌ์˜ ๊ณฑ์€ mm์œผ๋กœ ๊ณ„์‚ฐ ๊ฐ€๋Šฅ
a = torch.rand(2, 3)        # torch.Size([2, 3])
b = torch.rand(3, 1)        # torch.Size([3, 1])
a.mm(b)                     # torch.Size([2, 1])

+ torch.bmm() : 3์ฐจ์› ํ–‰๋ ฌ๊ณฑ์„ ๊ณ„์‚ฐ. ์ฐจ์›์ด ๋งž์•„์•ผ ํ•จ.

# Plus Case - 3์ฐจ์› ํ–‰๋ ฌ๊ณผ 3์ฐจ์› ํ–‰๋ ฌ์˜ ๊ณฑ์€ bmm์œผ๋กœ ๊ณ„์‚ฐ ๊ฐ€๋Šฅ
a = torch.rand(5, 2, 3)
b = torch.rand(5, 3, 2)
a.bmm(b)

3) torch.matmul() : broadcast(์ฐจ์›์ด ๋งž์ง€ ์•Š์€ ๊ฐ์ฒด๋ผ๋ฆฌ ์—ฐ์‚ฐ๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ) ์ง€์›

# Sucess Case - 3์ฐจ์› ํ–‰๋ ฌ๊ณผ 1์ฐจ์› ๋ฒกํ„ฐ์˜ ๊ณฑ์€ matmul๋กœ ๊ณ„์‚ฐ ๊ฐ€๋Šฅ(broadcasting)
a = torch.rand(5, 2, 3)     # torch.Size([5, 2, 3])
b = torch.rand(3)           # torch.Size([3])
a.matmul(b)                 # torch.Size([5, 2])

[3] PyTorch ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ์ดํ•ดํ•˜๊ธฐ

1. PyTorch Project Template

1) ์‹คํ–‰, ๋ฐ์ดํ„ฐ, ๋ชจ๋ธ, ์„ค์ •, ๋กœ๊น…, ์ง€ํ‘œ, ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ชจ๋“ˆ๋“ค์„ ๋ถ„๋ฆฌํ•˜์—ฌ ํ”„๋กœ์ ํŠธ ํ…œํ”Œ๋ฆฟํ™”

2) ์ถ”์ฒœํ•˜๋Š” repository

https://github.com/FrancescoSaverioZuppichini/PyTorch-Deep-Learning-Template

- https://github.com/PyTorchLightning/deep-learning-project-template 

- https://github.com/victoresque/pytorch-template

 

GitHub - victoresque/pytorch-template: PyTorch deep learning projects made easy.

PyTorch deep learning projects made easy. Contribute to victoresque/pytorch-template development by creating an account on GitHub.

github.com

pytorch-template/
โ”‚
โ”œโ”€โ”€ train.py - main script to start training
โ”œโ”€โ”€ test.py - evaluation of trained model
โ”‚
โ”œโ”€โ”€ config.json - holds configuration for training
โ”œโ”€โ”€ parse_config.py - class to handle config file and cli options
โ”‚
โ”œโ”€โ”€ new_project.py - initialize new project with template files
โ”‚
โ”œโ”€โ”€ base/ - abstract base classes
โ”‚   โ”œโ”€โ”€ base_data_loader.py
โ”‚   โ”œโ”€โ”€ base_model.py
โ”‚   โ””โ”€โ”€ base_trainer.py
โ”‚
โ”œโ”€โ”€ data_loader/ - anything about data loading goes here
โ”‚   โ””โ”€โ”€ data_loaders.py
โ”‚
โ”œโ”€โ”€ data/ - default directory for storing input data
โ”‚
โ”œโ”€โ”€ model/ - models, losses, and metrics
โ”‚   โ”œโ”€โ”€ model.py
โ”‚   โ”œโ”€โ”€ metric.py
โ”‚   โ””โ”€โ”€ loss.py
โ”‚
โ”œโ”€โ”€ saved/
โ”‚   โ”œโ”€โ”€ models/ - trained models are saved here
โ”‚   โ””โ”€โ”€ log/ - default logdir for tensorboard and logging output
โ”‚
โ”œโ”€โ”€ trainer/ - trainers
โ”‚   โ””โ”€โ”€ trainer.py
โ”‚
โ”œโ”€โ”€ logger/ - module for tensorboard visualization and logging
โ”‚   โ”œโ”€โ”€ visualization.py
โ”‚   โ”œโ”€โ”€ logger.py
โ”‚   โ””โ”€โ”€ logger_config.json
โ”‚  
โ””โ”€โ”€ utils/ - small utility functions
    โ”œโ”€โ”€ util.py
    โ””โ”€โ”€ ...

 


๐ŸŽ€ ์˜ค๋Š˜์˜ ํšŒ๊ณ 

์ƒˆ๋กœ์šด ํ•œ ์ฃผ, WEEK 02๊ฐ€ ์‹œ์ž‘๋˜์—ˆ๋‹ค๐ŸŽ‰ ์ด๋ฒˆ ์ฃผ์˜ ์ฃผ์ œ๋Š” PyTorch์ธ๋ฐ, ์ƒ๊ฐํ•ด๋ณด๋ฉด ์ธ๊ณต์ง€๋Šฅ์„ 2๋…„(?) ์ •๋„ ๋‹ค๋ค˜์ง€๋งŒ ์ง€๊ธˆ๊นŒ์ง€ ํŒŒ์ดํ† ์น˜์— ๋Œ€ํ•œ ๊ฐ•์˜๋Š” ๋“ค์–ด๋ณธ ์ ์ด ์—†๋Š”๊ฑฐ ๊ฐ™๋‹ค..(๊ทธ๋™์•ˆ ์–ด๋–ป๊ฒŒ ๊ฐœ๋ฐœํ•˜๊ณ  ์ฝ”๋“œ ์ง  ๊ฑธ๊นŒ... ํ•ญ์ƒ ๊ตฌ๊ธ€์‹ ๊ณผ ํ•จ๊ป˜) ๊ทธ๋ž˜์„œ ์ง€๋‚œ์ฃผ์— ๊ฐ€๋ณ๊ฒŒ ์‚ดํŽด ๋ณธ ํŒŒ์ด์ฌ๊ณผ ํ†ต๊ณ„์™€๋Š” ๋‹ฌ๋ฆฌ, ํŒŒ์ดํ† ์น˜๋Š” ์• ๋งค๋ชจํ˜ธํ•œ ๊ฐœ๋…๋“ค์„ ๋‹ค์‹œ ์ •๋ฆฌํ•˜๊ณ , ๋ˆ„๊ตฐ๊ฐ€ ๋ฌผ์–ด๋ดค์„ ๋•Œ ์™„๋ฒฝํ•˜๊ฒŒ ๋Œ€๋‹ตํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ณต๋ถ€ํ•˜๋Š” ๊ฒƒ์ด ์ด๋ฒˆ ์ฃผ์˜ ๋ชฉํ‘œ์ด๋‹ค! ํŠนํžˆ๋‚˜ view-reshape, squeeze-unsqueeze, mm-matmul์˜ ๊ฒฝ์šฐ ํ•ญ์ƒ ํ—ท๊ฐˆ๋ฆฌ๋Š” ๊ฐœ๋…์ด์˜€๋Š”๋ฐ ์ด๋ฒˆ์— ํ™•์‹คํ•˜๊ฒŒ ๊ฐœ๋…์„ ์žก๊ณ  ๊ฐ€๋Š” ๊ฑฐ ๊ฐ™์•„์„œ ์ข‹๋‹ค. ์ด๋ ‡๊ฒŒ ๋ถ€์บ  ํ†ตํ•ด์„œ ์ธ๊ณต์ง€๋Šฅ ๊ฐœ๋…์„ ํ•˜๋‚˜์”ฉ ์•Œ์•„๊ฐ€๋Š” ๊ณผ์ •์ด ์ฆ๊ฒ๋‹ค. ํ”ผ์–ด์„ธ์…˜ ๋•Œ๋Š” ์ง€๋‚œ์ฃผ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ๊ฐ•์˜ ๋ณด๊ณ  ํ—ท๊ฐˆ๋ฆฌ๋Š” ๊ฒƒ๋“ค์„ ์„œ๋กœ ๋ฌผ์–ด๋ณด๊ณ  ๋Œ€๋‹ตํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์กŒ๋‹ค. ํŒŒ์ด์ฌ๋งŒ ๋ฐฐ์šฐ๋˜ ์ง€๋‚œ์ฃผ๋ณด๋‹ค ๋‚ด์šฉ์ด ๋งŽ์•„์ ธ์„œ ์„œ๋กœ ํ•  ์ด์•ผ๊ธฐ๋“ค์ด ๋งŽ์€๋“ฏ..! ๊ธฐ๋ณธ ๊ณผ์ œ๋งŒ ๋งˆ์น˜๊ณ  ์˜ค๋Š˜ ํ•˜๋ฃจ๋ฅผ ๋งˆ๋ฌด์œผ๋ฆฌ!!๐Ÿ‘ 

728x90
Comments