[AIS7] DL (2)

BBakHyeยท2022๋…„ 11์›” 29์ผ
0

๐Ÿฆ AI SCHOOL 7๊ธฐ

๋ชฉ๋ก ๋ณด๊ธฐ
37/52
post-thumbnail

๐Ÿ’ก ์ฐธ๊ณ ํ•  ๋งŒํ•œ ๋งํฌ๋“ค
But what is a neural network? | Chapter 1, Deep learning
์ž์Šตํ•ด๋„ ๋ชจ๋ฅด๊ฒ ๋˜ แ„ƒแ…ตแ†ธแ„…แ…ฅแ„‚แ…ตแ†ผ, ๋จธ๋ฆฌ์†์— ์ธ์Šคํ†จ ์‹œ์ผœ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๐Ÿ’ก ๋ณดํ†ต ์ •ํ˜•๋ฐ์ดํ„ฐ์—์„œ๋Š” ๋จธ์‹ ๋Ÿฌ๋‹์ด ์ข€ ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ๋ณด์ด๊ธฐ๋„ ํ•œ๋‹ค.

Fully Connected Network == Deep Neural Network (DNN)

๐Ÿค” Fully Connected Network์—๋Š” ๋ฐ์ดํ„ฐ๋ฅผ 1์ฐจ์› ํ˜•ํƒœ๋กœ ์ฃผ์ž…ํ•ด์•ผ ํ•˜๋Š”๋ฐ ์–ด๋–ป๊ฒŒ ๋น„์ •ํ˜• ๋ฐ์ดํ„ฐ(ํ‘œํ˜•ํƒœ๊ฐ€ ์•„๋‹ˆ๋ผ ์ด๋ฏธ์ง€, ์Œ์„ฑ, ํ…์ŠคํŠธ ๋“ฑ)๋ฅผ ๋‹ค๋ฃฐ๊นŒ?
Fully Connected Network์—๋Š” ๋ฐ์ดํ„ฐ๋ฅผ 1์ฐจ์› ํ˜•ํƒœ๋กœ๋งŒ ์ฃผ์ž…์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์ „์ฒ˜๋ฆฌ ๋ ˆ์ด์–ด์—์„œ ์ด๋ฏธ์ง€, ์Œ์„ฑ, ํ…์ŠคํŠธ ๋“ฑ์„ ์ „์ฒ˜๋ฆฌ ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋”ฐ๋กœ ์ œ๊ณตํ•œ๋‹ค.
CNN, RNN ์—์„œ ์ „์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ  ๋งˆ์ง€๋ง‰์—๋Š” Fully Connected Network ๋ฅผ ํ†ต๊ณผํ•˜๊ฒŒ ๋œ๋‹ค.

  • CNN (์ฃผ๋กœ ์ด๋ฏธ์ง€), RNN (์ฃผ๋กœ ํ…์ŠคํŠธ)

๐Ÿ’ก ์„ค๋ช… ๊ฐ€๋Šฅํ•œ ์ธ๊ณต์ง€๋Šฅ ๋„๊ตฌ ์ค‘ ํ•˜๋‚˜: https://wandb.ai/site

๐Ÿค” dropout์€ ๋ฌด์—‡์ด๊ณ  ์™œ ์‚ฌ์šฉํ• ๊นŒ?
์ผ๋ถ€ ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ ๊ณผ๋Œ€์ ํ•ฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

MNIST ์†๊ธ€์”จ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ์…‹ ์‹ค์Šต (๋ถ„๋ฅ˜)

https://www.tensorflow.org/tutorials/quickstart/beginner

๐Ÿค” Dense layer๋ž€?

output = activation(dot(input, kernel) + bias)
์ถœ๋ ฅ = ํ™œ์„ฑํ™”ํ•จ์ˆ˜(ํ–‰๋ ฌ๊ณฑ(input, kernel) + ํŽธํ–ฅ)

tf.keras.layers.Dense(units=128, activation='relu')

๐Ÿ’ก units(๋…ธ๋“œ) ๊ฐœ์ˆ˜, ์ธต(๋ ˆ์ด์–ด)์ˆ˜๋Š” ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ

