sudo curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
sudo install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/
sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'
sudo apt -y install apt-transport-https
sudo apt -y update
sudo apt -y install code
wget -O - http://apt.hamonikr.org/hamonikr.key | sudo apt-key add - 
sudo bash -c "echo 'deb https://apt.hamonikr.org jin main upstream' > /etc/apt/sources.list.d/hamonikr-jin.list" 
sudo bash -c "echo 'deb-src https://apt.hamonikr.org jin main upstream' >> /etc/apt/sources.list.d/hamonikr-jin.list" 

sudo apt update 

# ํ•œ๊ธ€๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€๊ฒฝ์šฐ 
sudo apt install nimf nimf-libhangul 

# ์ผ๋ณธ์–ด, ์ค‘๊ตญ์–ด ๋“ฑ ๋‹ค๋ฅธ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€๊ฒฝ์šฐ 
sudo apt install libnimf1 nimf nimf-anthy nimf-dev nimf-libhangul nimf-m17n nimf-rime 

im-config -n nimf 
sudo reboot now

 

 

 

 

echo -n | openssl s_client -connect ์ ‘์†ํ•˜๊ณ ์žํ•˜๋Š”์ฃผ์†Œ:443 | \
  sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | \
  sudo tee -a '/usr/local/share/ca-certificates/download_01_org.crt'
sudo update-ca-certificates
# summarize history for accuracy
plt.plot(history.history['accuracy'])
plt.plot(history.history['val_accuracy'])
plt.title('model accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()
# summarize history for loss
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()

๋‹ค๋ฅธ AI์™€๋Š” ๋‹ค๋ฅด๊ฒŒ, ๋น„์ „๊ณผ ์ผ๋ถ€ ์–ธ์–ด์ชฝ์€ ํ—ค๋น„ํ•œ GPU์„œ๋ฒ„ ์‚ฌ์šฉ์„ ์š”๊ตฌํ•ด์„œ,

AI๋ฅผ ํ•™์Šตํ•˜๋‹ค๊ฐ€, ์กฐ๊ธˆ๋งŒ ๊นŠ์ด ๋“ค์–ด๊ฐ€๋ฉด ๋…ธํŠธ๋ถ์œผ๋กœ๋Š” ์–ด๋ฆผ๋„ ์—†๋Š” ์ง€๊ฒฝ์— ์ด๋ฅด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ ๋ฐ์ดํ„ฐ๋ถ„์„๊ณผ๋Š” ๋‹ฌ๋ฆฌ, ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๋Š” ์ด๋ฏธ์ง€ ํ•œ์žฅ๋งŒ ํ•˜๋”๋ผ๋„ ๋งŽ์€ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ์–ด์„œ

์ƒ๋Œ€์ ์œผ๋กœ ํ•™์Šต ๋ฐ์ดํ„ฐ์˜ ์Šค์ผ€์ผ์ด ํฌ๊ณ , ํ•™์Šต์— ํ•„์š”ํ•œ ์—ฐ์‚ฐ์˜ ๊ทœ๋ชจ๊ฐ€ ์–ด๋งˆ์–ด๋งˆ ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

[์‚ฌ์ „์กฐ๊ฑด]

๊ฐ„๋‹จํ•œ ํŒŒ์ด์ฌ,

์ฃผํ”ผํ„ฐ ๋…ธํŠธ๋ถ ์‚ฌ์ „์„ค์น˜

์‹œํ”„ํŠธํ‚ค์™€ ์—”ํŠธ๋ฅผ ๋™์‹œ์— ๋ˆ„๋ฅผ ์ˆ˜ ์žˆ๋Š” ๋‘ ์†.

 

์ž...์ด์ œ ํ•œ๋ฒˆ ํ•ด๋ณด์‹œ์ฃ .

์ด์ œ๋ถ€ํ„ฐ์˜ ๋ช…๋ น์–ด๋Š” ์ฃผํ”ผํ„ฐ ๋…ธํŠธ๋ถ์„ ์‹คํ–‰ํ•œ ์ƒํƒœ์—์„œ, ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž…๋ ฅํ•˜๋Š” ๋ช…๋ น์–ด ์ž…๋‹ˆ๋‹ค.

 

0. ๊ฐœ, ๊ณ ์–‘์ด ๋ฐ์ดํ„ฐ ์ค€๋น„

Datasets : https://www.kaggle.com/c/dogs-vs-cats/data

 

Dogs vs. Cats

Create an algorithm to distinguish dogs from cats

www.kaggle.com

์ฒจ๋ถ€ ํŒŒ์ผ์„ ๋‹ค์šด๋ฐ›์•„์„œ ์•„๋ž˜ ๊ตฌ์กฐ๋กœ ์ €์žฅ์„ ํ•ฉ๋‹ˆ๋‹ค.

(jupyter notebookํŒŒ์ผ๊ณผ ๊ฐ™์€ ๊ฒฝ๋กœ์— ์ €์žฅํ•˜์„ธ์š”)

-- data ---- train (ํ•™์Šต์„ ์œ„ํ•œ ๊ณ ์–‘์ด, ๊ฐœ์‚ฌ์ง„ 25,000์žฅ)

            |__ test1 (ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ๊ณ ์–‘์ด, ๊ฐœ ์‚ฌ์ง„ 25,000์žฅ)

 

1. ์šฐ์„  ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ ํ•ฉ๋‹ˆ๋‹ค.

keras์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ๋ณธ ๊ฒŒ์‹œํŒ ์ œ ๋‹ค๋ฅธ๊ธ€์„ ์ฝ์–ด๋ณด๋ฉด ๊ฐœ๋žต์ ์œผ๋กœ ๋‚˜์˜ต๋‹ˆ๋‹ค.

keras๋Š” ๋ฐฑ์—”๋“œ๋กœ tensorflow๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, tensorflow๊นŒ์ง€ ์ž๋™์œผ๋กœ ์„ค์น˜๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํ•™์Šต๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„(๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ๊ฐ€ ์—‘์…€๊ฐ™์€ ํ‘œ ํ˜•ํƒœ๋กœ ๊ตฌ์„ฑ)ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์—ฐ์‚ฐํ•˜๊ธฐ ์œ„ํ•œ pandas๊ฐ€ ์„ค์น˜ ๋˜์–ด์•ผ ํ•˜๊ณ ,

๋ฐฐ์—ด ์—ฐ์‚ฐ์„ ์œ„ํ•œ numpy, ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ image ํŒจํ‚ค์ง€, ๊ทธ๋ฆฌ๊ณ  ๋งคํŠธ๋ฆญ์Šค๋ฅผ ๊ทธ๋ž˜ํ”„๋กœ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•œ matplotlib,

๋งˆ์ง€๋ง‰์œผ๋กœ ์ˆ˜์น˜์—ฐ์‚ฐ์„ ์œ„ํ•œ ํŒจํ‚ค์ง€์ธ scikit-learn์„ ์„ค์น˜ ํ•ฉ๋‹ˆ๋‹ค.

 

2. warning ์ถœ๋ ฅ off

์ฃผํ”ผํ„ฐ ๋…ธํŠธ๋ถ ์…€ ์‹คํ–‰์‹œ ์ฃผํ™ฉ์ƒ‰์œผ๋กœ warning์ด ๋งŽ์ด ๋œจ๋Š”๋ฐ, ๋ณด๊ธฐ ์‹ซ์œผ๋‹ˆ ์ถœ๋ ฅํ•˜์ง€ ๋ง๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

3. ํ•„์š”ํ•œ ํŒจํ‚ค์ง€ import

๋ณธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‹คํ–‰์— ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋“ค์„ importํ•˜๊ณ ,

0๋ฒˆ์—์„œ ์••์ถ• ํ‘ผ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž˜ ์ €์žฅ ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ ํ•ฉ๋‹ˆ๋‹ค.

 

4. ๊ธ€๋กœ๋ฒŒ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธ ํ•ฉ๋‹ˆ๋‹ค.

์•ž์„œ ์••์ถ• ํ’€์–ด๋†“์€ ์ด๋ฏธ์ง€์˜ ๊ฐ€๋กœํฌ๊ธฐ, ์„ธ๋กœํฌ๊ธฐ, ์‚ฌ์ด์ฆˆ(128x128)์™€

์ฑ„๋„(์นผ๋ผ ์‚ฌ์ž”์ด๋ฏ€๋กœR, G, B์„ธ๊ฐœ)์„ ์ •์˜ ํ•ด ๋†“์Šต๋‹ˆ๋‹ค.

๋‚˜์ค‘์— convolution์—ฐ์‚ฐ ์‹œ channel์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ, ๋ฏธ๋ฆฌ ์ •์˜ํ•ด ๋†“์Šต๋‹ˆ๋‹ค.

 

5. ํŒŒ์ผ๋ช…๊ณผ ์ •๋‹ต ์„ค์ •

์••์ถ• ํ‘ผ ๋””๋ ‰ํ† ๋ฆฌ ์ค‘, train๋””๋ ‰ํ† ๋ฆฌ์—๋Š” dogxxx.jpg, catxxx.jpg๋“ฑ, ๊ฐœ์™€ ๊ณ ์–‘์ด๋ฅผ ํŒŒ์ผ ์ด๋ฆ„์œผ๋กœ ๊ตฌ๋ถ„์ง“๋„๋ก

ํŒŒ์ผ์ด ์ €์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ ๊ฐœ์— ํ•ด๋‹น๋˜๋Š” ํŒŒ์ผ๋ช…๊ณผ ์ •๋‹ต('๊ฐœ', 1)์„, ๊ทธ๋ฆฌ๊ณ  ๊ณ ์–‘์ด์— ํ•ด๋‹น๋˜๋Š” ํŒŒ์ผ๋ช…๊ณผ ์ •๋‹ต('๊ณ ์–‘์ด', 0)์„

dataframe์— ์ €์žฅํ•ด ๋†“์Šต๋‹ˆ๋‹ค.

 

6. ์ €์žฅ์ด ์ž˜ ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด ๋ด…๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์…‹์˜ ์ œ์ผ ์•ž 5๊ฐœ์™€ ์ œ์ผ ๋’ค 5๊ฐœ๋ฅผ ์ƒ˜ํ”Œ๋ง ํ•ด์„œ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค.

ํŒŒ์ผ ์ด๋ฆ„์ด ๊ณ ์–‘์ด๋กœ ์‹œ์ž‘๋œ๊ฑด category๊ฐ€ 0์œผ๋กœ,

ํŒŒ์ผ ์ด๋ฆ„์ด dog์œผ๋กœ ์‹œ์ž‘๋˜๋Š” ํŒŒ์ผ์€ category๊ฐ€ 1๋กœ ์ž˜ ์ €์žฅ์ด ๋˜์–ด ์žˆ๊ตฐ์š”. :-)

 

