[Deep Learning] Generating two classification models for MNIST dataset with Keras sequential/functional API

2023. 4. 5. 21:30
๐Ÿง‘๐Ÿป‍๐Ÿ’ป์šฉ์–ด ์ •๋ฆฌ

Neural Networks
Keras
Layer
MNIST

 

 

Generating two classification models for MNIST dataset with Keras sequential/functional API

 

 

 

MNIST ํ•„์š”ํ•œ library๋ฅผ import ํ•ฉ๋‹ˆ๋‹ค.

 

MNIST๋Š” ์†๊ธ€์”จ ์ˆซ์ž ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ์…‹์œผ๋กœ, 28x28 ํ”ฝ์…€ ์ด๋ฏธ์ง€์— 0๋ถ€ํ„ฐ 9๊นŒ์ง€์˜ ์ˆซ์ž๊ฐ€ ์ ํ˜€์žˆ๋Š” 70,000๊ฐœ์˜ ์ด๋ฏธ์ง€์™€ ๋ ˆ์ด๋ธ”๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์œ„ ์ฝ”๋“œ๋Š” scikit-learn ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ fetch_openml ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด MNIST ๋ฐ์ดํ„ฐ์…‹์„ ๊ฐ€์ ธ์™€ ์ถœ๋ ฅํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ , ์œ„์™€ ๊ฐ™์ด ์œ„ ์ฝ”๋“œ๋Š” MNIST ๋ฐ์ดํ„ฐ์…‹์„ ๋ถˆ๋Ÿฌ์™€์„œ ๋ฐ์ดํ„ฐ์™€ ๋ ˆ์ด๋ธ”์„ ๊ฐ๊ฐ x_data์™€ y_data์— ์ €์žฅํ•˜๊ณ , ์ด๋“ค์˜ shape์„ ์ถœ๋ ฅํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

 

MNIST ๋ฐ์ดํ„ฐ์…‹์€ ์†์œผ๋กœ ์“ด ์ˆซ์ž ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ์…‹์œผ๋กœ, x_data์—๋Š” ์ด๋ฏธ์ง€์˜ ํ”ฝ์…€ ๊ฐ’์ด ๋“ค์–ด๊ฐ€ ์žˆ๊ณ  y_data์—๋Š” ํ•ด๋‹น ์ด๋ฏธ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆซ์ž ๋ ˆ์ด๋ธ”์ด ๋“ค์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ถœ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด, x_data๋Š” 70,000๊ฐœ์˜ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ๊ฐ 784๊ฐœ์˜ ํ”ฝ์…€๋กœ ๊ตฌ์„ฑ๋œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์œผ๋ฉฐ, y_data๋Š” 70,000๊ฐœ์˜ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๋ ˆ์ด๋ธ” ๊ฐ’์ด ๋“ค์–ด๊ฐ€ ์žˆ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์œ„ ์ฝ”๋“œ๋Š” MNIST ๋ฐ์ดํ„ฐ๋ฅผ ํ•™์Šต ๋ฐ์ดํ„ฐ์™€ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋กœ ๋ถ„ํ• ํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.

 

model_selection.train_test_split() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ x_data์™€ ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ y_data๋ฅผ 8:2 ๋น„์œจ๋กœ ๋ฌด์ž‘์œ„๋กœ ๋‚˜๋ˆ ์„œ ํ•™์Šต ๋ฐ์ดํ„ฐ x_train, y_train๊ณผ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ x_test, y_test๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

test_size ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „์ฒด ๋ฐ์ดํ„ฐ ์ค‘ 20%๋ฅผ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

 

MinMaxScaler๋Š” feature scaling์„ ์œ„ํ•œ ํ•จ์ˆ˜ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

์ด ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ์˜ ๋ฒ”์œ„๋ฅผ 0์—์„œ 1์‚ฌ์ด์˜ ๊ฐ’์œผ๋กœ ์Šค์ผ€์ผ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ, x_train_scaled์™€ x_test_scaled๋Š” ๊ฐ๊ฐ 0๊ณผ 1 ์‚ฌ์ด์˜ ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜๋œ ํŠน์„ฑ ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.์ถœ๋ ฅ๋œ np.max์™€ np.min ๊ฐ’์€ ๊ฐ๊ฐ x_train_scaled์™€ x_test_scaled์˜ ์ตœ๋Œ“๊ฐ’๊ณผ ์ตœ์†Ÿ๊ฐ’์ž…๋‹ˆ๋‹ค.

 

