Sau khi chuẩn bị dữ liệu int-vectorized, bước tiếp theo là định nghĩa, compile và fit mô hình Conv1D.
Mã compile và fit
print("vocab_size thực tế là vocab_size+1 do 0 dùng cho padding")
int_model = create_model(vocab_size=VOCAB_SIZE + 1, num_labels=4)
print("Compile mô hình")
int_model.compile(
loss=losses.SparseCategoricalCrossentropy(from_logits=True),
optimizer='adam',
metrics=['accuracy']
)
print("Fit mô hình với dữ liệu")
history = int_model.fit(int_train_ds, validation_data=int_val_ds, epochs=5)
Kết quả huấn luyện
vocab_size thực tế là vocab_size+1 do 0 dùng cho padding Compile mô hình Fit mô hình với dữ liệu Epoch 1/5: loss: 1.3020 - accuracy: 0.3877 - val_loss: 0.8041 - val_accuracy: 0.6625 Epoch 2/5: loss: 0.7200 - accuracy: 0.7003 - val_loss: 0.5815 - val_accuracy: 0.7685 Epoch 3/5: loss: 0.4517 - accuracy: 0.8471 - val_loss: 0.5137 - val_accuracy: 0.8040 Epoch 4/5: loss: 0.2709 - accuracy: 0.9311 - val_loss: 0.5091 - val_accuracy: 0.8065 Epoch 5/5: loss: 0.1453 - accuracy: 0.9717 - val_loss: 0.5320 - val_accuracy: 0.8025
Giải thích
vocab_size + 1vì index 0 dành cho padding, token bắt đầu từ 1.SparseCategoricalCrossentropy(from_logits=True)vì mô hình đầu ra logits (chưa qua softmax).- Optimizer Adam hội tụ nhanh, accuracy train đạt 97% sau 5 epoch.
- Validation accuracy dao động ~80%, cho thấy overfitting nhẹ sau epoch 3.
- Có thể thêm Dropout, EarlyStopping, hoặc regularization để cải thiện generalization.