7. ๋ฐ์ดํ„ฐ balanceํ™•์ธ.

๋ถ„๋ฅ˜ ๋ฌธ์ œ์ด ์žˆ์–ด์„œ, ๊ฐ category๋ณ„ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ณ ๋ฃจ ๋ถ„ํฌ๊ฐ€ ๋˜์–ด ์žˆ์–ด์•ผ ํ•™์Šต์ด ์ž˜ ๋ฉ๋‹ˆ๋‹ค.

์ฆ‰, ๋ฐ์ดํ„ฐ ๋‚ด์— ๊ฐœ์™€ ๊ณ ์–‘์ด๊ฐ€ ๊ท ์ผํ•˜๊ฒŒ ๋ถ„ํฌ๊ฐ€ ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ์„ ํ•ฉ๋‹ˆ๋‹ค.

๋ณด๋‹ˆ๊นŒ, ๊ณ ๋ฅด๊ฐ€ ์ž˜ ๋ถ„ํฌ๊ฐ€ ๋˜์–ด ์žˆ๋Š”๊ฑฐ ๊ฐ™๋„ค์š”.

 

8. Sample๋ฐ์ดํ„ฐ ํ™•์ธ

๋ฐ์ดํ„ฐ ๋””๋ ‰ํ† ๋ฆฌ์ค‘ ์ž„์˜๋กœ ํ•˜๋‚˜๋ฅผ ๋ฝ‘์•„์„œ ํ™•์ธ ํ•ฉ๋‹ˆ๋‹ค.

์•„๋ฒ ...์•„๋‹ˆ, ๊ฐœ๊ฐ€ ์ž˜ ํ‘œ์‹œ ๋˜๋Š”๊ตฐ์š”.

 

9. ์‹ ๊ฒฝ๋ง ๋ชจ๋ธ ๊ตฌ์„ฑ

๋ชจ๋ธ ๊ตฌ์„ฑ์€...๊ธฐ๋ณธ์ ์ธ ๋ฃฐ์ด ์žˆ๊ธด ํ•˜์ง€๋งŒ, ์—ฌ๋Ÿฌ๋ฒˆ ๊ตฌ์กฐ๋ฅผ ๋ฐ”๊ฟ”๊ฐ€๋ฉฐ,

์ž˜ ๋งž์ถ”๋Š” ๋ชจ๋ธ์ด ๋‚˜์˜ฌ๋•Œ๊นŒ์ง€ ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚ค๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

๋ฌผ๋ก , ํ›Œ๋ฅญํ•˜์‹  ์„ํ•™๋“ค์ด ๋ฏธ๋ฆฌ ๋‹ค ํ•ด๋ณด๊ณ  ์ž˜ ๋˜๋Š” ๊ตฌ์กฐ๋ฅผ ๊ณต๊ฐœํ•ด ๋†“์€๊ฑธ ๊ฐ€์ ธ๋‹ค ์“ฐ๋Š”๊ฒŒ ์ œ์ผ ์ข‹์Šต๋‹ˆ๋‹ค.

 

์šฐ๋ฆฌ์—๊ฒ ์ข‹์€ ๊ตฌ์กฐ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•œ 100๋Œ€์ด์ƒ์˜ GPU์„œ๋ฒ„๋ฅผ ๊ฐ€์ง„ ์—ฐ๊ตฌ์‹ค์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ด์ฃ .

 

10. ์‹ ๊ฒฝ๋ง ๊ตฌ์กฐ๋ฅผ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค.

์•„๋ž˜์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ์ƒ๊ฒผ๋Š”๋ฐ, ์•ฝ ์ฒœ์ด๋ฐฑ๋งŒ๊ฐœ์˜ ํŒŒ๋ผ๋ฏธํŠธ๋ฅผ ํ•™์Šตํ•ด์•ผ ํ•˜๋Š”๊ตฐ์š”.

ํ•™์Šต๋ฐ์ดํ„ฐ(๊ฐœ, ๊ณ ์–‘์ด์‚ฌ์ง„)์ด ์ œ์ผ ์œ„๋กœ ๋“ค์–ด์™€์„œ ์ œ์ผ ์•„๋ž˜๋กœ ๋‚˜๊ฐ€๋Š” ๊ตฌ์กฐ ์ž…๋‹ˆ๋‹ค.

 

์ œ์ผ ์ฒ˜์Œ conv2d layer์˜ shape๋ฅผ ๋ณด๋ฉด (None, 126, 126, 32) ์ด๋ ‡๊ฒŒ ๋˜์–ด ์žˆ๋Š”๋ฐ,

๊ฐ€์šด๋ฐ 126, 126 ์ˆซ์ž ๋‘๊ฐœ๊ฐ€ ๋ฐ”๋กœ ์ž…๋ ฅ๋˜๋Š” ๊ฐœ, ๊ณ ์–‘์ด ์‚ฌ์ง„์˜ ๊ฐ€๋กœ, ์„ธ๋กœ ํฌ๊ธฐ ์ž…๋‹ˆ๋‹ค.

 

์ œ์ผ ์•„๋ž˜ Dense Layer์— ๋ณด๋ฉด shape์— ์ˆซ์ž 2๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด๊ฒŒ ๋ฐ”๋กœ ๊ฐœ๋ƒ ๊ณ ์–‘์ด๋ƒ ํ•˜๋Š” ๋‘๊ฐ€์ง€ ์ผ€์ด์Šค๊ฐ€

์žˆ๊ธฐ ๋•Œ๋ฌธ์— shape๊ฐ€ 2๋กœ ๋œ ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

 

11. ์ฝœ๋ฐฑ ์ •์˜

์Œ..์ฝœ๋ฐฑ์€ ๋‹ค ์•„์‹ค๊ฑฐ๊ณ ...

์šฐ์„  ์กฐ๊ธฐ์ข…๋ฃŒ(Early Stopping)์™€ ํ•™์Šต์œจ ํ•˜ํ–ฅ์กฐ์ •์„ ์œ„ํ•ด ๋‘ ์ฝœ๋ฐฑ ํด๋ž˜์Šค๋ฅผ importํ•ฉ๋‹ˆ๋‹ค.

 

12. Early Stopping ์ •์˜