์ด ์ฝ”๋“œ๋Š” sklearn์˜ LabelBinarizer class๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ one-hot encoding์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

y_train๊ณผ y_test์˜ ๊ฐ ํด๋ž˜์Šค์— ๋Œ€ํ•ด ์ด์ง„ ๋ฒกํ„ฐ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. ์ด์ง„ ๋ฒกํ„ฐ์˜ ํฌ๊ธฐ๋Š” class ์ˆ˜์™€ ๊ฐ™์œผ๋ฉฐ, ํ•ด๋‹น class์— ํ•ด๋‹นํ•˜๋Š” ์›์†Œ๋Š” 1์ด๊ณ  ๋‚˜๋จธ์ง€ ์›์†Œ๋Š” 0์œผ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

์œ„ ์ฝ”๋“œ๋Š” scikit-learn์˜ MLPClassifier๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์ค‘ ํด๋ž˜์Šค ๋ถ„๋ฅ˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.

  • MLPClassifier: ๋‹ค์ธต ํผ์…‰ํŠธ๋ก (MLP) ๋ชจ๋ธ์„ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. ์ธ์ž๋กœ๋Š” hidden_layer_sizes, activation, solver ๋“ฑ์˜ hyperparameter๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • hidden_layer_sizes: ์€๋‹‰์ธต์˜ ๋‰ด๋Ÿฐ ์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ํ•˜๋‚˜์˜ ์€๋‹‰์ธต์„ ์‚ฌ์šฉํ•˜๊ณ , ๊ทธ ์•ˆ์— 50๊ฐœ์˜ ๋‰ด๋Ÿฐ(units)์ด ์žˆ๋„๋ก ์„ค์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • fit: MLP ๋ชจ๋ธ์„ ํ•™์Šต์‹œํ‚ค๋Š” ๋ฉ”์†Œ๋“œ์ž…๋‹ˆ๋‹ค. x_train_scaled์™€ y_train_onehot ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  • predict: ํ•™์Šต๋œ MLP ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ x_test_scaled ๋ฐ์ดํ„ฐ๋ฅผ ์˜ˆ์ธกํ•˜๋Š” ๋ฉ”์†Œ๋“œ์ž…๋‹ˆ๋‹ค. ์˜ˆ์ธก๋œ ๊ฒฐ๊ณผ๋Š” y_test_hat์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

์œ„ ์ฝ”๋“œ์—์„œ๋Š” MLP ๋ชจ๋ธ์„ ์ด์šฉํ•˜์—ฌ MNIST ์ˆซ์ž ์ด๋ฏธ์ง€ ๋ถ„๋ฅ˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถ„๋ฅ˜์˜ ์ •ํ™•๋„๋ฅผ ์ธก์ •ํ•˜๊ธฐ ์œ„ํ•ด sklearn.metrics ๋ชจ๋“ˆ์—์„œ ์ œ๊ณตํ•˜๋Š” accuracy_score ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

clf์˜ loss curve์™€ y_test_onehot๊ณผ y_test_hat์˜ accuracy score๋ฅผ ์ถœ๋ ฅํ•œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

clf.loss_curve_๋Š” MLPClassifier์—์„œ ํ•™์Šต ์‹œ์— loss function์ด ์–ด๋–ป๊ฒŒ ๊ฐ์†Œํ–ˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์†์„ฑ์ด๋ฉฐ, ํ•™์Šต ์ค‘์— ๋ฐœ์ƒํ•œ ์†์‹ค์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

 