# ์‹ค์Šต 
units == nodes == 
# ์ž…๋ ฅ - ์€๋‹‰์ธต - ์ถœ๋ ฅ์ธต์œผ๋กœ ๊ตฌ์„ฑ๋œ ๋„คํŠธ์›Œํฌ ๋ชจ๋ธ
model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),    # ์ž…๋ ฅ์ธต
  tf.keras.layers.Dense(units=128, activation='relu'),
  tf.keras.layers.Dropout(0.2),  # ์ผ๋ถ€ ๋…ธ๋“œ ์ œ๊ฑฐ (overfitting ๋ฐฉ์ง€)
# ํ™œ์„ฑํ™” ํ•จ์ˆ˜. softmax๋Š” ํ™•๋ฅ ๊ฐ’ ๋ฐ˜ํ™˜
  tf.keras.layers.Dense(10, activation='softmax')  
])

# ์‹ ๊ฒฝ๋ง ๋ชจ๋ธ์„ ๋งŒ๋“ค๋ ค๋ฉด ๋ชจ๋ธ์˜ ์ธต์„ ๊ตฌ์„ฑํ•œ ๋‹ค์Œ ๋ชจ๋ธ์„ ์ปดํŒŒ์ผํ•ด์•ผ ํ•จ.
model.compile(optimizer='adam',    # optimizer: ์ตœ์ ํ™” ํ•จ์ˆ˜
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
  • optimizer: ์˜ค์ฐจ๊ฐ€ ์ตœ์†Œ๊ฐ€ ๋˜๋Š” ์ง€์ ์„ ์ฐพ๊ธฐ ์œ„ํ•œ optimizer, ๊ธฐ์šธ๊ธฐ, ๋ฐฉํ–ฅ, learning rate๋ฅผ ๊ณ ๋ ค
  • loss: ์†์‹ค์œจ ์ธก์ •
  • metrics: ํ‰๊ฐ€์ง€ํ‘œ

๐Ÿ’ก epoch๋Š” ํ•™์Šต ํšŸ์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๊ณ  epoch ํ•œ ๋ฒˆ๋‹น ์ˆœ์ „ํŒŒ์™€ ์—ญ์ „ํŒŒ๋ฅผ ํ•œ ๋ฒˆ์”ฉ ๋Œ๋ฉด์„œ loss๊ฐ’ ์ถœ๋ ฅ

๐Ÿ“Œ ๋ถ„๋ฅ˜์˜ ์†์‹ค ํ•จ์ˆ˜

๋ถ„๋ฅ˜์—์„œ๋Š” ๋ณดํ†ต ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉ:

  • optimizer='adam'
  • loss='sparse_categorical_crossentropy',

์ถœ์ฒ˜: https://gombru.github.io/2018/05/23/cross_entropy_loss/

โœ… Cross entropy
: ๋ถ„๋ฅ˜ ๊ฒฐ๊ณผ์˜ ํ’ˆ์งˆ์„ ์ธก์ •ํ•˜๊ธฐ ์œ„ํ•œ Loss function

  • ์–‘์ˆ˜๋กœ ๋งŒ๋“ค์–ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ ๊ณต์‹ ์•ž์— ๋งˆ์ด๋„ˆ์Šค๋ฅผ ๋ถ™์ธ๋‹ค.

๐Ÿ“Œ Activation function - Sigmoid์™€ Softmax

์ถœ์ฒ˜: ๋ฉ‹์Ÿ์ด ์‚ฌ์ž์ฒ˜๋Ÿผ AI SCHOOL ๋ฐ•์กฐ์€ ๊ฐ•์‚ฌ๋‹˜ ์ˆ˜์—… ์ž๋ฃŒ 15๋ฒˆ์งธ ppt, p.69

๐Ÿค” ํŠน์ • ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์ถœ๋ ฅ์ด [0.1, 0.05, 0.7, 0.15] ์ด๋ ‡๊ฒŒ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™”๋‹ค๋ฉด ์—ฌ๊ธฐ์—์„œ ์˜ˆ์ธก๊ฐ’์˜ ๋‹ต์„ ๋ฌด์—‡์œผ๋กœ ํ•˜๋ฉด ๋ ๊นŒ?
A: 2, softmax๋Š” ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š”๋ฐ 2๋ฒˆ ์ธ๋ฑ์Šค (0.7)๊ฐ€ ๊ฐ€์žฅ ํฐ ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ

๐Ÿค” ํŠน์ • ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์ถœ๋ ฅ์ด [0.1, 0.05, 0.7, 0.15] ์ด๋ ‡๊ฒŒ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™”๋‹ค๋ฉด ์ด ์ •๋‹ต ํด๋ž˜์Šค์˜ ์ข…๋ฅ˜์˜ ๊ฐœ์ˆ˜๋Š” ๋ช‡๊ฐœ์ผ๊นŒ?
A: 4, 4๊ฐœ ์ค‘์— ํ•˜๋‚˜๋ฅผ ๋ถ„๋ฅ˜ํ•˜๋Š” ๋ชจ๋ธ์ด๊ธฐ ๋•Œ๋ฌธ

์ถœ์ฒ˜: https://jjeongil.tistory.com/977

๐Ÿ“Œ ์ตœ์ ํ™” ํ•จ์ˆ˜ (Optimizer)

: ์†์‹ค ํ•จ์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ€์ค‘์น˜๋ฅผ ๊ฐฑ์‹ ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
: ๋ชจ๋ธ์ด ์ธ์‹ํ•˜๋Š” ๋ฐ์ดํ„ฐ์™€ ํ•ด๋‹น ์†์‹ค ํ•จ์ˆ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ชจ๋ธ์ด ์—…๋ฐ์ดํŠธ๋˜๋Š” ๋ฐฉ์‹

๐Ÿค” Optimizer๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ?
Local minimum์— ๋น ์ ธ global minimum๋ฅผ ์ฐพ์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ (= loss์˜ ์ตœ์†Ÿ๊ฐ’ ์ฐพ๊ธฐ)

  • ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•์— ๊ธฐ๋ฐ˜์„ ๋‘” optimizer: SGD, RMSProp, Adagrad, Adam, etc.
  • ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•์€ ๋‚ด๋ ค๊ฐ€๋Š” ๋ฐฉํ–ฅ์„ ์ฐพ๋Š” ๋ฒ•
  • optimizer๋Š” ํšจ์œจ์ (์‹œ๊ฐ„, ์„ฑ๋Šฅ ๊ณ ๋ ค)์œผ๋กœ ํƒ์ƒ‰

Optimizer๋Š” ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ• ์™ธ ์—ฌ๋Ÿฌ๊ฐ€์ง€๋ฅผ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ adam์— ๋น„ํ•ด ๋Œ€๋ถ€๋ถ„ ์†๋„๊ฐ€ ๋Š๋ฆฐ ํŽธ. ๋Œ€์ฒด์ ์œผ๋กœ adam์„ ์‚ฌ์šฉํ•˜๋ฉด ์†๋„๋„ ๋น ๋ฅด๊ณ  ํ•™์Šต๋„ ์ž˜ ํ•˜๋Š” ํŽธ์ด๋‹ค.

์ถœ์ฒ˜: https://www.slideshare.net/yongho/ss-79607172/49

์˜๋ฅ˜ ์ด๋ฏธ์ง€ ๋ถ„๋ฅ˜ ์‹ค์Šต

https://www.tensorflow.org/tutorials/keras/classification

๐Ÿ’ก plt.imshow(train_images[0]): sns.heatmap๊ณผ ๊ฐ™์ด matplotlib์˜ ์‹œ๊ฐํ™” ๊ธฐ๋Šฅ

# ๋ชจ๋ธ ํ•™์Šต
model.fit(train_images, train_labels, epochs=10)
  • epoch๊ฐ€ ์ฆ๊ฐ€ํ• ์ˆ˜๋ก loss๊ฐ€ ์ค„์–ด๋“ค๊ณ  accuracy๊ฐ€ ์˜ฌ๋ผ๊ฐ„๋‹ค.
  • epoch๊ฐ€ ์ฆ๊ฐ€ํ• ์ˆ˜๋ก loss๊ฐ€ ๊ฐ์†Œํ•˜์ง€ ์•Š๊ณ  accuracy๊ฐ€ ๋‚˜์•„์ง€์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋” ์ด์ƒ ํ•™์Šตํ•˜์ง€ ์•Š๊ณ  ์ค‘๋‹จํ•  ์ˆ˜๋„ ์žˆ๋‹ค (using early_stop).
  • loss๋Š” cross entropy๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ํ™•๋ฅ ๊ฐ’์ด ์–ผ๋งˆ๋‚˜ ์„ž์—ฌ์žˆ๋Š”์ง€ ํ™•์ธ
  • 0์— ๊ฐ€๊นŒ์šธ ์ˆ˜๋ก ๋‹ค๋ฅธ ํ™•๋ฅ ๊ฐ’์ด ์„ž์—ฌ์žˆ์ง€ ์•Š์€ ๊ฒƒ

์ถœ์ฒ˜: ๋ฉ‹์Ÿ์ด ์‚ฌ์ž์ฒ˜๋Ÿผ AI SCHOOL ๋ฐ•์กฐ์€ ๊ฐ•์‚ฌ๋‹˜ ์ˆ˜์—… ์ž๋ฃŒ 15๋ฒˆ์งธ ppt, p.81

loss ๊ฐ’์„ ๋ณด๊ณ  label ์ด ์–ด๋–ค ํ˜•ํƒœ์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค. label ๊ฐ’์ด binary, one-hot, oridinal encoding ์ด ๋˜์–ด์žˆ๋ƒ์— ๋”ฐ๋ผ loss๊ฐ’์„ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค.

๐Ÿ“Œ ๋‘ ๋น„์ •ํ˜• ๋ฐ์ดํ„ฐ ์‹ค์Šต์˜ Summary

1) ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ์— ์ ์šฉํ•œ๋‹ค๋ฉด ์ธต ๊ตฌ์„ฑ์„ ์–ด๋–ป๊ฒŒ ํ• ๊ฒƒ์ธ๊ฐ€?
์ž…๋ ฅ-์€๋‹‰-์ถœ๋ ฅ์ธต์œผ๋กœ ๊ตฌ์„ฑ
2) ์˜ˆ์ธกํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด ๋ถ„๋ฅ˜(์ด์ง„, ๋ฉ€ํ‹ฐํด๋ž˜์Šค), ํšŒ๊ท€์ธ์ง€์— ๋”ฐ๋ผ ์ถœ๋ ฅ์ธต ๊ตฌ์„ฑ, loss ์„ค์ •์ด ๋‹ฌ๋ผ์ง„๋‹ค.
3) ๋ถ„๋ฅ˜, ํšŒ๊ท€์— ๋”ฐ๋ผ ์ธก์ • ์ง€ํ‘œ ์ •ํ•˜๊ธฐ
4) ํ™œ์„ฑํ™”ํ•จ์ˆ˜๋Š” ReLU๋ฅผ ์‚ฌ์šฉ, optimizer๋กœ๋Š” adam์„ ์‚ฌ์šฉํ•˜๋ฉด baseline ์ •๋„์˜ ์Šค์ฝ”์–ด๊ฐ€ ๋‚˜์˜จ๋‹ค.
5) fit์„ ํ•  ๋•Œ epoch๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๋ฒˆ ํ•™์Šต์„ ์ง„ํ–‰

