전처리 과정을 통해 얻은 이미지(847 * 1200)들을 확인해보면 일부 이미지들은 작은 원본 크기로 인해 변환된 이미지에 아무 정보가 없는 검은 공간이 많지만 CNN 모델을 통해 이를 해결할 수 있다.
모든 데이터들에 대한 모델을 생성하기 전 adenocarcinoma 와 normal 의 두 종류의 이미를 통해 adenocarcinoma 를 판별하는 모델을 먼저 생성
adenocarcinoma_test_ts_image = transpose_image(width, height, adenocarcinoma_test_image_list)
normal_test_ts_image = transpose_image(width, height, normal_test_image_list)
model = keras.Sequential()
model.add(keras.layers.Conv2D(32, kernel_size=3, activation='relu', padding='same', input_shape = (height, width,3)))
model.add(keras.layers.MaxPooling2D(2))
model.add(keras.layers.Conv2D(64, kernel_size=3, activation='relu', padding='same'))
model.add(keras.layers.MaxPooling2D(2))
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(100, activation='relu'))
model.add(keras.layers.Dropout(0.4))
model.add(keras.layers.Dense(1))
model.summary()
>>>
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d (Conv2D) (None, 874, 1200, 32) 896
max_pooling2d (MaxPooling2D (None, 437, 600, 32) 0
)
conv2d_1 (Conv2D) (None, 437, 600, 64) 18496
max_pooling2d_1 (MaxPooling (None, 218, 300, 64) 0
2D)
flatten (Flatten) (None, 4185600) 0
dense (Dense) (None, 100) 418560100
dropout (Dropout) (None, 100) 0
dense_1 (Dense) (None, 1) 101
=================================================================
Total params: 418,579,593
Trainable params: 418,579,593
Non-trainable params: 0
_________________________________________________________________
너무 많은 파라미터의 확인, 커널의 개수를 조절해야 한다.
model2 = keras.Sequential()
model2.add(keras.layers.Conv2D(8, kernel_size=3, activation='relu', padding='same', input_shape = (height, width,3)))
model2.add(keras.layers.MaxPooling2D(2))
model2.add(keras.layers.Conv2D(16, kernel_size=3, activation='relu', padding='same'))
model2.add(keras.layers.MaxPooling2D(2))
model2.add(keras.layers.Flatten())
model2.add(keras.layers.Dense(20, activation='relu'))
model2.add(keras.layers.Dropout(0.4))
model2.add(keras.layers.Dense(1))
model2.sumamry()
>>>
Model: "sequential_3"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_6 (Conv2D) (None, 874, 1200, 8) 224
max_pooling2d_6 (MaxPooling (None, 437, 600, 8) 0
2D)
conv2d_7 (Conv2D) (None, 437, 600, 16) 1168
max_pooling2d_7 (MaxPooling (None, 218, 300, 16) 0
2D)
flatten_3 (Flatten) (None, 1046400) 0
dense_6 (Dense) (None, 20) 20928020
dropout_3 (Dropout) (None, 20) 0
dense_7 (Dense) (None, 1) 21
=================================================================
Total params: 20,929,433
Trainable params: 20,929,433
Non-trainable params: 0
_________________________________________________________________
dense_6의 하이퍼 파라미터의 개수가 1/20로 감소된 모습,
history = model2.fit(train_scaled, train_target, epochs=10)
>>>
Epoch 1/10
11/11 [==============================] - 3s 257ms/step - loss: 0.0000e+00 - accuracy: 0.8426
Epoch 2/10
11/11 [==============================] - 3s 260ms/step - loss: 0.0000e+00 - accuracy: 0.8426
Epoch 3/10
11/11 [==============================] - 3s 258ms/step - loss: 0.0000e+00 - accuracy: 0.8542
Epoch 4/10
11/11 [==============================] - 3s 260ms/step - loss: 0.0000e+00 - accuracy: 0.8601
Epoch 5/10
11/11 [==============================] - 3s 259ms/step - loss: 0.0000e+00 - accuracy: 0.8571
Epoch 6/10
11/11 [==============================] - 3s 259ms/step - loss: 0.0000e+00 - accuracy: 0.8397
Epoch 7/10
11/11 [==============================] - 3s 260ms/step - loss: 0.0000e+00 - accuracy: 0.8397
Epoch 8/10
11/11 [==============================] - 3s 259ms/step - loss: 0.0000e+00 - accuracy: 0.8542
Epoch 9/10
11/11 [==============================] - 3s 261ms/step - loss: 0.0000e+00 - accuracy: 0.8892
Epoch 10/10
11/11 [==============================] - 3s 259ms/step - loss: 0.0000e+00 - accuracy: 0.8746
모델의 실행 결과, 정확도 확인
테스트 세트에서의 평가
model2.evaluate(test_scaled, test_target)
>>>
6/6 [==============================] - 2s 186ms/step - loss: 0.0000e+00 - accuracy: 0.9598
[0.0, 0.959770143032074]
테스트 세트에서 더 높은 점수를 보임, 모델을 더 훈련시킬 수 있을 것