Early Stopping์ด ๋ญ๋ƒ ํ•˜๋ฉด...

์ „์ฒด ๊ฐœ, ๊ณ ์–‘์ด ๋ฐ์ดํ„ฐ๊ฐ€์ง€๊ณ  ์กฐ๊ธˆ์”ฉ ๋‚˜๋ˆ ์„œ ์—ฌ๋Ÿฌ์ฐจ๋ก€ ํ•™์Šต์„ ํ•˜๋Š”๋ฐ,

์ž˜ ํ•™์Šต๋˜๋‹ค๊ฐ€ ์–ด๋Š์‹œ์  ์ง€๋‚˜๋ฉด ์ •ํ™•๋„๊ฐ€ ์˜คํžˆ๋ ค ๋–จ์–ด์ง€๋Š” case๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด๋•Œ 10๋ฒˆ๊นŒ์ง€ ์ฐธ๋‹ค๊ฐ€, 10๋ฒˆ ์ง€๋‚˜์„œ๋„ ๊ณ„์† ๋–จ์–ด์ง€๋ฉด ๊ณ ๋งŒ ํ•™์Šตํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋‚ด๋ผ๋Š” ๋ง ์ž…๋‹ˆ๋‹ค.

 

13. Learning Rate ์กฐ์ • ์ •์˜

์ด ํด๋ž˜์Šค๋Š” ํ•™์Šตํ•˜๋Š” ๋™์•ˆ ์ •ํ™•๋„๋ฅผ ์ž˜ ๊ฐ์‹œํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€ ์–ด๋Š ๊ธฐ์ค€์ด ๋˜๋ฉด ํ•™์Šต์œจ์„ ์กฐ์ •ํ•ด์ฃผ๋Š” ํด๋ž˜์Šค ์ž…๋‹ˆ๋‹ค.

 

14. callback ์„ค์ •

์•ž์„œ ์ •์˜ํ•œ ๋‘ ์ฝœ๋ฐฑ ํด๋ž˜์Šค๋ฅผ callbacks์— ๋‹ด์•„ ๋†“์Šต๋‹ˆ๋‹ค.

15. ๊ฐœ, ๊ณ ์–‘์ด๋ฅผ string์œผ๋กœ ๋ณ€ํ™˜

์•„๊นŒ ํŒŒ์ผ์ด๋ฆ„๊ณผ ๊ฐœ์ธ์ง€ ๊ณ ์–‘์ด ์ธ์ง€๋ฅผ ์ €์žฅํ•ด๋†“์€ dataframe์—์„œ

category๋ฅผ ๊ฐœ์ธ ๊ฒฝ์šฐ 1๋กœ, ๊ณ ์–‘์ด ์ธ ๊ฒฝ์šฐ 0์œผ๋กœ ๋ณ€๊ฒฝํ•ด ์ค๋‹ˆ๋‹ค.

๋‚˜์ค‘์— one-hot ์ธ์ฝ”๋”ฉ์œผ๋กœ ๋ณ€ํ™˜์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ž…๋‹ˆ๋‹ค.

 

16. train-validation ๋ฐ์ดํ„ฐ ๋ถ„๋ฆฌ

์ด์ œ, train๋ฐ์ดํ„ฐ์ค‘ 20%๋ฅผ ์ชผ๊ฐœ์„œ ํ•™์Šต์ค‘ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฒ€์ฆ์„ ์œ„ํ•œ validation์…‹์„ ๋งˆ๋ จํ•ด ๋†“์Šต๋‹ˆ๋‹ค.

 

17. train๋ฐ์ดํ„ฐ์˜ ๋ถ„ํฌ ํ™•์ธ

train๋ฐ์ดํ„ฐ์— ์กด์žฌํ•˜๋Š” ๊ฐœ์™€ ๊ณ ์–‘์ด ์ˆ˜๋ฅผ ๊ทธ๋ž˜ํ”„๋กœ ๊ทธ๋ ค ๋ด…๋‹ˆ๋‹ค.

 

18. validation ๋ถ„ํฌ ํ™•์ธ

์•„๊นŒ ์ž˜๋ผ๋‚ธ 20%์˜ ๋ฐ์ดํ„ฐ์—๋„ ๊ฐœ์™€ ๊ณ ์–‘์ด์˜ ๋ถ„ํฌ๋ฅผ ํ™•์ธ ํ•ฉ๋‹ˆ๋‹ค.

19. ํ•™์Šต, ๊ฒ€์ฆ๋ฐ์ดํ„ฐ์˜ ํ™•์ธ

ํ•™์Šต๋ฐ์ดํ„ฐ ๋ฐ validation์˜ ํ˜•์ƒ์„ ํ™•์ธํ•˜๊ณ ,

ํ•œ๋ฒˆ์— ํ•™์Šตํ•  batch์˜ size๋ฅผ ์„ค์ • ํ•ฉ๋‹ˆ๋‹ค.

 

20. ํ•™์Šต๋ฐ์ดํ„ฐ ๋ปฅํŠ€๊ธฐ

์•„์‹œ๋‹ค ์‹œํ”ผ ํ•™์Šต์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์„์ˆ˜๋ก ์ž˜ ๋  ๊ฐ€๋Šฅ์„ฑ์ด ํฝ๋‹ˆ๋‹ค.

ํ•™์Šต๋ฐ์ดํ„ฐ๋ฅผ augmentationํ•ด์„œ ์ˆ˜๋ฅผ ๋Š˜๋ฆฝ๋‹ˆ๋‹ค.

๋ถ€ํ’€๋ฆฌ๊ธฐ๋Š” ์ด๋ฏธ์ง€๋ฅผ ์•ฝ๊ฐ„ ํšŒ์ „์‹œํ‚ค๊ฑฐ๋‚˜, ์คŒ์„ ํ•˜๊ฑฐ๋‚˜, ์ƒํ•˜/์ขŒ์šฐ ๋ฐ˜์ „์„ ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋Š˜๋ฆฝ๋‹ˆ๋‹ค.

 

21. Validation๋ฐ์ดํ„ฐ ๋ปฅํŠ€๊ธฐ

validation์ด๋ฏธ์ง€๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ž‘์—…์„ ํ•ด์ค๋‹ˆ๋‹ค.

 

22. ์ƒ˜ํ”Œ ํ™•์ธ

์œ„์— ๋ฐ์ดํ„ฐ ๋ถ€ํ’€๋ฆฌ๊ธฐ๊ฐ€ ์ž˜ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ๋ถ€ํ’€๋ฆฌ๊ธฐ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

23. ์ด๋ฏธ์ง€ ํ™•์ธ

์ž‘์—…๋œ ์ด๋ฏธ์ง€๋ฅผ ํ™•์ธ ํ•ด ๋ด…๋‹ˆ๋‹ค.

์ž์„ธํžˆ ๋ณด๋ฉด ๊ฐ™์€ ๊ฐœ์ธ๋ฐ, ์ขŒ์šฐ ๋ฐ˜์ „์ด๋‚˜ ์คŒ์ด ๋˜์–ด ์žˆ๋Š”๊ฑธ ๋ณผ ์ˆ˜ ์žˆ์ฃ .

 

24. ํ•™์Šต์‹œ์ž‘

์ž, ์ด์ œ ํ•™์Šต์„ ํ•ด๋ด…์‹œ๋‹ค.

GPU์„œ๋ฒ„์—์„œ ํ•œ Epoch๋‹น ๋Œ€๋žต 5๋ถ„์ •๋„๊ฐ€ ๊ฑธ๋ฆฐ๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํšŒ์‚ฌ์—์„œ ์ง€๊ธ‰๋œ ๋…ธํŠธ๋ถ์œผ๋กœ๋Š” 15๋ถ„์—์„œ 30๋ถ„ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. (๊ณฑํ•˜๊ธฐ 50๋ฒˆ์„ ํ•ด์•ผ ํ•จ)

ํœด๊ฐ€ ๊ฐˆ๋•Œ ๊ฑธ์–ด๋†“๊ณ  ๊ฐ€์‹œ๊ธธ...

 

ํ•™์Šต์ด ์ž˜ ๋˜์—ˆ๊ณ  31๋ฒˆ์งธ Epoch์—์„œ ReduceLROnPlateau์ฝœ๋ฐฑ์ด ์ผ์–ด๋‚ฌ๊ตฐ์š”.

1e-50 ํ•™์Šต์œจ์— ๋„๋‹ฌํ•œ ๋ชจ์–‘์ž…๋‹ˆ๋‹ค.

 