์ด ๋•Œ,

  • epoch ์ˆ˜๊ฐ€ ๋งŽ์„ ์ˆ˜๋ก ๋Œ€์ฒด์ ์œผ๋กœ ์ข‹์€ ์„ฑ๋Šฅ์„ ๋‚ด์ง€๋งŒ overfitting์ด ๋  ์ˆ˜๋„ ์žˆ๋‹ค.
  • epoch ์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ์ ๋‹ค๋ฉด underfitting์ด ๋  ์ˆ˜๋„ ์žˆ๋‹ค.

๐Ÿ’ก ํ…์„œํ”Œ๋กœ VS ํŒŒ์ดํ† ์น˜์˜ ์ฐจ์ด
: seaborn VS plotnine ์ฒ˜๋Ÿผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋„๊ตฌ์˜ API ์ฐจ์ด ์ž…๋‹ˆ๋‹ค.

์‹œ๊ฐํ™” ํ•  ๋•Œ๋„ data, x, y, color(hue) ์ด๋Ÿฐ ์šฉ์–ด๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด API ๊ฐ€ ๋‹ฌ๋ผ์ง€๋”๋ผ๋„ ๋น„์Šทํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
์ง์ ‘ ๋”ฅ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ๋ฐ‘๋ฐ”๋‹ฅ๋ถ€ํ„ฐ ์งœ์„œ ๊ตฌํ˜„ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๊ธฐ๋Šฅ๋“ค์„ ํ•จ์ˆ˜๋‚˜ ๋ฉ”์„œ๋“œ๋กœ ๊ฐ์‹ธ์„œ ์ฝ”๋“œ ์—ฌ๋Ÿฌ ์ค„์„ ํ•œ ๋‘์ค„์˜ API ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด ๋†“์€ ๋„๊ตฌ ์ž…๋‹ˆ๋‹ค.

