Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 11

BỘ 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


Tó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
horizontal_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
Epoch 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:
Tó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
horizontal_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
Epoch 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
8/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:
Tó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
2/2 [==============================] - 5s 2s/step - loss: 1.5041 -
accuracy: 0.3750 - val_loss: 1.4193 - val_accuracy: 0.5556
Kết quả test:

You might also like