25. ๋ชจ๋ธ ์ €์žฅ

ํ•™์Šต์ด ๋๋‚˜๋ฉด, ์ œ์ผ๋จผ์ € ํ• ์ผ์€ ๋ชจ๋ธ์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ชจ๋ธ์„ ์ €์žฅํ•ด ๋†“์œผ๋ฉด, ๋‹ค์Œ์— 24๋ฒˆ์˜ ์˜ค๋ž˜์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ํ•™์Šต ๋‹จ๊ณ„๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

26. ํ•™์Šต ๋‚ด์šฉ ํ™•์ธ

์ด์ œ ๊ทธ๋™์•ˆ ํ•™์Šต์‹œํ‚จ ๋‚ด์šฉ์„ ํ™•์ธํ•ด๋ด์•ผ๊ฒ ์ฃ .

train loss, validation loss์™€ train accuracy, validation accuracy ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ ค๋ด…๋‹ˆ๋‹ค.

 

27. ๊ทธ๋ž˜ํ”„ ํ™•์ธ

์•„์ฃผ ์˜ˆ์˜๊ฒŒ ์ž˜ ํ™•์ธ ๋œ๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํŒŒ๋ž€์ƒ‰ ๊ทธ๋ž˜ํ”„๋Š” ํ•™์Šตํ• ๋•Œ์˜ ๊ทธ๋ž˜ํ”„๊ณ , ๋นจ๊ฐ„์ƒ‰์€ validation ๊ทธ๋ž˜ํ”„ ์ž…๋‹ˆ๋‹ค.

์ฒซ๋ฒˆ์งธ ๊ทธ๋ž˜ํ”„๋ฅผ ๋ณด๋ฉด ์ฒ˜์Œ ํ•™์Šต์‹œ์ ์—๋Š” ์˜ค๋‹ต์œจ์ด ๋†’๋‹ค๊ฐ€, ์ ์  ํ•™์Šต์„ ์ง€์†ํ•  ์ˆ˜๋ก

์˜ค๋‹ต์ด ๋‚ฎ์•„์ง€์ฃ . ๊ทธ๋ฆฌ๊ณ  validation๋„ ์ž˜ ๋‚ฎ์•„์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋‘๋ฒˆ์งธ ๊ทธ๋ž˜ํ”„๋Š” ์ •ํ™•๋„์ธ๋ฐ,

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ฒ˜์Œ ํ•™์Šต ์‹œ์ ์—๋Š” ์ •ํ™•๋„๊ฐ€ ๋‚ฎ๋‹ค๊ฐ€ ์ ์  ์ž˜ ๋งŸ์ถฐ๊ฐ€๋Š”๊ฑธ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ค‘๊ฐ„์ค‘๊ฐ„ ํŠ€๋Š” ๋ถ€๋ถ„์€ ์•„๋งˆ๋„, ๊ฐœ๊ฐ™์€ ๊ณ ์–‘์ด๋‚˜ ๊ณ ์–‘์ด์ง“์„ ํ•˜๋Š” ๊ฐœ๊ฐ€ ์„ž์—ฌ์žˆ๋Š”๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜๋„ train, validation์˜ ์ฐจ์ด๊ฐ€ ํฌ์ง€ ์•Š์•„์„œ overfitting์ด ์ผ์–ด๋‚˜์ง€ ์•Š์€๊ฒƒ ๊ฐ™๋„ค์š”.

ํ•™์Šต๋„ ์ž˜ ๋˜์—ˆ๊ตฌ์š”.

 

 

28. Test

์ด์ œ ํ•™์Šต๋œ ๋ชจ๋ธ์„ ๊ฐ€์ง€๊ณ  test๋ฐ์ดํ„ฐ๋ฅผ ํ•œ๋ฒˆ ๋งž์ถฐ๋ด…์‹œ๋‹ค.

test1 ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ๊ฐœ์™€ ๊ณ ์–‘์ด ์‚ฌ์ง„์œผ๋กœ ํ•œ๋ฒˆ ํ‰๊ฐ€๋ฅผ ํ•ด ๋ด…๋‹ˆ๋‹ค.

 

29. ํ‰๊ฐ€ ๋ฐ์ดํ„ฐ ์ค€๋น„

ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ์™€ validation๋ฐ์ดํ„ฐ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ค€๋น„ ํ•ฉ๋‹ˆ๋‹ค.

 

30. ๋ชจ๋ธ ์˜ˆ์ธก

์•„๊นŒ ํ•™์Šตํ•œ ๋ชจ๋ธ๋กœ, ์œ„์—์„œ ์ƒ์„ฑํ•œ test ์…‹์„ ๋„ฃ์–ด ๋ด…๋‹ˆ๋‹ค.

 

31. ํ‰๊ฐ€ ์ƒ์„ฑ

prediction์˜ ๊ฒฐ๊ณผ๋Š” ๊ฐ record๋ณ„, ๊ฐœ์ผํ™•์œจ ์–ผ๋งˆ, ๊ณ ์–‘์ด์ผ ํ™•์œจ ์–ผ๋งˆ ์ด๋Ÿฐ์‹์œผ๋กœ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ด๊ฒจ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŽธ์˜์„ฑ๊ณผ ์ •ํ™•๋„ ๊ฒ€์ฆ์„ ์œ„ํ•ด ๊ฐœ์™€ ๊ณ ์–‘์ด์ผ ํ™•๋ฅ ์ค‘ ๋ณด๋‹ค ํฐ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” ๋ ˆ์ด๋ธ”์„ ์„ ํƒํ•ด์„œ ๊ฐ’์„ ์น˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

(๊ฐœ์ผ ํ™•์œจ 0.73, ๊ณ ์–‘์ด์ผ ํ™•๋ฅ  0.27์ด๋ฉด, '๊ฐœ'์˜ label์ธ dog์„ ๋„ฃ์Šต๋‹ˆ๋‹ค.)

 

 

32. ๋ ˆ์ด๋ธ” ๋ณ€ํ™˜

ํ‰๊ฐ€๋ฅผ ์œ„ํ•ด์„œ dog, cat ์ด๋ ‡๊ฒŒ ๋“ค์–ด๊ฐ€ ์žˆ๋˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ 1, 0์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

 

33. ์ •๋‹ต๋น„์œจ ํ™•์ธ

๊ฐœ์™€ ๊ณ ์–‘์ด๋ฅผ ์–ด๋Š์ •๋„ ๋น„์œจ๋กœ ์˜ˆ์ธกํ–ˆ๋Š”์ง€ ํ•œ๋ฒˆ ์‚ดํŽด ๋ด…๋‹ˆ๋‹ค.

 

34. ์ •๋‹ต ํ™•์ธ

์˜ˆ์ธกํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ˆˆ์œผ๋กœ ํ™•์ธํ•ด ๋ด…๋‹ˆ๋‹ค.

์ž˜ ๋งž์ถ”๋„ค์š”...

 

์‹ค์ œ๋กœ๋Š” ๋” ์ข‹์€ ๋ชจ๋ธ์„ ์ฐพ๊ธฐ ์œ„ํ•ด ์ธ๊ณ ์˜ ์‹œ๊ฐ„(๋ช‡์‹œ๊ฐ„, ๋ช‡์ผ์”ฉ)์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ฐธ์•„๋‚ด๋ฉฐ

๊ธฐ๋‹ค๋ฆฌ๋Š” ์ธ๋‚ด์˜ ์‹ธ์›€์ธ๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

๋…ธํŠธ๋ถ์œผ๋กœ ํ•œ๋ฒˆ ๋Œ๋ ค๋ณด์‹œ๋ฉด...

AWS๋‚˜ GCP๊ฐ™์€ ์„œ๋น„์Šค๊ฐ€ ์–ผ๋งˆ๋‚˜ ๊ณ ๋งˆ์šด์ง€ ๋ผˆ์ €๋ฆฌ๊ฒŒ ๋Š๋ผ์‹ค ๊ฒ๋‹ˆ๋‹ค. ^^

์ด๋ฒˆ Tensorflow Summit 2019์—์„œ Tensorflow 2.0 alpha๋ฒ„์ „์ด ๊ณต๊ฐœ ๋˜์—ˆ๋Š”๋ฐ์š”,

๊ธฐ์กด์— tensorflow๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋”ฅ๋Ÿฌ๋‹์„ ๊ฐœ๋ฐœํ•˜๋˜ ์‚ฌ๋žŒ์ด๋ผ๋ฉด,