0901 ์‹ค์Šต

๐Ÿ’ก ๋จธ์‹ ๋Ÿฌ๋‹ ์ˆ˜์—…์—์„œ ์‹ค์Šต ํ–ˆ๋˜ ๋‹น๋‡จ๋ณ‘ ๋ฐ์ดํ„ฐ์…‹์„ ๋”ฅ๋Ÿฌ๋‹์œผ๋กœ ์‹ค์Šตํ•ด๋ณด๊ธฐ

๐Ÿ“Œ ๋”ฅ๋Ÿฌ๋‹ ๋ ˆ์ด์–ด ๋งŒ๋“ค๊ธฐ

1) ์ธต ์„ค์ •

  • ์‹ ๊ฒฝ๋ง์˜ ๊ธฐ๋ณธ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ์ธต(layer)์ž…๋‹ˆ๋‹ค.
  • ์ธต์€ ์ฃผ์ž…๋œ ๋ฐ์ดํ„ฐ์—์„œ ํ‘œํ˜„์„ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
  • ๋Œ€๋ถ€๋ถ„ ๋”ฅ๋Ÿฌ๋‹์€ ๊ฐ„๋‹จํ•œ ์ธต์„ ์—ฐ๊ฒฐํ•˜์—ฌ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • tf.keras.layers.Dense์™€ ๊ฐ™์€ ์ธต๋“ค์˜ ๊ฐ€์ค‘์น˜(parameter)๋Š” ํ›ˆ๋ จํ•˜๋Š” ๋™์•ˆ ํ•™์Šต๋ฉ๋‹ˆ๋‹ค.

