บทนำ
หลังสร้างโมเดล CNN สำหรับ Flower classification (5 คลาส) ขั้นตอนต่อไปคือ compile (กำหนด loss, optimizer, metrics) และ fit (train)
โค้ดตัวอย่าง
print("The model is being compiled")
model.compile(
optimizer='adam',
loss=tf.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
print("The model is being fit to the data")
model.fit(
train_ds,
validation_data=val_ds,
epochs=3
)ผลลัพธ์
The model is being compiled The model is being fit to the data Epoch 1/3 92/92 [==============================] - 107s 1s/step - loss: 1.3570 - accuracy: 0.4183 - val_loss: 1.0730 - val_accuracy: 0.5913 Epoch 2/3 92/92 [==============================] - 101s 1s/step - loss: 1.0185 - accuracy: 0.5927 - val_loss: 1.0041 - val_accuracy: 0.6199 Epoch 3/3 92/92 [==============================] - 95s 1s/step - loss: 0.8691 - accuracy: 0.6529 - val_loss: 0.9985 - val_accuracy: 0.6281
คำอธิบาย
SparseCategoricalCrossentropy(from_logits=True): loss สำหรับ multi-class classification (labels เป็น integer 0-4, logits ไม่ผ่าน softmax)optimizer='adam': adaptive learning ratemetrics=['accuracy']: ติดตาม accuracy ระหว่าง train- Validation accuracy ต่ำกว่า training → overfitting (ต้องเพิ่ม regularization/augmentation)
โมเดล Architecture (จากบทความก่อนหน้า)
model = tf.keras.Sequential([
layers.experimental.preprocessing.Rescaling(1./255),
layers.Conv2D(32, 3, activation='relu'),
layers.MaxPooling2D(),
layers.Conv2D(32, 3, activation='relu'),
layers.MaxPooling2D(),
layers.Conv2D(32, 3, activation='relu'),
layers.MaxPooling2D(),
layers.Flatten(),
layers.Dense(128, activation='relu'),
layers.Dense(5) # num_classes = 5
])