์ฒด๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ํ™• ๋ฐ”๋€ ๋ถ€๋ถ„์ด ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด๋Ÿฌํ•œ ๋ถ€๋ถ„์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ์†Œ๊ฐœํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

 

์šฐ์„ , ๊ธฐ๋ณธ์ ์œผ๋กœ tensorflow์˜ ๋™์ž‘์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ๋ง์”€๋“œ๋ฆฌ๋ฉด,

 

1. ํ•™์Šตํ•  ๋ฐ์ดํ„ฐ์…‹ ์ค€๋น„

2. ๋ฐ์ดํ„ฐ์…‹์„ ๋‹ด์„ Computational Graph ์ค€๋น„(tf.placeholder)

3. ๊ฐ€์ค‘์น˜๋ž‘ ๋ฐ”์ด์–ด์Šค๋ฅผ ๋‹ด์„ Computational Graph ์ค€๋น„(tf.Variable)

4. ์†์‹คํ•จ์ˆ˜ ์ •์˜

5. ์†์‹คํ•จ์ˆ˜๋ฅผ ์ตœ์†Œํ™” ํ•ด์ฃผ๋Š” Optimizer์ •์˜

6. tf.Session์ •์˜

7. Session๋‚ด์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’ ์ดˆ๊ธฐํ™”(tf.global_variable_initializer())

8. ํ•™์Šต ์ˆ˜ํ–‰

9. ํ‰๊ฐ€

10. ์˜ˆ์ธก

 

์ด๋Ÿฌํ•œ ๋‹จ๊ณ„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ computational graph๋ž€, ๋งคํŠธ๋ฆญ์Šค ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ '๋…ธ๋“œ'๋ž€ ๊ณณ์—์„œ

๊ณ„์‚ฐ์„ ํ•˜๋Š” ํ˜•ํƒœ๋ฅผ ๊ทธ๋ž˜ํ”„๋กœ ํ‘œ์‹œํ•œ ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

 

๋‚˜๋ฆ„ ํ•ฉ๋ฆฌ์ ์ธ ๋ฐฉ์‹์ด๊ธด ํ•˜์ง€๋งŒ,

์—ฌ๊ธฐ์—๋Š” ๋งน์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ฐ”๋กœ, define๋‹จ๊ณ„์—์„œ๋Š” ์•„๋ฌด๊ฒƒ๋„ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์ด์ฃ .

 

์•„๋ž˜ ์˜ˆ๋ฅผ ๋ณผ๊นŒ์š”?

 

>> a = 2

>> b = 3

>> c = a + b

 

์ด ์˜ˆ์ œ์—์„œ a = 2๋ฅผ ์ •์˜ํ•˜๋Š” ์ˆœ๊ฐ„

์ด๋ฏธ a๋ผ๋Š” ๋ณ€์ˆ˜์—๋Š” 2์˜ ๊ฐ‘์ด ํ• ๋‹น์ด ๋ฉ๋‹ˆ๋‹ค.

c๋„ c = a + b ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์ˆœ๊ฐ„ ์ด๋ฏธ, c์—๋Š” 5๋ž€ ๊ฐ’์ด ๋“ค์–ด๊ฐ€๊ฒ ์ฃ .

 

๊ทธ๋Ÿฐ๋ฐ, ์ด๋ฅผ tensorflow์˜ computational graph๋กœ ์ƒ์„ฑํ•˜๋ฉด,

a = tf.constant(1)

b = tf.constant(2)

 

์ด๋Ÿฐ์‹์œผ๋กœ ์ •์˜๋ฅผ ํ•˜์ฃ .

์ด๋•Œ a์˜ ๊ฐ’์„ ์ฐ์–ด๋ณด๋ฉด 1์ด ๋‚˜์˜ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋ƒฅ 1์ด๋ž€ ๊ฐ’์ด ํ• ๋‹น ๋œ computational graph๊ฐ€ ํ•˜๋‚˜ ํ‘œ์‹œ๋  ๋ฟ์ด์ฃ .

 

Tensor("Const:0", shape=(), dtype=int32)

 

tensorflow์—์„œ๋Š” session์ด๋ž€๊ฑธ ์ƒ์„ฑํ•ด์„œ ์‹คํ–‰ํ•ด์•ผ๋งŒ ํ•ด๋‹น ๋˜๋Š” ์—ฐ์‚ฐ์ด ์‹คํ–‰ ๋ฉ๋‹ˆ๋‹ค.

 

์ด๊ฒŒ, '์—…๊ณ„'์—์„œ๋Š” ๋‚˜๋ฆ„ ํฐ ์ด์Šˆ์˜€์Šต๋‹ˆ๋‹ค.

'์ง€์—ฐ์‹คํ–‰'์ด๋ผ๊ณ  ํ•˜๋Š” ๋ฌธ์ œ ์ž…๋‹ˆ๋‹ค.

 

์ˆ˜์‹ญ๊ณ„์˜ ๊ณ„์ธต์„ ์Œ“์•„์˜ฌ๋ฆฐ ์‹ ๊ฒฝ๋ง์„ ์‹คํ–‰ํ•  ๋•Œ,

tensorflow๋Š” ์ด๋Ÿฌํ•œ computational graph๋ฅผ ์ดˆ๊ธฐ์— ๊ตฌ์„ฑํ•˜๋Š๋ผ

์‹คํ–‰์†๋„๊ฐ€ ์—„์ฒญ ๋Š๋ฆฌ๋Š” ํ˜„์ƒ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

๋”ฅ๋Ÿฌ๋‹ ์—”์ง€๋‹ˆ์–ด์˜ ๋ถˆ๋งŒ์ด ๊ทน์— ๋‹ฌํ–ˆ์—ˆ์—ˆ์ฃ .

 

์ค‘์›์˜ ๋”ฅ๋Ÿฌ๋‹์—๋Š” ์—ฌ๋Ÿฌ ๊ณ„๋ณด(?)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ตฌ๊ธ€์˜ ํ…์„œํ”Œ๋กœ ํŒŒ, ํ”„๋ž‘์†Œ์™€ ์ˆ„๋ ˆ์˜ ์ผ€๋ผ์Šค ํŒŒ, ๊ทธ๋ฆฌ๊ณ  ํŽ˜์ด์Šค๋ถ์˜ ํŒŒ์ดํ† ์น˜ ํŒŒ...

์ด์™ธ์—๋„ ์•„ํŒŒ์น˜์˜ MXNET๋ถ€ํ„ฐ MS์˜ CNTK๋“ฑ ....

์ˆ˜๋งŒ์€ ํŒŒ๊ฐ€ ์ค‘์›์— ์กด์žฌ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด์ค‘ ์ฃผ๋ฅ˜๋Š” ์•„๋ฌด๋ž˜๋„ ํ…์„œํ”Œ๋กœ, ์ผ€๋ผ์Šค, ํŒŒ์ดํ† ์น˜๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ๋ฌด๋ฆผ์˜ ์„ธ๋ ฅ์„ ์ฐจ์ง€ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํ…์„œํ”Œ๋กœ >>>>>>>>>>์ผ€๋ผ์Šค>>>>>>ํŒŒ์ดํ† ์น˜ >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>์žก๋‹ค๊ตฌ๋ฆฌ(์žก๋‹ค๊ตฌ๋ฆฌํŒŒ์—๊ฒ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค...)

๋Œ€๋žต ๊ฐœ์ธ์ ์œผ๋กœ๋Š” ์ด๋Ÿฐ ๋Š๋‚Œ์ด์ง€ ์•Š์„๊นŒ ํ•˜๋Š” ๊ฐœ์ธ์ ์ธ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค.

 

ํ…์„œํ”Œ๋กœ๋Š”....

์•„๋ฌด๋ž˜๋„ ๋”ฅ๋Ÿฌ๋‹ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ดˆ๊ธฐ ์ฃผ๋ฅ˜ ์ด๋‹ค๋ณด๋‹ˆ...

๊ทธ ๋น„๊ธ‰์— ์•„๋ฌด๋ž˜๋„ ํ—›์ ๋„ ๋งŽ๊ณ , ๋น„๊ธ‰์„ ์ตํžˆ๊ธฐ์—๋„ ๊ธฐ์กด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํŒจ๋Ÿฌ๋‹ค์ž„๊ณผ ๋งŽ์ด ๋‹ฌ๋ผ์„œ