2) Dense Layer

  • ๋ฐ€์ง‘ ์—ฐ๊ฒฐ(densely-connected) ๋˜๋Š” ์™„์ „ ์—ฐ๊ฒฐ(fully-connected) ์ธต์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.
  • ์ฒซ ๋ฒˆ์งธ Dense ์ธต์€ 128๊ฐœ์˜ ๋…ธ๋“œ(๋˜๋Š” ๋‰ด๋Ÿฐ)๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
  • ๋งˆ์ง€๋ง‰ ์ธต์€ ์ถœ๋ ฅ์ธต ์ž…๋‹ˆ๋‹ค.
  • ์†Œํ”„ํŠธ๋งฅ์Šค ์ผ ๋•Œ : n๊ฐœ์˜ ๋…ธ๋“œ์˜ ์†Œํ”„ํŠธ๋งฅ์Šค(softmax) ์ธต์ž…๋‹ˆ๋‹ค. ์ด ์ธต์€ n๊ฐœ์˜ ํ™•๋ฅ ์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๋ฐ˜ํ™˜๋œ ๊ฐ’์˜ ์ „์ฒด ํ•ฉ์€ 1์ž…๋‹ˆ๋‹ค.
    ๊ฐ ๋…ธ๋“œ๋Š” ํ˜„์žฌ ์ด๋ฏธ์ง€๊ฐ€ n๊ฐœ ํด๋ž˜์Šค ์ค‘ ํ•˜๋‚˜์— ์†ํ•  ํ™•๋ฅ ์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  • ์‹œ๊ทธ๋ชจ์ด๋“œ ์ผ ๋•Œ : ๋‘˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ์˜ˆ์ธกํ•  ๋•Œ 1๊ฐœ์˜ ์ถœ๋ ฅ๊ฐ’์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ํ™•๋ฅ ์„ ๋ฐ›์•„ ์ž„๊ณ„๊ฐ’ ๊ธฐ์ค€์œผ๋กœ True, False๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค.

3) ์ถœ๋ ฅ์ธต

  • ์˜ˆ์ธก ๊ฐ’์ด n๊ฐœ ์ผ ๋•Œ : ์ถœ๋ ฅ์ธต ๋…ธ๋“œ n๊ฐœ
    tf.keras.layers.Dense(n, activation='softmax')
  • ์˜ˆ์ธก ๊ฐ’์ด ๋‘˜ ์ค‘ ํ•˜๋‚˜์ผ ๋•Œ : ์ถœ๋ ฅ์ธต ๋…ธ๋“œ 1๊ฐœ
    tf.keras.layers.Dense(1, activation='sigmoid')