metrics.accuracy_score๋Š” sklearn.metrics ํŒจํ‚ค์ง€์—์„œ ์ œ๊ณตํ•˜๋Š” ํ•จ์ˆ˜๋กœ, ์˜ˆ์ธกํ•œ ๊ฒฐ๊ณผ์™€ ์‹ค์ œ ์ •๋‹ต์„ ๋น„๊ตํ•˜์—ฌ ์ •ํ™•๋„๋ฅผ ๊ณ„์‚ฐํ•ด์ฃผ๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด MLPClassifier ๋ชจ๋ธ์˜ ์˜ˆ์ธก ์„ฑ๋Šฅ์„ ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋”ฐ๋ผ์„œ ์œ„์˜ ์ฝ”๋“œ๋Š” MLPClassifier ๋ชจ๋ธ์˜ ํ•™์Šต ๊ณผ์ •์—์„œ์˜ loss function์˜ ๋ณ€ํ™”์™€ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์˜ˆ์ธก ์ •ํ™•๋„๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

 

์ด๊ฒƒ์€ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ํ˜•ํƒœ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์œผ๋กœ, x_train_scaled์˜ ์—ด ์ˆ˜๋ฅผ ์ž…๋ ฅ ์ฐจ์›์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, MNIST ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๋Š” 28x28 = 784 ๊ฐœ์˜ ํ”ฝ์…€๋กœ ๊ตฌ์„ฑ๋˜๋ฏ€๋กœ, input_shape๋Š” (784, )๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค.

 

์ด๋Š” ์ผ€๋ผ์Šค(Keras)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์ธต ํผ์…‰ํŠธ๋ก (MLP) ๋ชจ๋ธ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • input_shape: ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ x_train_scaled์˜ ํŠน์„ฑ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” (784,)์ž…๋‹ˆ๋‹ค.
  • clf_model_seq: ์ผ€๋ผ์Šค์˜ Sequential ๋ชจ๋ธ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • add(): ๋ชจ๋ธ์— ์ธต(Layer)์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ธต์€ input_shape์œผ๋กœ ์ž…๋ ฅ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•˜๊ณ , ๋‘ ๋ฒˆ์งธ ์ธต์€ ์ด์ „ ์ธต์˜ ์ถœ๋ ฅ ํฌ๊ธฐ๋ฅผ ์•Œ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž…๋ ฅ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • units: ์ถœ๋ ฅ ๊ณต๊ฐ„์˜ ์ฐจ์›์ˆ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • activation: ํ™œ์„ฑํ™” ํ•จ์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ชจ๋ธ์€ ReLU(Rectified Linear Unit) ํ™œ์„ฑํ™” ํ•จ์ˆ˜์™€ Softmax ํ™œ์„ฑํ™” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • compile(): ๋ชจ๋ธ์˜ ์†์‹ค ํ•จ์ˆ˜(loss)์™€ ์ตœ์ ํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜(optimizer), ํ‰๊ฐ€ ์ง€ํ‘œ(metrics)๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ, ๋‹ค์ค‘ ๋ถ„๋ฅ˜(Multi-Class Classification) ๋ฌธ์ œ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ๋•Œ๋ฌธ์— categorical_crossentropy ์†์‹ค ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • summary(): ๋ชจ๋ธ์˜ ๊ตฌ์กฐ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์ด ์ฝ”๋“œ๋Š” Sequential ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ MLP(Multilayer Perceptron) ๋ถ„๋ฅ˜ ๋ชจ๋ธ์„ ๊ตฌ์„ฑํ•˜๊ณ , ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ๋ฅผ ํ•™์Šต์‹œํ‚ค๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

  • clf_model_seq : Sequential ๋ชจ๋ธ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • add() : Sequential ๋ชจ๋ธ ๊ฐ์ฒด์— ์ธต์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ธต์€ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ํ˜•ํƒœ๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ์ธต๋ถ€ํ„ฐ๋Š” ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ํ˜•ํƒœ๋ฅผ ์ถ”์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ํ˜•ํƒœ๋ฅผ ์ง€์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • compile() : ๋ชจ๋ธ ํ•™์Šต์— ํ•„์š”ํ•œ optimizer์™€ loss๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” categorical_crossentropy๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • summary() : ๋ชจ๋ธ์˜ ๊ตฌ์„ฑ ์š”์•ฝ ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  • fit() : ๋ชจ๋ธ์„ ํ•™์Šต์‹œํ‚ต๋‹ˆ๋‹ค. x_train_scaled์€ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ, y_train_onehot์€ ํƒ€๊นƒ ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค. batch_size๋Š” ํ•œ ๋ฒˆ์— ํ•™์Šต์‹œํ‚ฌ ๋ฐ์ดํ„ฐ์˜ ์ˆ˜์ž…๋‹ˆ๋‹ค. epochs๋Š” ํ•™์Šต์„ ๋ฐ˜๋ณตํ•  ํšŸ์ˆ˜์ž…๋‹ˆ๋‹ค. validation_data๋Š” ๊ฒ€์ฆ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

 

 

