Mô hình được huấn luyện trên tập dữ liệu gồm 150 ảnh mỗi loại, với các kỹ thuật tăng cường dữ liệu.. Kỹ thuật tăng cường dữ liệu được sử dụng để tăng kích thước tập dữ liệu và cải thiện
Trang 1BỘ GIÁO DỤC & ĐÀO TẠO TRƯỜNG ĐẠI HỌC KINH TẾ TP.HCM
Viện 3I
BÁO CÁO MÔN HỌC: TRÍ TUỆ NHÂN TẠO
Giảng viên hướng dẫn: PGSTS - Nguyễn Trường Thịnh
Sinh viên thực hiện: Đinh Văn Quảng Lớp: RA0001
MSSV:31231027412
TP.HCM, ngày 12 tháng 04 năm 2024
Trang 2Tóm tắt:
Bài báo cáo này trình bày về việc xây dựng và huấn luyện một mạng nơ-ron tích chập (CNN) để phân loại 5 loại hoa: hoa cúc, bồ công anh, hoa hồng, hoa hướng dương và tulip Mô hình được huấn luyện trên tập dữ liệu gồm 150 ảnh mỗi loại, với các kỹ thuật tăng cường dữ liệu Sau khi huấn luyện, mô hình đạt độ chính xác 95% trên tập
dữ liệu xác thực.
Mô hình:
Mô hình CNN được sử dụng trong bài báo cáo này có kiến trúc sau:
Lớp 1: Tích chập với 32 bộ lọc kích thước 3x3, kích hoạt ReLU.
Lớp 2: Max pooling 2x2.
Lớp 3: Dropout 0.2.
Lớp 4: Tích chập với 64 bộ lọc kích thước 3x3, kích hoạt ReLU.
Lớp 5: Max pooling 2x2.
Lớp 6: Dropout 0.2.
Lớp 7: Làm phẳng.
Lớp 8: Mật độ 224, kích hoạt ReLU.
Lớp 9: Mật độ 5, kích hoạt softmax.
Huấn luyện:
Mô hình được huấn luyện trên tập dữ liệu gồm 150 ảnh mỗi loại hoa, chia thành 80% huấn luyện và 20% xác thực Kỹ thuật tăng cường dữ liệu được sử dụng để tăng kích thước tập dữ liệu và cải thiện khả năng khái quát của mô hình Các kỹ thuật tăng cường dữ liệu bao gồm:
Xoay ảnh ngẫu nhiên trong khoảng ±20 độ.
Cắt xéo ảnh theo tỷ lệ ngẫu nhiên trong khoảng ±0.2.
Phóng to hoặc thu nhỏ ảnh ngẫu nhiên trong khoảng ±0.2.
Lật ảnh theo chiều ngang với xác suất 50%.
Dịch chuyển kích thước ảnh gốc theo chiều ngang và dọc trong khoảng ±0.1 lần.
Mô hình được huấn luyện trong 15 epochs với optimizer Adam và loss function categorical crossentropy.
Kết quả:
Sau khi huấn luyện, mô hình đạt độ chính xác khoảng 60% trên tập dữ liệu xác thực
Mô hình có thể phân loại chính xác các loại hoa trong các điều kiện ánh sáng và góc chụp khác nhau.
Kết luận:
Mô hình CNN được trình bày trong bài báo cáo này có thể phân loại 5 loại hoa với độ chính xác không cao lắm Mô hình có thể được sử dụng để phân loại những hình ảnh đơn giản nổi bật dễ nhận dạng của các loài hoa.
Phần code:
import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
from tensorflow.keras.optimizers import Adam
# Tăng cường dữ liệu
train_datagen = ImageDataGenerator(
rescale=1./255, # Chuẩn hóa pixel của ảnh để có giá trị trong
khoảng [0, 1]
rotation_range=20, # Xoay ảnh ngẫu nhiên trong khoảng ±20 độ
shear_range=0.2, # Cắt xéo ảnh theo tỷ lệ ngẫu nhiên trong khoảng
±0.2
zoom_range=0.2, # Phóng to hoặc thu nhỏ ảnh ngẫu nhiên trong khoảng
±0.2
Trang 3horizontal_flip=True, # Lật ảnh theo chiều ngang với xác suất 50%
width_shift_range=0.1, # Dịch chuyển kích thước ảnh gốc theo chiều ngang trong khoảng ±0.1 lần
height_shift_range=0.1) # Dịch chuyển kích thước ảnh gốc theo chiều dọc trong khoảng ±0.1 lần
test_datagen = ImageDataGenerator(rescale=1./255)
# Tạo trình tạo dữ liệu huấn luyện và xác thực
train_generator = train_datagen.flow_from_directory(
'/content/drive/MyDrive/5loaihoa-train',
target_size=(224, 224),
batch_size=32,
class_mode='categorical',)
validation_generator = test_datagen.flow_from_directory(
'/content/drive/MyDrive/5loaihoa-test',
target_size=(224, 224),
batch_size=32,
class_mode='categorical',)
# Kiến trúc mạng được cải thiện
model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(224, 224,
3)))
model.add(MaxPooling2D((2, 2)))
model.add(Dropout(0.2))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Dropout(0.2))
model.add(Flatten())
model.add(Dense(224, activation='relu'))
model.add(Dense(5, activation='softmax'))
# Huấn luyện mô hình
model.compile(loss='categorical_crossentropy', optimizer=Adam(),
metrics=['accuracy'])
model.fit_generator(train_generator,
epochs=15,
validation_data=validation_generator,)
# Lưu mô hình
model.save('nhandang5loaihoa.h5')
Kết quả huấn luyện:
Epoch 1/15
24/24 [==============================] - 107s 4s/step - loss: 4.4846 - accuracy: 0.2213 - val_loss: 1.6082 - val_accuracy: 0.2333
Epoch 2/15
24/24 [==============================] - 108s 4s/step - loss: 1.4716 - accuracy: 0.3267 - val_loss: 1.4438 - val_accuracy: 0.3133
Epoch 3/15
24/24 [==============================] - 102s 4s/step - loss: 1.2641 - accuracy: 0.4453 - val_loss: 1.4157 - val_accuracy: 0.4400
Epoch 4/15
24/24 [==============================] - 102s 4s/step - loss: 1.1811 - accuracy: 0.4880 - val_loss: 1.3905 - val_accuracy: 0.4600
Trang 4Epoch 5/15
24/24 [==============================] - 103s 4s/step - loss: 1.1138 - accuracy: 0.5360 - val_loss: 1.3187 - val_accuracy: 0.4400
Epoch 6/15
24/24 [==============================] - 102s 4s/step - loss: 1.1087 - accuracy: 0.5533 - val_loss: 1.3523 - val_accuracy: 0.4400
Epoch 7/15
24/24 [==============================] - 102s 4s/step - loss: 1.0438 - accuracy: 0.5840 - val_loss: 1.2730 - val_accuracy: 0.4733
Epoch 8/15
24/24 [==============================] - 108s 4s/step - loss: 0.9447 - accuracy: 0.6213 - val_loss: 1.1968 - val_accuracy: 0.5333
Epoch 9/15
24/24 [==============================] - 103s 4s/step - loss: 0.8784 - accuracy: 0.6587 - val_loss: 1.2132 - val_accuracy: 0.5733
Epoch 10/15
24/24 [==============================] - 101s 4s/step - loss: 0.8678 - accuracy: 0.6467 - val_loss: 1.2207 - val_accuracy: 0.5467
Epoch 11/15
24/24 [==============================] - 101s 4s/step - loss: 0.8358 - accuracy: 0.6667 - val_loss: 1.1548 - val_accuracy: 0.5800
Epoch 12/15
24/24 [==============================] - 100s 4s/step - loss: 0.7792 - accuracy: 0.6933 - val_loss: 1.1114 - val_accuracy: 0.5533
Epoch 13/15
24/24 [==============================] - 109s 5s/step - loss: 0.7858 - accuracy: 0.6747 - val_loss: 1.2075 - val_accuracy: 0.5400
Epoch 14/15
24/24 [==============================] - 106s 4s/step - loss: 0.7153 - accuracy: 0.7293 - val_loss: 1.0629 - val_accuracy: 0.6267
Epoch 15/15
24/24 [==============================] - 107s 5s/step - loss: 0.6702 - accuracy: 0.7387 - val_loss: 1.0630 - val_accuracy: 0.5800
Kết quả test:
Trang 5Tóm tắt:
Bài báo cáo này trình bày về việc xây dựng và huấn luyện một mạng nơ-ron tích chập (CNN) để phân loại 5 món ăn: bún bò, xôi, bánh xeo, bánh lọc và bánh mì Mô hình được huấn luyện trên tập dữ liệu gồm 70 ảnh mỗi loại, với các kỹ thuật tăng cường dữ liệu Sau khi huấn luyện, mô hình đạt độ chính xác khoảng 50% trên tập dữ liệu xác thực.
Mô hình:
Mô hình CNN được sử dụng trong bài báo cáo này có kiến trúc sau:
Lớp 1: Tích chập với 32 bộ lọc kích thước 3x3, kích hoạt ReLU.
Lớp 2: Max pooling 2x2.
Lớp 3: Dropout 0.2.
Lớp 4: Tích chập với 64 bộ lọc kích thước 3x3, kích hoạt ReLU.
Lớp 5: Max pooling 2x2.
Lớp 6: Dropout 0.2.
Lớp 7: Làm phẳng.
Lớp 8: Mật độ 224, kích hoạt ReLU.
Lớp 9: Mật độ 5, kích hoạt softmax.
Huấn luyện:
Mô hình được huấn luyện trên tập dữ liệu gồm 70 ảnh mỗi món ăn, chia thành 50 ảnh
để huấn luyện và 20 ảnh xác thực Kỹ thuật tăng cường dữ liệu được sử dụng để tăng kích thước tập dữ liệu và cải thiện khả năng khái quát của mô hình Các kỹ thuật tăng cường dữ liệu bao gồm:
Xoay ảnh ngẫu nhiên trong khoảng ±20 độ.
Cắt xéo ảnh theo tỷ lệ ngẫu nhiên trong khoảng ±0.2.
Phóng to hoặc thu nhỏ ảnh ngẫu nhiên trong khoảng ±0.2.
Lật ảnh theo chiều ngang với xác suất 50%.
Dịch chuyển kích thước ảnh gốc theo chiều ngang và dọc trong khoảng ±0.1 lần.
Mô hình được huấn luyện trong 30 epochs với optimizer Adam và loss function categorical crossentropy.
Kết quả:
Sau khi huấn luyện, mô hình đạt độ chính xác khoảng 50% trên tập dữ liệu xác thực
Mô hình có thể phân loại chính xác các món ăn trong các điều kiện ánh sáng và góc chụp khác nhau.
Kết luận:
Mô hình CNN được trình bày trong bài báo cáo này có thể phân loại 5 món ăn với độ chính xác không cao lắm Mô hình có thể được sử dụng để phân loại những hình ảnh đơn giản nổi bật dễ nhận dạng của các món ăn.
Phần code:
import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
from tensorflow.keras.optimizers import Adam
# Tăng cường dữ liệu
train_datagen = ImageDataGenerator(
rescale=1./255, # Chuẩn hóa pixel của ảnh để có giá trị trong
khoảng [0, 1]
rotation_range=20, # Xoay ảnh ngẫu nhiên trong khoảng ±20 độ
shear_range=0.2, # Cắt xéo ảnh theo tỷ lệ ngẫu nhiên trong khoảng
±0.2
zoom_range=0.2, # Phóng to hoặc thu nhỏ ảnh ngẫu nhiên trong khoảng
±0.2
Trang 6horizontal_flip=True, # Lật ảnh theo chiều ngang với xác suất 50%
width_shift_range=0.1, # Dịch chuyển kích thước ảnh gốc theo chiều ngang trong khoảng ±0.1 lần
height_shift_range=0.1) # Dịch chuyển kích thước ảnh gốc theo chiều dọc trong khoảng ±0.1 lần
test_datagen = ImageDataGenerator(rescale=1./255)
# Tạo trình tạo dữ liệu huấn luyện và xác thực
train_generator = train_datagen.flow_from_directory(
'/content/drive/MyDrive/5 món ăn/train',
target_size=(224, 224),
batch_size=32,
class_mode='categorical',)
validation_generator = test_datagen.flow_from_directory(
'/content/drive/MyDrive/5 món ăn/test',
target_size=(224, 224),
batch_size=32,
class_mode='categorical',)
# Kiến trúc mạng được cải thiện
model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(224, 224,
3)))
model.add(MaxPooling2D((2, 2)))
model.add(Dropout(0.2))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Dropout(0.2))
model.add(Flatten())
model.add(Dense(224, activation='relu'))
model.add(Dense(5, activation='softmax'))
# Huấn luyện mô hình
model.compile(loss='categorical_crossentropy', optimizer=Adam(),
metrics=['accuracy'])
model.fit_generator(train_generator,
epochs=30,
validation_data=validation_generator,)
# Lưu mô hình
model.save('nhandang5monan.h5')
Kết quả huấn luyện:
Epoch 1/30
8/8 [==============================] - 33s 4s/step - loss: 14.4343 - accuracy: 0.2040 - val_loss: 1.9595 - val_accuracy: 0.2000
Epoch 2/30
8/8 [==============================] - 31s 4s/step - loss: 2.0405 - accuracy: 0.2000 - val_loss: 1.6096 - val_accuracy: 0.1800
Epoch 3/30
8/8 [==============================] - 31s 4s/step - loss: 1.6108 - accuracy: 0.2480 - val_loss: 1.6095 - val_accuracy: 0.2000
Epoch 4/30
8/8 [==============================] - 33s 4s/step - loss: 1.6087 - accuracy: 0.2760 - val_loss: 1.6094 - val_accuracy: 0.2000
Trang 7Epoch 5/30
8/8 [==============================] - 31s 4s/step - loss: 1.6041 - accuracy: 0.2520 - val_loss: 1.6086 - val_accuracy: 0.2000
Epoch 6/30
8/8 [==============================] - 31s 4s/step - loss: 1.6006 - accuracy: 0.1720 - val_loss: 1.6045 - val_accuracy: 0.2400
Epoch 7/30
8/8 [==============================] - 31s 4s/step - loss: 1.5686 - accuracy: 0.3000 - val_loss: 1.5901 - val_accuracy: 0.2100
Epoch 8/30
8/8 [==============================] - 31s 4s/step - loss: 1.4192 - accuracy: 0.3760 - val_loss: 1.3902 - val_accuracy: 0.3400
Epoch 9/30
8/8 [==============================] - 31s 4s/step - loss: 1.4639 - accuracy: 0.3440 - val_loss: 1.4426 - val_accuracy: 0.4100
Epoch 10/30
8/8 [==============================] - 31s 4s/step - loss: 1.3991 - accuracy: 0.3880 - val_loss: 1.4948 - val_accuracy: 0.3100
Epoch 11/30
8/8 [==============================] - 30s 4s/step - loss: 1.3630 - accuracy: 0.3960 - val_loss: 1.3747 - val_accuracy: 0.3300
Epoch 12/30
8/8 [==============================] - 31s 4s/step - loss: 1.3237 - accuracy: 0.4360 - val_loss: 1.3676 - val_accuracy: 0.4100
Epoch 13/30
8/8 [==============================] - 32s 4s/step - loss: 1.2530 - accuracy: 0.4720 - val_loss: 1.3983 - val_accuracy: 0.3200
Epoch 14/30
8/8 [==============================] - 34s 4s/step - loss: 1.2039 - accuracy: 0.4720 - val_loss: 1.4362 - val_accuracy: 0.3800
Epoch 15/30
8/8 [==============================] - 31s 4s/step - loss: 1.1679 - accuracy: 0.5200 - val_loss: 1.3018 - val_accuracy: 0.3900
Epoch 16/30
8/8 [==============================] - 31s 4s/step - loss: 1.2174 - accuracy: 0.5160 - val_loss: 1.2863 - val_accuracy: 0.4000
Epoch 17/30
8/8 [==============================] - 31s 4s/step - loss: 1.2085 - accuracy: 0.4720 - val_loss: 1.3153 - val_accuracy: 0.4700
Epoch 18/30
8/8 [==============================] - 31s 4s/step - loss: 1.1483 - accuracy: 0.5560 - val_loss: 1.2312 - val_accuracy: 0.4700
Epoch 19/30
8/8 [==============================] - 31s 4s/step - loss: 1.1854 - accuracy: 0.5320 - val_loss: 1.2872 - val_accuracy: 0.4600
Epoch 20/30
8/8 [==============================] - 31s 4s/step - loss: 1.1144 - accuracy: 0.5840 - val_loss: 1.4077 - val_accuracy: 0.4000
Epoch 21/30
8/8 [==============================] - 31s 4s/step - loss: 1.1417 - accuracy: 0.5280 - val_loss: 1.2884 - val_accuracy: 0.4300
Epoch 22/30
8/8 [==============================] - 31s 4s/step - loss: 1.0640 - accuracy: 0.5600 - val_loss: 1.2153 - val_accuracy: 0.4900
Epoch 23/30
8/8 [==============================] - 33s 4s/step - loss: 1.0879 - accuracy: 0.5480 - val_loss: 1.2543 - val_accuracy: 0.4600
Epoch 24/30
8/8 [==============================] - 31s 4s/step - loss: 1.0060 - accuracy: 0.6120 - val_loss: 1.2250 - val_accuracy: 0.4900
Epoch 25/30
8/8 [==============================] - 31s 4s/step - loss: 1.0074 - accuracy: 0.6080 - val_loss: 1.2634 - val_accuracy: 0.5000
Epoch 26/30
Trang 88/8 [==============================] - 32s 4s/step - loss: 0.9486 - accuracy: 0.6280 - val_loss: 1.2168 - val_accuracy: 0.5300
Epoch 27/30
8/8 [==============================] - 31s 4s/step - loss: 0.8312 - accuracy: 0.6600 - val_loss: 1.3095 - val_accuracy: 0.4900
Epoch 28/30
8/8 [==============================] - 31s 4s/step - loss: 1.0551 - accuracy: 0.5680 - val_loss: 1.2568 - val_accuracy: 0.4800
Epoch 29/30
8/8 [==============================] - 34s 4s/step - loss: 0.9473 - accuracy: 0.6160 - val_loss: 1.2170 - val_accuracy: 0.4900
Epoch 30/30
8/8 [==============================] - 31s 4s/step - loss: 0.8895 - accuracy: 0.6680 - val_loss: 1.2197 - val_accuracy: 0.4900
Kết quả test:
Trang 9Tóm tắt:
Bài báo cáo này trình bày về việc xây dựng và huấn luyện một mạng nơ-ron tích chập (CNN) để phân loại 5 mệnh giá tiền Việt Nam: 5 nghìn đồng, 10 nghìn đồng, 50 nghìn đồng, 100 nghìn đồng và 200 nghìn đồng Mô hình được huấn luyện trên tập dữ liệu gồm 10 ảnh mỗi loại, với các kỹ thuật tăng cường dữ liệu Sau khi huấn luyện, mô hình đạt độ chính xác khoảng 50% trên tập dữ liệu xác thực.
Mô hình: ( Tương tự như trên )
Huấn luyện:
Mô hình được huấn luyện trong 15 epochs với optimizer Adam và loss function categorical crossentropy.
Kết quả:
Sau khi huấn luyện, mô hình đạt độ chính xác khoảng 50% trên tập dữ liệu xác thực
Kết luận:
Mô hình CNN được trình bày trong bài báo cáo này có thể phân loại 5 mệnh giá tiền với độ chính xác khá thấp
Phần code: ( Tương tự như trên )
Kết quả huấn luyện:
Epoch 1/15
2/2 [==============================] - 14s 10s/step - loss: 29.2038 - accuracy: 0.2000 - val_loss: 20.8214 - val_accuracy: 0.5556
Epoch 2/15
2/2 [==============================] - 6s 3s/step - loss: 61.7114 - accuracy: 0.1750 - val_loss: 21.7954 - val_accuracy: 0.1111
Epoch 3/15
2/2 [==============================] - 5s 2s/step - loss: 38.3014 - accuracy: 0.2250 - val_loss: 7.9967 - val_accuracy: 0.1111
Epoch 4/15
2/2 [==============================] - 7s 2s/step - loss: 15.4688 - accuracy: 0.2000 - val_loss: 1.6862 - val_accuracy: 0.1111
Epoch 5/15
2/2 [==============================] - 5s 3s/step - loss: 2.8107 - accuracy: 0.2500 - val_loss: 1.5632 - val_accuracy: 0.1111
Epoch 6/15
2/2 [==============================] - 7s 4s/step - loss: 2.6029 - accuracy: 0.2000 - val_loss: 1.5505 - val_accuracy: 0.3889
Epoch 7/15
2/2 [==============================] - 5s 3s/step - loss: 1.7788 - accuracy: 0.2000 - val_loss: 1.5773 - val_accuracy: 0.6667
Epoch 8/15
2/2 [==============================] - 6s 2s/step - loss: 1.6080 - accuracy: 0.3250 - val_loss: 1.5935 - val_accuracy: 0.6667
Epoch 9/15
2/2 [==============================] - 7s 4s/step - loss: 1.5892 - accuracy: 0.2000 - val_loss: 1.6002 - val_accuracy: 0.5556
Epoch 10/15
2/2 [==============================] - 5s 2s/step - loss: 1.5854 - accuracy: 0.2250 - val_loss: 1.5998 - val_accuracy: 0.4444
Epoch 11/15
2/2 [==============================] - 7s 2s/step - loss: 1.5799 - accuracy: 0.2500 - val_loss: 1.5931 - val_accuracy: 0.3889
Epoch 12/15
2/2 [==============================] - 5s 3s/step - loss: 1.5540 - accuracy: 0.2250 - val_loss: 1.5769 - val_accuracy: 0.6111
Epoch 13/15
2/2 [==============================] - 7s 5s/step - loss: 1.5510 - accuracy: 0.2250 - val_loss: 1.5508 - val_accuracy: 0.5556
Epoch 14/15
2/2 [==============================] - 6s 2s/step - loss: 1.5350 - accuracy: 0.2750 - val_loss: 1.5387 - val_accuracy: 0.5556
Epoch 15/15
Trang 102/2 [==============================] - 5s 2s/step - loss: 1.5041 - accuracy: 0.3750 - val_loss: 1.4193 - val_accuracy: 0.5556
Kết quả test: