๐Ÿ˜Ž ๊ณต๋ถ€ํ•˜๋Š” ์ง•์ง•์•ŒํŒŒ์นด๋Š” ์ฒ˜์Œ์ด์ง€?

Model(), compile(), fit(), predict(), save() ๋ณธ๋ฌธ

๐Ÿ‘ฉ‍๐Ÿ’ป ์ธ๊ณต์ง€๋Šฅ (ML & DL)/ML & DL

Model(), compile(), fit(), predict(), save()

์ง•์ง•์•ŒํŒŒ์นด 2022. 9. 14. 15:41
728x90
๋ฐ˜์‘ํ˜•

220914 ์ž‘์„ฑ

<๋ณธ ๋ธ”๋กœ๊ทธ๋Š” handuelly ๋‹˜์˜ ๋ธ”๋กœ๊ทธ์™€ wikidocs์˜ ์ผ€๋ผ์Šค ํฌ์ŠคํŠธ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค :-) >

https://blog.naver.com/handuelly/221822938182

 

Keras - ๋‹ค์ธต Sequential Model(), compile(), fit()

# Sequention Model(๋‹ค์ธต) # 5๋ฒˆ ๋ผ์ธ, dense_1 : ์‹ ๊ฒฝ๋ง ํ•˜๋‚˜๋‹น 3๊ฐœ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ(2๊ฐœ์˜ Input + 1๊ฐœ์˜ ...

blog.naver.com

https://wikidocs.net/32105

 

07) ์ผ€๋ผ์Šค(Keras) ํ›‘์–ด๋ณด๊ธฐ

์ด ์ฑ…์—์„œ๋Š” ๋”ฅ ๋Ÿฌ๋‹์„ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ์ด์ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ ์ผ€๋ผ์Šค(Keras)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ผ€๋ผ์Šค๋Š” ์œ ์ €๊ฐ€ ์†์‰ฝ๊ฒŒ ๋”ฅ ๋Ÿฌ๋‹์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์ƒ์œ„ ๋ ˆ๋ฒจ์˜ ์ธํ„ฐ ...

wikidocs.net

 

 

 

 

๐Ÿ˜Ž complie()

: ๋ชจ๋ธ์„ ๋นŒ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ์ปดํŒŒ์ผ ํ•˜๋Š” ํ›ˆ๋ จ ์ค€๋น„ ๋‹จ๊ณ„

model.compile(
    optimizer='adam',
    loss='mean_squared_error',
    metrics=[
        metrics.MeanSquaredError(),
        metrics.AUC(),
    ]
)
model.compile(
    optimizer='adam',
    loss='sparse_categorical_crossentropy',
    metrics=[
        metrics.MeanSquaredError(name='my_mse'),
        metrics.AUC(name='my_auc'),
    ]
)
  • loss
    • ์ตœ์ ํ™” ๊ณผ์ •์—์„œ ์ตœ์†Œํ™”๋  ์†์‹คํ•จ์ˆ˜๋ฅผ ์„ค์ •
    • MSE(ํ‰๊ท  ์ œ๊ณฑ ์˜ค์ฐจ)
    • binary_crossentropy
    • categorical_crossentropy ํ•จ์ˆ˜
    • sparse_categorical_crossentropy ํ•จ์ˆ˜
    • ํฌ์•„์†ก ํ•จ์ˆ˜
    • KL๋‹ค์ด๋ฒ„์ „์Šค ํด๋ž˜์Šค
  • optimizer
    • ํ›ˆ๋ จ ๊ณผ์ •์„ ์„ค์ •
    • Adam
    • ํ™•๋ฅ ์  ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ• (Stochastic Gradient Descent, SGD)
    • RMSProp
    • Adagrad
    • Adadelta 
  • metrics
    • ํ›ˆ๋ จ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
    • Accuracy class
    • BinaryAccuracy class
    • CategoricalAccuracy class

 

 
๋Œ€ํ‘œ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์†์‹ค ํ•จ์ˆ˜์™€ ํ™œ์„ฑํ™” ํ•จ์ˆ˜์˜ ์กฐํ•ฉ
๋ฌธ์ œ ์œ ํ˜• ์†์‹ค ํ•จ์ˆ˜๋ช… ์ถœ๋ ฅ์ธต ํ™œ์„ฑํ™” ํ•จ์ˆ˜ ์ฐธ๊ณ  ์‹ค์Šต
ํšŒ๊ท€ ๋ฌธ์ œ mean_squared_error - ์„ ํ˜• ํšŒ๊ท€ ์‹ค์Šต
๋‹ค์ค‘ ํด๋ž˜์Šค ๋ถ„๋ฅ˜ categorical_crossentropy ์†Œํ”„ํŠธ๋งฅ์Šค ๋กœ์ดํ„ฐ ๋‰ด์Šค ๋ถ„๋ฅ˜ํ•˜๊ธฐ
๋‹ค์ค‘ ํด๋ž˜์Šค ๋ถ„๋ฅ˜ sparse_categorical_crossentropy ์†Œํ”„ํŠธ๋งฅ์Šค ์–‘๋ฐฉํ–ฅ LSTM๋ฅผ ์ด์šฉํ•œ ํ’ˆ์‚ฌ ํƒœ๊น…
์ด์ง„ ๋ถ„๋ฅ˜ binary_crossentropy ์‹œ๊ทธ๋ชจ์ด๋“œ IMDB ๋ฆฌ๋ทฐ ๊ฐ์„ฑ ๋ถ„๋ฅ˜ํ•˜๊ธฐ

 

 

๐Ÿ˜Ž fit()

: ์ฃผ์–ด์ง„ epoch ์ˆ˜ ๋งŒํผ ๋ชจ๋ธ์„ ํ•™์Šต์‹œํ‚ค๋Š” ๋ฉ”์„œ๋“œ

: ๋ชจ๋ธ์ด ์˜ค์ฐจ๋กœ๋ถ€ํ„ฐ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์—…๋ฐ์ดํŠธ ์‹œํ‚ค๋Š” ๊ณผ์ •์„ ํ•™์Šต, ํ›ˆ๋ จ, ๋˜๋Š” ์ ํ•ฉ(fitting)

model.fit(X_train, y_train, epochs=10, batch_size=32, verbose=0, validation_data(X_val, y_val))
  • ์ฒซ๋ฒˆ์งธ ์ธ์ž
    • ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ์— ํ•ด๋‹น
  • ๋‘๋ฒˆ์งธ ์ธ์ž
    • ์ง€๋„ ํ•™์Šต์—์„œ ๋ ˆ์ด๋ธ” ๋ฐ์ดํ„ฐ์— ํ•ด๋‹น
  • epochs
    • ์—ํฌํฌ 1์€ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ์ฐจ๋ก€ ํ›‘๊ณ  ์ง€๋‚˜๊ฐ”์Œ์„ ์˜๋ฏธ = ์ด ํ›ˆ๋ จ ํšŸ์ˆ˜
  • batch_size
    • ๋ฐฐ์น˜ ํฌ๊ธฐ (๊ธฐ๋ณธ๊ฐ’์€ 32. ๋ฏธ๋‹ˆ ๋ฐฐ์น˜ ๊ฒฝ์‚ฌ ํ•˜๊ฐ•๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€ ์•Š์„ ๊ฒฝ์šฐ์—๋Š” batch_size=None)
  • validation_data(x_val, y_val)
    • ๊ฒ€์ฆ ๋ฐ์ดํ„ฐ(validation data)๋ฅผ ์‚ฌ์šฉ
    • ๊ฒ€์ฆ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ ์—ํฌํฌ๋งˆ๋‹ค ๊ฒ€์ฆ ๋ฐ์ดํ„ฐ์˜ ์ •ํ™•๋„๋‚˜ ์˜ค์ฐจ๋ฅผ ํ•จ๊ป˜ ์ถœ๋ ฅํ•˜๋Š”๋ฐ, ์ด ์ •ํ™•๋„๋Š” ํ›ˆ๋ จ์ด ์ž˜ ๋˜๊ณ  ์žˆ๋Š”์ง€๋ฅผ ๋ณด์—ฌ์ค„ ๋ฟ์ด๋ฉฐ ์‹ค์ œ๋กœ ๋ชจ๋ธ์ด ๊ฒ€์ฆ ๋ฐ์ดํ„ฐ๋ฅผ ํ•™์Šตํ•˜์ง€๋Š” ์•Š์Œ
    • ๊ฒ€์ฆ ๋ฐ์ดํ„ฐ์˜ ์˜ค์ฐจ(loss)๊ฐ€ ๋‚ฎ์•„์ง€๋‹ค๊ฐ€ ๋†’์•„์ง€๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด ์ด๋Š” ๊ณผ์ ํ•ฉ(overfitting)์˜ ์‹ ํ˜ธ
  • validation_split
    • ๊ฒ€์ฆ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์šฉ๋„๋กœ validation_data ๋Œ€์‹  ์‚ฌ์šฉ
    • ๊ฒ€์ฆ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ์™€ ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ์˜ ๋ ˆ์ด๋ธ”์ธ X_train๊ณผ y_train์—์„œ ์ผ์ • ๋น„์œจ ๋ถ„๋ฆฌํ•˜์—ฌ ์ด๋ฅผ ๊ฒ€์ฆ ๋ฐ์ดํ„ฐ๋กœ ์‚ฌ์šฉ
  • verbose
    • ํ•™์Šต ์ค‘ ์ถœ๋ ฅ๋˜๋Š” ๋ฌธ๊ตฌ๋ฅผ ์„ค์ •
      • 0 : ์•„๋ฌด ๊ฒƒ๋„ ์ถœ๋ ฅํ•˜์ง€ ์•Š์Œ
      • 1 : ํ›ˆ๋ จ์˜ ์ง„ํ–‰๋„๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์ง„ํ–‰ ๋ง‰๋Œ€๋ฅผ ๋ณด์—ฌ์คŒ
      • 2 : ๋ฏธ๋‹ˆ ๋ฐฐ์น˜๋งˆ๋‹ค ์†์‹ค ์ •๋ณด๋ฅผ ์ถœ๋ ฅ
# verbose = 1์ผ ๊ฒฝ์šฐ.
Epoch 88/100
7/7 [==============================] - 0s 143us/step - loss: 0.1029 - acc: 1.0000

# verbose = 2์ผ ๊ฒฝ์šฐ.
Epoch 88/100
 - 0s - loss: 0.1475 - acc: 1.0000

 

๐Ÿ˜Ž evaluate()

: ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ํ•™์Šตํ•œ ๋ชจ๋ธ์— ๋Œ€ํ•œ ์ •ํ™•๋„๋ฅผ ํ‰๊ฐ€

# ์œ„์˜ fit() ์ฝ”๋“œ์˜ ์—ฐ์žฅ์„ ์ƒ์ธ ์ฝ”๋“œ
model.evaluate(X_test, y_test, batch_size=32)
  • ์ฒซ๋ฒˆ์งธ ์ธ์ž
    • ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ์— ํ•ด๋‹น
  • ๋‘๋ฒˆ์งธ ์ธ์ž
    • ์ง€๋„ ํ•™์Šต์—์„œ ๋ ˆ์ด๋ธ” ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ์— ํ•ด๋‹น
    • batch_size = ๋ฐฐ์น˜ ํฌ๊ธฐ.

 

๐Ÿ˜Ž predict()

: ์ž„์˜์˜ ์ž…๋ ฅ์— ๋Œ€ํ•œ ๋ชจ๋ธ์˜ ์ถœ๋ ฅ๊ฐ’์„ ํ™•์ธ

# ์œ„์˜ fit() ์ฝ”๋“œ์˜ ์—ฐ์žฅ์„ ์ƒ์ธ ์ฝ”๋“œ
model.predict(X_input, batch_size=32)
  • ์ฒซ๋ฒˆ์งธ ์ธ์ž
    • ์˜ˆ์ธกํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐ์ดํ„ฐ
  • batch_size
    • ๋ฐฐ์น˜ ํฌ๊ธฐ

 

๐Ÿ˜Ž save()

: ์ธ๊ณต ์‹ ๊ฒฝ๋ง ๋ชจ๋ธ์„ hdf5 ํŒŒ์ผ์— ์ €์žฅ

model.save("model_name.h5")

 

๐Ÿ˜Ž load_model()

: ์ €์žฅํ•ด๋‘” ๋ชจ๋ธ์„ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

from tensorflow.keras.models import load_model
model = load_model("model_name.h5")

 

 

 

 

 

 

 

 

 

728x90
๋ฐ˜์‘ํ˜•
Comments