์œ„ ์ฝ”๋“œ๋Š” ๋ชจ๋ธ์˜ ํ•™์Šต(history) ๊ณผ์ •์—์„œ train set๊ณผ test set์˜ ์ •ํ™•๋„(accuracy)๋ฅผ ์‹œ๊ฐํ™”ํ•œ ๊ทธ๋ž˜ํ”„์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ชจ๋ธ์ด ํ•™์Šต๋จ์— ๋”ฐ๋ผ train set๊ณผ test set ๋ชจ๋‘์—์„œ ์ •ํ™•๋„๊ฐ€ ์ ์ฐจ์ ์œผ๋กœ ์ƒ์Šนํ•˜๋Š”์ง€, overfitting์ด ๋ฐœ์ƒํ•˜๋Š”์ง€ ๋“ฑ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

์ด ์ฝ”๋“œ๋Š” ํ›ˆ๋ จ ๊ณผ์ •์—์„œ ๋ชจ๋ธ์˜ ์†์‹ค ํ•จ์ˆ˜ ๊ฐ’์˜ ๋ณ€ํ™”๋ฅผ ์‹œ๊ฐํ™”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. x์ถ•์€ epoch ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ , y์ถ•์€ ์†์‹ค ํ•จ์ˆ˜์˜ ๊ฐ’์ž…๋‹ˆ๋‹ค. history.history ๋”•์…”๋„ˆ๋ฆฌ์— ์ €์žฅ๋œ ‘loss’์™€ ‘val_loss’๋ฅผ ์ด์šฉํ•˜์—ฌ, ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ์™€ ๊ฒ€์ฆ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์†์‹ค ํ•จ์ˆ˜ ๊ฐ’์˜ ๋ณ€ํ™”๋ฅผ ๋‚˜๋ž€ํžˆ ์‹œ๊ฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

 

 

์œ„ ์ฝ”๋“œ๋Š” ์ผ€๋ผ์Šค์—์„œ functional API๋ฅผ ์ด์šฉํ•˜์—ฌ MLP ๋ชจ๋ธ์„ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

  • layers.Input()์„ ์ด์šฉํ•˜์—ฌ ์ž…๋ ฅ ๋ ˆ์ด์–ด๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ input_shape๋ฅผ ํ†ตํ•ด ์ž…๋ ฅ์˜ ํ˜•ํƒœ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • layers.Dense()๋ฅผ ์ด์šฉํ•˜์—ฌ ์€๋‹‰ ๋ ˆ์ด์–ด๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์€๋‹‰ ๋ ˆ์ด์–ด์—์„œ๋Š” ์ž…๋ ฅ ๋ ˆ์ด์–ด๋ฅผ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, input์„ ์ธ์ž๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • models.Model()์„ ์ด์šฉํ•˜์—ฌ ๋ชจ๋ธ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ input๊ณผ output์„ ์ธ์ž๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • model.compile()์„ ์ด์šฉํ•˜์—ฌ ์†์‹ค ํ•จ์ˆ˜์™€ ํ‰๊ฐ€ ์ง€ํ‘œ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

์œ„ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋œ ๋ชจ๋ธ์˜ ๊ตฌ์กฐ๋Š” model.summary()๋ฅผ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

์ด ์ฝ”๋“œ๋Š” Keras๋กœ MLP ๋ชจ๋ธ์„ ์ •์˜ํ•˜๊ณ  ํ•™์Šต์‹œํ‚ค๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

 

clf_model_func๋Š” Keras์˜ Model ํด๋ž˜์Šค๋กœ ์ •์˜๋œ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค. ์ด ๋ชจ๋ธ์€ ์ž…๋ ฅ์ธต, ์€๋‹‰์ธต, ์ถœ๋ ฅ์ธต์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, layers ๋ชจ๋“ˆ์—์„œ ์ œ๊ณตํ•˜๋Š” Input, Dense ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ๊ฐ์˜ ์ธต์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

 