์ตํžˆ๊ธฐ์— ๋งŽ์€ ์‹œ๊ฐ„๊ณผ ๋‚ด๊ณต์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์ด์— ๋ถˆ๋งŒ์„ ํ’ˆ์€ ํ”„๋ž‘์†Œ์™€ ์ˆ„๋ ˆ๋Š” ๋ถ„ํŒŒ๋ฅผ ๊ฒฐ์ •ํ–ˆ์ฃ . ๋ฐ”๋กœ ์ผ€๋ผ์Šค ํŒŒ ์ž…๋‹ˆ๋‹ค.

์ฒ˜์Œ ๋”ฅ๋Ÿฌ๋‹์— ์ž…๋ฌธํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ๋น„๊ธ‰์„ ์ตํžˆ๋‹ค ์ฃผํ™”์ž…๋งˆ์— ๊ฑธ๋ฆฐ ์ด๋“ค๋„ ์‰ฝ๊ฒŒ ์ตํž ์ˆ˜ ์žˆ๋Š”,

์•„์ฃผ ์‰ฌ์šด ๋น„๊ธ‰์„ ์ฐฝ์‹œํ•ฉ๋‹ˆ๋‹ค.

 

๋‹ค๋งŒ ์ผ€๋ผ์Šค๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ๊ธฐ์กด์˜ ํ…์„œํ”Œ๋กœ, ์”จ์•„๋…ธ, CNTK๋“ฑ์˜ ๋น„๊ธฐ๋ฅผ ๊ทธ๋Œ€๋กœ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค๋งŒ,

์ตํžˆ๋Š” ์‚ฌ๋žŒ์€ ์ด๋Ÿฐ๊ฑธ ์•Œ ํ•„์š”๊ฐ€ ์—†๋Š” ์‹ ๋ฐ•ํ•œ ๋น„๊ธ‰์ด์—ˆ์Šต๋‹ˆ๋‹ค.

 

ํ…์„œํ”Œ๋กœ์—๋Š” ๋ณต์žก ๋‹ค์–‘ํ•˜๊ณ , ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ์ฐจ์›์„ ๋งž์ถฐ์ฃผ์–ด์•ผ ํ•˜๋Š” ๋“ฑ

๊ท€์ฐฎ๊ณ  ์–ด๋ ค์šด ์ ˆ์ฐจ๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ,

์ผ€๋ผ์Šค๋Š” ๊ทธ๋ƒฅ ํ„ฑํ„ฑ ์‹ ๊ฒฝ๋ง์„ ์Œ“์•„๋†“๊ธฐ๋งŒ ํ•˜๋ฉด ์ž๋™์œผ๋กœ ์•Œ์•„์„œ array์˜ ์ฐจ์›์„ ๋งŸ์ถฐ์ฃผ๋Š”

์‹ ๋ฐ•ํ•œ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ผ€๋ผ์Šค๋Š” ๋‚˜์˜ค์ž ๋งˆ์ž ์„ ํ’์ ์ธ ์ธ๊ธฐ๋ฅผ ๋Œ์—ˆ๊ณ , ํ˜„์žฌ๋Š” ๋Œ€๋žต ์ค‘์›์—์„œ ๋‘๋ฒˆ์งธ์ •๋„ ๋˜๋Š”

์ฃผ๋ฅ˜๋กœ ๊ธ‰ ์ƒ์Šน ํ•ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ!!!

 

ํ…์„œํ”Œ๋กœํŒŒ์˜ ์žฅ๋กœ๊ฐ€ ์ผ€๋ผ์Šค์˜ ๋น„๊ธ‰์„ ์ˆ˜์šฉํ•˜๊ธฐ๋กœ ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฐ”๋กœ, tensorflow 2.0์—์„œ ๋ง์ด์ฃ .

์ด์ œ, ํ…์„œํ”Œ๋กœ์˜ ํŒŒ๋„ ๊ธฐ์กด์˜ ์ตํžˆ๊ธฐ ํž˜๋“ค๊ณ  ์ฃผํ™”์ž…๋งˆ์— ๋น ์ง€๊ธฐ ์‰ฌ์šด ๋น„๊ธ‰ ๋Œ€์‹ ์—,

ํ‘œ์ค€์œผ๋กœ Keras๋ผ๋Š” high level API๋ฅผ ๊ทธ๋Œ€๋กœ tensorflow์—์„œ ์“ธ์ˆ˜ ์žˆ๊ฒŒ ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์•„๋ž˜ ์˜ˆ์‹œ๋ฅผ ํ•œ๋ฒˆ ๋ณด์‹œ์ฃ .

 

๋จผ์ € Tensorflow ์†Œ์Šค ์ž…๋‹ˆ๋‹ค.

 

 

ํ..๋ณด๊ธฐ๋งŒ ํ•ด๋„ ์ฃผํ™”์ž…๋งˆ์— ๊ฑธ๋ฆด๊ฒƒ ๊ฐ™์€ ๋ณต์žกํ•จ์ด ์žˆ์ฃ .

 

์•„๋ž˜๋Š” ์ผ€๋ผ์Šค ์†Œ์Šค ์ž…๋‹ˆ๋‹ค.

 

๋ญ”๊ฐ€ ๋‚˜๋ฆ„ ๊น”๋”ํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

 

์ด๋Ÿฌํ•œ ์ ‘๊ทผ ์šฉ์ด์„ฑ๊ณผ ๋น ๋ฅด๊ฒŒ prototypingํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ•์  ๋•Œ๋ฌธ์—,

๊ธˆ๋ฒˆ Tensorflow 2.0์—์„œ๋Š” Keras๋ฅผ ํ‘œ์ค€ API๋กœ ํ™•์ •ํ•œ ๊ฑฐ์ฃ .

 

๊ธฐ์กด์— KerasํŒŒ๋“ค์—๊ฒ...

๋น„๊ธ‰์„ ์ž˜ ์ตํžˆ๊ณ  ์žˆ๋Š”๋ฐ ํ•ญ์ƒ ์–ด๋””๊ฐ€๋‚˜ ๋น„์ฃผ๋ฅ˜๋ผ๋Š” ํ•ธ๋””์บก์„ ๋งˆ์Œ์†์— ์•ˆ๊ณ  ์‚ด๊ณ  ์žˆ๋‹ค๊ฐ€

ํ•œ ์ˆœ๊ฐ„์— ์ฃผ๋ฅ˜๋กœ ํŽธ์ž…์ด ๋˜์–ด๋ฒ„๋ฆฐ ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค.

์ด์ œ ์ฃผ๋ง‰์— ๊ฐ€๋„ ๋น„์ฃผ๋ฅ˜๋ผ๋Š” ๋†€๋ฆผ์„ ๋ฐ›์ง€ ์•Š์ฃ .

 

๊ธฐ์กด์˜ Keras ์†Œ์Šค์ฝ”๋“œ์— tf๋งŒ ๋ถ™์ด๋ฉด ๋Œ€๋ถ€๋ถ„ ์ž˜ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์ž๋ฉด,

import keras.layers.Sequential

 

์ด๋Ÿฌํ•œ ์†Œ์Šค๋ฅผ,

import tf.keras.layers.Sequential

 

์ด๋ ‡๊ฒŒ๋งŒ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋Œ€๋ถ€๋ถ„ ์ž˜ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

 

์ž ๊น. ์—ฌ๊ธฐ์„œ...

์œ„์— ๊ธ€๋งŒ ๋ณด๋ฉด keras๊ฐ€ ๋ณ„๋„์˜ ํŒŒ ์ธ๋“ฏ ๋ณด์ž…๋‹ˆ๋‹ค.

keras๋Š” ๋‹จ๋…์œผ๋กœ ๋Œ์•„๊ฐ€๋Š” api๊ฐ€ ์›๋ž˜ ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค.

keras ์ฐฝ์‹œ ์ดˆ๊ธฐ๋ถ€ํ„ฐ, backend๋กœ๋Š” tensorflow๋‚˜, ์ง€๊ธˆ์€ ๋ฉธ๋ฌธํ™” ๋˜์–ด๊ฐ€๋Š” theano, cntk ๋“ฑ์„ ์‚ฌ์šฉํ•˜๋Š”

api์˜€์Šต๋‹ˆ๋‹ค.

 

๋ฌด์Šจ๋ง์ธ๊ณ  ํ•˜๋‹ˆ, ์ด์ „ ํŽธ์—์„œ ์–˜๊ธฐํ•œ computational graph, tensor ์—ฐ์‚ฐ, session๋“ฑ์˜