# tf.keras.models.Sequential ๋กœ ์ž…๋ ฅ-ํžˆ๋“ -์ถœ๋ ฅ(sigmoid) ๋ ˆ์ด์–ด๋กœ ๊ตฌ์„ฑ
model = tf.keras.models.Sequential([

# ๐Ÿค” ์ถœ๋ ฅ์ธต์„ flatten ๋Œ€์‹  dense๋ฅผ ์‚ฌ์šฉํ•œ ์ด์œ ? 
# flatten ์€ 2์ฐจ์›์„ 1์ฐจ์›์œผ๋กœ ๋งŒ๋“ค์–ด ์ฃผ๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— 
# 1์ฐจ์› ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ•ด๋‹น ์‹ค์Šต์—์„œ๋Š” dense๋ฅผ ์‚ฌ์šฉ
  tf.keras.layers.**Dense**(units=128, input_shape=[input_shape]),  # ์ž…๋ ฅ์ธต
  tf.keras.layers.Dense(128, activation='relu'),   # ํžˆ๋“ ๋ ˆ์ด์–ด
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(1, activation='sigmoid')   # ์ถœ๋ ฅ์ธต
])

๐Ÿค” ์ถœ๋ ฅ์ธต์„ flatten ๋Œ€์‹  dense๋ฅผ ์‚ฌ์šฉํ•œ ์ด์œ ?
flatten ์€ 2์ฐจ์›์„ 1์ฐจ์›์œผ๋กœ ๋งŒ๋“ค์–ด ์ฃผ๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ

๐Ÿ“Œ ๋ชจ๋ธ ์ปดํŒŒ์ผ

: ๋ชจ๋ธ์„ ํ›ˆ๋ จํ•˜๊ธฐ ์ „์— ํ•„์š”ํ•œ ๋ช‡ ๊ฐ€์ง€ ์„ค์ • ์ถ”๊ฐ€ํ•˜๋Š” ๋‹จ๊ณ„

  • ์˜ตํ‹ฐ๋งˆ์ด์ €(Optimizer): ๋ฐ์ดํ„ฐ์™€ ์†์‹ค ํ•จ์ˆ˜๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋ชจ๋ธ์˜ ์—…๋ฐ์ดํŠธ ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ์ง€ํ‘œ(Metrics): ํ›ˆ๋ จ ๋‹จ๊ณ„์™€ ํ…Œ์ŠคํŠธ ๋‹จ๊ณ„๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์˜ˆ์—์„œ๋Š” ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ถ„๋ฅ˜๋œ ์ด๋ฏธ์ง€์˜ ๋น„์œจ์ธ ์ •ํ™•๋„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์†์‹ค ํ•จ์ˆ˜(Loss function): ํ›ˆ๋ จ ํ•˜๋Š” ๋™์•ˆ ๋ชจ๋ธ์˜ ์˜ค์ฐจ๋ฅผ ์ธก์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ์˜ ํ•™์Šต์ด ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ํ–ฅํ•˜๋„๋ก ์ด ํ•จ์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ตœ์ ์˜ ๊ฐ€์ค‘์น˜๋ฅผ ์ฐพ๋„๋ก ํ•ด์•ผํ•จ
    • ํšŒ๊ท€ : MSE, MAE
    • ๋ถ„๋ฅ˜ :
      • ๋ฐ”์ด๋„ˆ๋ฆฌ(์˜ˆ์ธกํ•  ๊ฐ’์˜ ์ข…๋ฅ˜๊ฐ€ ๋‘˜ ์ค‘ ํ•˜๋‚˜) :
        • binary_crossentropy
      • ๋ฉ€ํ‹ฐํด๋ž˜์Šค(์˜ˆ์ธกํ•  ๊ฐ’์˜ ์ข…๋ฅ˜๊ฐ€ 2๊ฐœ ์ด์ƒ) :
        • categorical crossentropy(one-hotํ˜•ํƒœ์˜ ํด๋ž˜์Šค ์˜ˆ: [0, 1, 0, 0])
        • sparse categorical crossentropy(์ •๋‹ต๊ฐ’์ด 0, 1, 2, 3, 4 ์™€ ๊ฐ™์€ ํ˜•ํƒœ์ผ ๋•Œ)