clf_model_func.compile() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์†์‹คํ•จ์ˆ˜์™€ ํ‰๊ฐ€์ง€ํ‘œ๋ฅผ ์„ค์ •ํ•˜๊ณ , clf_model_func.summary() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ ๊ตฌ์กฐ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

 

clf_model_func.fit() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ์„ ํ•™์Šต์‹œํ‚ค๊ณ , validation_data ์ธ์ž๋ฅผ ํ†ตํ•ด ๊ฒ€์ฆ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. batch_size์™€ epochs ์ธ์ž๋ฅผ ํ†ตํ•ด ๋ฐฐ์น˜ ํฌ๊ธฐ์™€ ์ „์ฒด ํ•™์Šต ์—ํญ ์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ํ•™์Šตํ•œ ๋ชจ๋ธ์˜ ๊ฒฐ๊ณผ๋Š” history ๊ฐ์ฒด์— ์ €์žฅ๋˜๋ฉฐ, ๊ทธ๋ž˜ํ”„๋กœ ์‹œ๊ฐํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด ์ฝ”๋“œ๋Š” ํ•™์Šต ๊ณผ์ •์—์„œ train ๋ฐ์ดํ„ฐ์™€ validation ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๋ถ„๋ฅ˜ ์ •ํ™•๋„ ๋ณ€ํ™”๋ฅผ ์‹œ๊ฐํ™”ํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

 

history.history['accuracy']๋Š” train ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๋ถ„๋ฅ˜ ์ •ํ™•๋„๊ฐ€ epoch๋งˆ๋‹ค ๊ธฐ๋ก๋œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์˜๋ฏธํ•˜๊ณ , history.history['val_accuracy']๋Š” validation ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๋ถ„๋ฅ˜ ์ •ํ™•๋„๊ฐ€ epoch๋งˆ๋‹ค ๊ธฐ๋ก๋œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ๊ฐ epoch๋งˆ๋‹ค์˜ train ๋ฐ์ดํ„ฐ์™€ validation ๋ฐ์ดํ„ฐ์˜ ๋ถ„๋ฅ˜ ์ •ํ™•๋„ ๋ณ€ํ™”๋ฅผ ๊ฐ๊ฐ ํŒŒ๋ž€์ƒ‰๊ณผ ์ฃผํ™ฉ์ƒ‰์œผ๋กœ ๊ทธ๋ž˜ํ”„๋กœ ์‹œ๊ฐํ™”ํ•˜์—ฌ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๊ทธ๋ž˜ํ”„๋Š” ํ•™์Šต ๊ณผ์ •์—์„œ train ๋ฐ์ดํ„ฐ์™€ validation ๋ฐ์ดํ„ฐ์˜ ๋ถ„๋ฅ˜ ์ •ํ™•๋„๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜์—ฌ, overfitting ๋“ฑ์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ํŒŒ์•…ํ•˜๊ณ  ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

 

 

์ด์ƒ์ ์œผ๋กœ๋Š” ํ›ˆ๋ จ ์†์‹ค(train loss)๊ณผ ๊ฒ€์ฆ ์†์‹ค(validation loss)์€ ๋‚ฎ์•„์ง€๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜, ๊ทธ๋ž˜ํ”„๋ฅผ ํ†ตํ•ด ํ™•์ธํ•ด๋ณด๋‹ˆ, ์ด์ „์— ์‚ฌ์šฉํ•œ MLPClassifier ๋ชจ๋ธ๋ณด๋‹ค keras ๋ชจ๋ธ์ด ๋” ์ข‹์€ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ฒ€์ฆ ์†์‹ค์€ ์ผ์ • ์ˆ˜์ค€ ์ดํ•˜๋กœ ์ค„์–ด๋“ค์ง€ ์•Š๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์œผ๋ฏ€๋กœ, ๋” ์˜ค๋žœ ์‹œ๊ฐ„ ๋™์•ˆ ๋ชจ๋ธ์„ ํ•™์Šต์‹œ์ผœ ๋ณผ ํ•„์š”๊ฐ€ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

BELATED ARTICLES

more