์ €์ˆ˜์ค€ ์ž‘์—…๋“ค์„ wrappingํ•ด์„œ, ์ข€๋” ์šฐ์•„ํ•ด๋ณด์ด๋Š” ์ž‘์—…์œผ๋กœ ์ž˜ ํฌ์žฅํ–ˆ๋‹ค๋Š” ๋ง ์ž…๋‹ˆ๋‹ค.

 

keras์—์„œ ์šฐ์•„ํ•˜๊ฒŒ model.fit ํ•˜์ง€๋งŒ,

์‹ค์ œ๋กœ๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” tensorflow์—์„œ session์„ ์ƒ์„ฑํ•˜๊ณ , global variable๋“ค์„ ์ดˆ๊ธฐํ™” ํ•˜๊ณ , computational graph๋ฅผ

compileํ•˜๊ณ , session์„ ์‹คํ–‰ํ•˜๋Š” ๋“ฑ์˜ ์ €์ˆ˜์ค€ ์ž‘์—…์„์„ ํ•œ๋‹ค๋Š” ๋ง ์ž…๋‹ˆ๋‹ค.

 

์ข€๋” deepํ•ด์ง€๋Š” deep learning์ด๋‚˜, ๊ฐ€๋”์€ ์ด๋Ÿฌํ•œ ์ €์ˆ˜์ค€ ์ž‘์—…์„์„

์ง์ ‘ ์ œ์–ดํ•ด์•ผ ํ•  ๋•Œ๊ฐ€ ์žˆ์ง€๋งŒ, ํ‰์†Œ์—๋Š” ์šฐ์•„ํ•˜๊ฒŒ model.fitํ•˜๋Š” keras๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

 

์Œ..์“ฐ๋‹ค๋ณด๋‹ˆ...

์ค‘๋”ฉ๋•Œ ์ˆ˜์—…์‹œ๊ฐ„์— ๋ชฐ๋ž˜๋ณด๋˜ ์˜์›…๋ฌธ์ด ์ƒ๊ฐ์ด๋‚˜์„œ

๋ฌดํ˜‘์Šค๋Ÿฝ๊ฒŒ ์“ฐ๋‹ค๋ณด๋‹ˆ ๊ธ€์ด ์กฐ์žกํ•ด์กŒ๋„ค์š”.

 

์ด๋ฒˆ์‹œ๊ฐ„์—๋Š”...์ง„์งœ๋กœ Tensorflow 2.0์— ๋Œ€ํ•ด์„œ ๋ฐ”๋€์ ์„ ๋ง์”€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

 

1๋ฒˆ. ์šฐ์„ !!!

์žก์Šค๋Ÿฐ API๋“ค์„ ์ฃ„๋‹ค ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

 

๊ธฐ์กด 1.x ๋ฒ„์ „์—์„œ๋Š” ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‹ค์–‘ํ•œ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์ด ์กด์žฌํ–ˆ์—ˆ์œผ๋‚˜,

2.0์—๋Š” ๊ตฌํ˜„ํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ• ํ•˜๋‚˜๋งŒ์„ ๋†”๋‘๊ณ  ์‹ธ๊ทธ๋ฆฌ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

์ž…๋ฌธํ•˜๋Š” ์‚ฌ๋žŒ์ด๋‚˜, ๊ธฐ์กด์— ๊ตฌํ˜„ํ•˜๋˜ ๊ฐœ๋ฐœ์ž๋„ ๋‹ค๋ฅธ ๊ตฌํ˜„์†Œ์Šค๋ฅผ ๋ณด๊ณ  ํ˜ผ๋™์ด ์˜ฌ ์ผ์ด

๋งŽ์ด ์ ์–ด์กŒ์Šต๋‹ˆ๋‹ค.

 

๋‹ค๋งŒ...๊ธฐ์กด ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ํ˜ธํ™˜์„ฑ์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„์€ ๋‚จ๊ฒจ๋’€์Šต๋‹ˆ๋‹ค.

tf.compat.v1 ํŒจํ‚ค์ง€ ์•„๋ž˜, ๊ธฐ์กด์— ์“ฐ๋˜ ํŒจํ‚ค์ง€๋“ค์ด ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

2๋ฒˆ. Eager Execution ๋ชจ๋“œ ๋„์ž…

1ํŽธ์—์„œ ์ž ๊น ์†Œ๊ฐœ๋“œ๋ ธ๋‹ค์‹œํ”ผ, tensorflow ๊ตฌ๋ฒ„์ „์—์„œ๋Š” ๋ญ”๊ฐ€๋ฅผ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ํ•˜๋ ค๋ฉด

๋จผ์ € computational graph๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ด๋ฅผ session์„ ์ƒ์„ฑํ•ด์•ผ๋งŒ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ์ˆ˜ ์žˆ๋‹ค๊ณ 

์„ค๋ช…๋“œ๋ฆฐ ๋ฐ” ์žˆ์Šต๋‹ˆ๋‹ค.

 

tesorflow 1.x ์—์„œ๋Š” ๋ง์…ˆ์„ ์•„๋ž˜์™€ ๊ฐ™์ด session์„ ์‹คํ–‰ํ•ด์•ผ๋งŒ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

๋ญ”๊ฐ€, ์ธ๊ฐ„์˜ ์˜์‹ ํ๋ฆ„ํ•˜๊ณ ๋„ ์ž˜ ์•ˆ๋งž์ฃ ?

 

tensorflow 2.0์—์„œ๋Š” ์„ ์–ธ ์ฆ‰์‹œ ์‹คํ–‰๋˜๋Š” eager execution๋ชจ๋“œ๊ฐ€ default๋กœ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์š”๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ‰์ƒ์‹œ ํŒŒ์ด์ฌ ์“ฐ๋“ฏ์ด ์“ฐ๋ฉด ๋˜์ฃ ...

 

์ด๋ ‡๊ฒŒ ๋ฐ”๋€Œ๋ฉด์„œ...

 

๊ธฐ์กด์— tf.Session()๋Š”... ๊ณจ๋ฐฉ(tf.compat.v1)์œผ๋กœ ์ซ“๊ฒจ๋‚ฌ์Šต๋‹ˆ๋‹ค.

๊ธฐ์กด ๋ฐฉ๋ฒ•๋Œ€๋กœ session์„ ์“ฐ์‹œ๊ณ  ์‹ถ์œผ์‹  ๋ถ„๋“ค์€ ์ €๊ธฐ ๊ณจ๋ฐฉ์„ ์ฐพ์•„ ๊ฐ€์‹œ๋ฉด

tf.Session()์ด ๊ณจ๋ฐฉ์„ ์ง€ํ‚ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

3๋ฒˆ. AutoGraph

๊ธฐ์กด์— session๊ธฐ๋ฐ˜์˜ function์€ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ,

function ์•ž์— tf.function ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋งŒ ๋ถ™์ด๋ฉด, ์ž๋™์œผ๋กœ computatioal graph๋ฅผ

์ƒ์„ฑํ•ด ์ฃผ์–ด, ๋ฐ”๋กœ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

 

์—ฌ๊ธฐ์„œ autograph๊ธฐ๋Šฅ์ด ๋‚˜์˜ค๋Š”๋ฐ,

Autograph๋Š” funciton ์•ž์— @tf.function์ด๋ž€ decorator๋ฅผ ๋ถ™์ž„์œผ๋กœ์จ

์ƒ์„ฑ์ด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋‹จ์ˆœํžˆ ์ด function๋ฟ๋งŒ ์•„๋‹ˆ๋ผ,

function ๋‚ด๋ถ€์—์„œ callํ•˜๋Š” ๋‹ค๋ฅธ function๋„ ์ž๋™์œผ๋กœ computaional graph๋ฅผ ์ƒ์„ฑํ•ด ์ค๋‹ˆ๋‹ค.

 

 

deep_next(x)๋ž€ function ์•ž์— @tf.function์ด๋ž€ decorator๊ฐ€ ์žˆ์ฃ ?

์ € decorator ๋•๋ถ„์— deep_net์€ ๋‹น์—ฐํžˆ computational graph๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ์ด ๋˜๊ณ ,

์ € deep_net๋‚ด๋ถ€์—์„œ ํ˜ธ์ถœํ•˜๋Š” linear_layer() ํ•จ์ˆ˜๊นŒ์ง€๋„ ์ž๋™์œผ๋กœ computational graph๋ฅผ ์ƒ์„ฑํ•ด ์ค๋‹ˆ๋‹ค.

 