# ๋ชจ๋ธ ์ปดํŒŒ์ผ
model.compile(optimizer='adam',
              loss='binary_crossentropy', # ๋‹น๋‡จ๋ณ‘ ์—ฌ๋ถ€
              metrics=['accuracy'])		  # ๋ถ„๋ฅ˜์ธก์ •์ง€ํ‘œ

# early_stop ์„ค์ •
class PrintDot(tf.keras.callbacks.Callback):
    def on_epoch_end(self, epoch, logs):
        if epoch % 100 == 0: print('')
        print('.', end='')

# val_loss ๊ธฐ์ค€์œผ๋กœ ๊ฐ’์ด ๋‚˜์•„์ง€์ง€ ์•Š์œผ๋ฉด ๋ฉˆ์ถ”๊ฒŒ ํ•œ๋‹ค.
early_stop = tf.keras.callbacks.EarlyStopping(monitor='val_loss',
patience=10)

๐Ÿ™‹๐Ÿปโ€โ™€๏ธ ์งˆ๋ฌธ

Q: 28x28 ์ด๋ฏธ์ง€๋กœ ํ•™์Šต์„ ํ•˜๋Š”๋ฐ ์™œ ์ž…๋ ฅ์— 784๊ฐœ๊ฐ€ ๋“ค์–ด๊ฐˆ๊นŒ์š”?
A: 28 * 28 = 784

Fully Connected Network์—๋Š” 2์ฐจ์› ํ˜•ํƒœ๋ฅผ ๊ทธ๋Œ€๋กœ ๋„ฃ์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— 1์ฐจ์›์œผ๋กœ ํ˜•ํƒœ๋ฅผ ๋ณ€ํ™˜(ํ‰ํƒ„ํ™”)ํ•ด์•ผ ํ•œ๋‹ค.

Q: MNIST ์‹ค์Šต๊ณผ FMNIST ์‹ค์Šต์˜ ์ฐจ์ด์ ?
A: MNIST๋Š” dropout์„ ํ•ด์คฌ๊ณ , FMNIST์—์„œ๋Š” ์ถœ๋ ฅ์ธต์—์„œ softmax ์•ˆ์จ์ฃผ๊ณ  10๋งŒ ์จ์คฌ๋‹ค. FMNIST๋Š” ๊ฒฐ๊ณผ๋ฅผ ์‹œ๊ฐํ™”ํ•ด์„œ ๋ณด๊ธฐ๊ฐ€ ์ข‹์•˜๋‹ค. ํ™•๋ฅ ๊ฐ’๋„ ์‹œ๊ฐํ™”ํ•ด์„œ ์ง๊ด€์ ์ด์—ˆ๋‹ค.

Q: ๋‹น๋‡จ๋ณ‘ ์—ฌ๋ถ€ ์˜ˆ์ธก ๋ฌธ์ œ์—์„œ๋Š” ์ถœ๋ ฅ์ธต์„ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑํ•ด์•ผ ํ• ๊นŒ์š”?
A: ์‹œ๊ทธ๋ชจ์ด๋“œ (๋‹น๋‡จ๋ณ‘ ์—ฌ๋ถ€)


๐Ÿฆ ์งˆ๋ฌธ

Q: bias๊ฐ€ ์ž„๊ณ„๊ฐ’ ์กฐ์ ˆ์ด ๋งž๋‚˜์š”?
A: ์ž„๊ณ„๊ฐ’์€ ํ™œ์„ฑํ™” ํ•จ์ˆ˜ == activation function ์˜ ์ถœ๋ ฅ ๊ธฐ์ค€์ด ๋ฉ๋‹ˆ๋‹ค.

Q: bias๋ฅผ ์™œ ๋”ํ•ด์ฃผ๋‚˜์š”?
A: weight๋Š” ๋‘๋ฒˆ์งธ ๋ ˆ์ด์–ด๊ฐ€ ์„ ํƒํ•˜๋ ค๋Š” ๋‰ด๋Ÿฐ์˜ ํ”ฝ์…€ ํŒจํ„ด์„ ์•Œ๋ ค์ฃผ๋ฉฐ bias๋Š” ๋‰ด๋Ÿฐ์ด ํ™œ์„ฑํ™”๋˜๋ ค๋ฉด ๊ฐ€์ค‘์น˜์˜ ํ•ฉ์ด ์–ผ๋งˆ๋‚˜ ๋” ๋†’์•„์•ผ ํ•˜๋Š”์ง€๋ฅผ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