(์ €๋Š”...์ด๋Ÿฐ ๋ฐฉ์‹์„ ์•ˆ์จ๋ด์„œ ์ €๊ฒŒ ์™œ ํŽธํ•œ์ง€ ์‚ฌ์‹ค ๊ฐ์ด ์ž˜ ์•ˆ์˜ต๋‹ˆ๋‹ค...-_-;;;)

 

4๋ฒˆ. High Level API

 

์•„๋ž˜ ๋‘ ์†Œ์Šค๋ฅผ ๋ณด๊ณ  ๋‹ค๋ฅธ์ ์„ ์ฐพ์•„๋ณด์„ธ์š”.

 

์™ผ์ชฝ์€ tesorflow 1.x์˜ ์†Œ์Šค์ด๊ณ , ์˜ค๋ฅธ์ชฝ์€ tensorflow 2.0์˜ ์†Œ์Šค ์ž…๋‹ˆ๋‹ค.

 

์ •๋‹ต์€...

์™ผ์ชฝ์€ tensorflow๊ฐ€ high level api๋ฅผ ๋„์ž…ํ•œ๊ฑด 17๋…„ ๋ง ๋ถ€ํ„ฐ์—ฌ์„œ

๋‘ ์†Œ์Šค๋Š” ๊ฐ™์Šต๋‹ˆ๋‹ค๋งŒ,

 

2.0์ด ๋‚˜์˜ค๊ธฐ ์ „ ์†Œ์Šค๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” tf.Session()์„ ์ด์šฉํ•˜์—ฌ ์ˆ˜ํ–‰์ด ๋˜๊ณ ,

์˜ค๋ฅธ์ชฝ์˜ tensorflow 2.0์†Œ์Šค๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ๋„ eager execution์œผ๋กœ ์‹คํ–‰์ด ๋ฉ๋‹ˆ๋‹ค.

(tensorflow 2.0 dev summit 2019์—์„œ ๋ฐœํ‘œํ•˜์—ฌ ์ฒญ์ค‘๋“ค์˜ ์›ƒ์Œ์„ ์ž์•„๋‚ธ ๋ถ€๋ถ„ ์ž…๋‹ˆ๋‹ค.)

 

๊ทธ๋ฆฌ๊ณ , tensorflow๊ฐ€ 2.0์ด ๋˜๋ฉด์„œ ๋จธ์‹ /๋”ฅ๋Ÿฌ๋‹ workflow์—๋„ ๋ณ€ํ™”์˜ ๋ฐ”๋žŒ์„ ์ผ์œผ์ผฐ์Šต๋‹ˆ๋‹ค.

 

1. tf.data๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ์…‹ ์ค€๋น„

2. tf.keras๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ชจ๋ธ ์ƒ์„ฑ, ํ›ˆ๋ จ, ๊ฒ€์ฆ

3. eager execution์„ ์ด์šฉํ•˜์—ฌ ๋ชจ๋ธ ๋””๋ฒ„๊น…

4. ๋ถ„์‚ฐ traning์„ ์ด์šฉํ•˜์—ฌ distribution strategy ์‚ฌ์šฉ

5. savedmodel๋กœ ๋ชจ๋ธ ๋ฐฐํฌ

 

์•„๋ž˜ ๊ทธ๋ฆผ์„ ๋ณด์‹œ๋ฉด ์ข€ ๋” ์‰ฝ๊ฒŒ ์ดํ•ด๊ฐ€ ๋˜์‹ค ๊ฒ๋‹ˆ๋‹ค.

 

 

์ƒ์„ฑ๋œ ๋ชจ๋ธ์€ Distribution Strategy์— ์˜ํ•ด์„œ,

๋ชจ๋ธ์„ ๋ฐ”๊พธ์ง€ ์•Š๊ณ , CPU์—์„œ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ GPU ๋˜๋Š” TPU์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด๋Ÿฌํ•œ ๋ถ„์‚ฐ์ •์ฑ…์— ์˜ํ•ด ์ƒ์„ฑ๋œ ๋ชจ๋ธ์€

ํด๋ผ์šฐ๋“œ์— ์˜จํ”„๋ ˆ๋ฏธ์Šค๋กœ ์ œ๊ณต๋˜๋Š” tensorflow serving์œผ๋กœ ๋ฐฐํฌ๋˜๊ฑฐ๋‚˜,

๋ชจ๋ฐ”์ผ device๋ฅผ ์œ„ํ•œ tensorflow์ธ tensorflow lite์—์„œ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜,

๋ธŒ๋ผ์šฐ์ € ๋˜๋Š” node.js์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ tesorflow.js,

๊ทธ๋ฆฌ๊ณ  ์ผ๋ฐ˜์ ์ธ ๊ฐœ๋ฐœ์–ธ์–ด ๊ธฐ๋ฐ˜์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋ธ๋กœ ๋ฐฐํฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด์ƒ์œผ๋กœ ์ƒˆ๋กœ๋‚˜์˜จ tensorflow 2.0์— ๋Œ€ํ•œ ์†Œ๊ฐœ๋ฅผ ๋งˆ์น˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Pre-Install

$ sudo apt-get install dconf-cli uuid-runtime

 

Theme Install

$  bash -c  "$(wget -qO- https://git.io/vQgMr)"

 

์ฐธ๊ณ  : https://github.com/Mayccoll/Gogh

$ wget https://github.com/Thestars3/arkzip/releases/download/v2.4.4/arkzip_2.4.4_amd64.deb
$ sudo apt-get install libqt4-core
$ sudo dpkg --install arkzip_2.4.4_amd64.deb

$ unzip -O cp949 filename.zip

 

ํ”„๋กœํŒŒ์ผ์— ๋“ฑ๋กํ•˜๋ฉด ๋งค๋ฒˆ ์˜ต์…˜์„ ๋„ฃ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

export UNZIP="-O cp949"
export ZIPINFO="-O cp949"

์ „์ฒด ์‚ฌ์šฉ์ž ์ ์šฉ์€ ์•„๋ž˜ ์œ„์น˜์˜ profile์— ์ถ”๊ฐ€ํ•œ๋‹ค.

/etc/profile

 

** GUI์—์„œ ํ•œ๊ธ€ ๊นจ์ง€์ง€ ์•Š๊ณ  ์••์ถ•์„ ํ’€๋ ค๋ฉด ์•„๋ž˜ ์••์ถ•๊ด€๋ฆฌ์ž๋ฅผ ์„ค์น˜ํ•œ๋‹ค.

โ‘  Arkzip ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œ ํ•ฉ๋‹ˆ๋‹ค.
$ wget https://github.com/Thestars3/arkzip/releases/download/v2.4.4/arkzip_2.4.4_amd64.deb

โ‘ก Arkzip ์˜์กด์„ฑ ํŒจํ‚ค์ง€๋ฅผ ๋จผ์ € ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
$ sudo apt-get install libqt4-core

โ‘ข ๋‹ค์šด๋ฐ›์€ Arkzip ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
$ sudo dpkg --install arkzip_2.4.4_amd64.deb

watch -d -n 0.1 nvidia-smi

# left์— ์กด์žฌํ•˜๋Š” Key๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋งŒ merge
df_merge_how_left = pd.merge(df_left, df_right, how='left', on='KEY') 

# right์— ์กด์žฌํ•˜๋Š” Key๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋งŒ merge
df_merge_how_right = pd.merge(df_left, df_right, how='right',  on='KEY') 

# left ๋ฐ right ์–‘์ชฝ์— ์กด์žฌํ•˜๋Š” Key๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋งŒ merge
df_merge_how_inner = pd.merge(df_left, df_right, how='inner', on='KEY') 

# ์–‘์ชฝ์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  Key๊ธฐ์ค€ merge
df_merge_how_outer = pd.merge(df_left, df_right, how='outer', on='KEY') 

# ๊ฐ ๋ฐ์ดํ„ฐ๊ฐ€ left, right ๋˜๋Š” ์–‘์ชฝ์˜ ์ถœ์ฒ˜์ธ์ง€ ํ‘œ์‹œ(_merge๋ž€ ์ปฌ๋Ÿผ์— ํ‘œ์‹œ)
pd.merge(df_left, df_right, how='outer', on='KEY', indicator=True) 

#์–‘์ชฝ์˜ ์ปฌ๋Ÿผ๋ช…์ด ์ค‘๋ณต๋ ๋•Œ _left๋‚˜ _right๋ฅผ ์ปฌ๋Ÿผ๋ช…์— ์ถ”๊ฐ€ํ•จ
pd.merge(df_left_2, df_right_2, how='inner', on='KEY', suffixes=('_left', '_right')) 

+ Recent posts