Q: Tanh๋„ ๊ธฐ์šธ๊ธฐ์†Œ์‹ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ™œ์„ฑํ™” ํ•จ์ˆ˜์ธ๊ฐ€์š”?
A: sigmoid[0, 1]์™€ ๋น„์Šทํ•˜๊ฒŒ tanh[-1, 1] ๋กœ ๋ฒ”์œ„๊ฐ€ ์ข€๋” ๋„“์Šต๋‹ˆ๋‹ค. ๊ธฐ์šธ๊ธฐ ์†Œ์‹ค๋ฌธ์ œ๋Š” ์žˆ์ง€๋งŒ ์ข€๋” ๋น ๋ฆ…๋‹ˆ๋‹ค.

Q: tf.keras.layers.Dropout(0.2)
์—ฌ๊ธฐ์„œ๋Š” ๋”ฑ 0.2 ๋งŒ ๋“œ๋ž์•„์›ƒ์„ ํ•˜๋Š” ๊ฑด๊ฐ€์š”? ์•„๋‹ˆ๋ฉด ๊ทธ ์•„๋ž˜๊ฐ’๋„ ๋‹ค dropout ํ•˜๋Š” ๊ฑด๊ฐ€์š”?
A: ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ * 0.2 ๋งŒํผ (20%)์˜ ์ˆ˜๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์•„๋ž˜ ๊ฐ’์€ ์ถœ๋ ฅ์ธต์ด๋ผ ์ƒ๊ด€ ์—†์–ด์š”. ํ•ด๋‹น ์ธต์— ์žˆ๋Š” ๋…ธ๋“œ(units)๋งŒ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

Q: ๋ชจ๋ธ์„ ์ปดํŒŒ์ผ ํ•ด์ค„ ๋•Œ ๋งˆ๋‹ค ์ •๋‹ตํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ๋‚˜์˜ค๋Š”๋ฐ ๋ชจ๋ธ ์„ฑ๋Šฅ์ด ์•ˆ์ข‹์•„์„œ์ผ๊นŒ์š”?
A: ํ•œ ๋ฒˆ๋งŒ ํ•™์Šต์„ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ฒˆ ํ•™์Šตํ•˜๋ฉด ์„ฑ๋Šฅ์ด ๋” ์ข‹์•„์ง‘๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ๋ฒˆ ํ•™์Šตํ•˜๋ฉด ํ•™์Šต์„ ํ•˜๋ฉฐ weight์™€ bias๊ฐ’์„ ์—…๋ฐ์ดํŠธ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— loss๊ฐ€ ์ ์  ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

Q: ์ถœ๋ ฅ์ธต ์ฝ”๋“œ์— ์†Œํ”„ํŠธ ๋งฅ์Šค๊ฐ€ ์—†๋Š”๋ฐ ๋””ํดํŠธ๊ฐ€ ์†Œํ”„ํŠธ๋งฅ์Šค์ธ๊ฐ€์š”?
A: ๋„ค. 2๊ฐœ๋ผ๋„ ๊ธฐ๋ณธ์ด softmax ์ด๊ณ  ์‹ค์Šตํ•  ๋•Œ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ถ„๋ฅ˜๋ฅผ ํ•  ์˜ˆ์ •์ด๋ผ sigmoid ๋กœ ์ง€์ •ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.


โœ๏ธ TIL

  • ์‚ฌ์‹ค(Fact): MNIST, FMNIST์™€ 0901 ํŒŒ์ผ์„ ํ†ตํ•ด ๋”ฅ๋Ÿฌ๋‹ ๊ธฐ์ดˆ์— ๋Œ€ํ•ด ์‹ค์Šตํ–ˆ๋‹ค.
  • ๋Š๋‚Œ(Feeling): ์•Œ ๋“ฏ ๋ง ๋“ฏ ํ•˜๋‹ค.
  • ๊ตํ›ˆ(Finding): ๊พธ์ค€ํžˆ ๊ณต๋ถ€ํ•˜์ž!
profile
๋ฐ์ดํ„ฐ ๋ถ„์„๊ฐ€๊ฐ€ ๋˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ก โœ๏ธ

0๊ฐœ์˜ ๋Œ“๊ธ€