Dựng mạng Convolutional Neural Network
Dựng mạng Convolutional Neural Network
Cái này đơn giản, chả có gì để nói cả.
1 | # Convolutional Neural Network |
1 | # Importing the Keras libraries and packages |
Thêm lớp tích chập 2 chiều (Conv2D) với số lượng 32 bộ lọc, kích thước là 3 x 3. Đầu vào là ảnh đã được xử lí (64,64,3) dùng hàm kích hoạt là relu.1
2# Step 1 - Convolution
classifier.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu'))
Tổng hợp theo giá trị lớn nhất. MaxPooling2D1
2# Step 2 - Pooling
classifier.add(MaxPooling2D(pool_size = (2, 2)))
Làm thêm 1 lượt nữa.1
2
3# Adding a second convolutional layer
classifier.add(Conv2D(32, (3, 3), activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))
Sử dụng Flatten để làm phẳng1
2# Step 3 - Flattening
classifier.add(Flatten())
Truyền tất cả giá trị qua mạng nơ-ron.1
2
3
4
5
6
7
8
9
10# Step 4 - Full connection
classifier.add(Dense(units = 128, activation = 'relu'))
classifier.add(Dense(units = 1, activation = 'sigmoid'))
# Compiling the CNN
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
# Part 2 - Fitting the CNN to the images
from keras.preprocessing.image import ImageDataGenerator
Đọc và biến đổi dữ liệu. Cắt, phóng ta, lật để tạo thêm dữ liệu, tăng hiệu quả của mạng. Xem chi tiết tại ImageDataGenerator.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24train_datagen = ImageDataGenerator(rescale = 1./255,
shear_range = 0.2,
zoom_range = 0.2,
horizontal_flip = True)
test_datagen = ImageDataGenerator(rescale = 1./255)
training_set = train_datagen.flow_from_directory('dataset/training_set',
target_size = (64, 64),
batch_size = 32,
class_mode = 'binary')
test_set = test_datagen.flow_from_directory('dataset/test_set',
target_size = (64, 64),
batch_size = 32,
class_mode = 'binary')
classifier.fit_generator(training_set,
steps_per_epoch = 8000,
epochs = 2,
validation_data = test_set,
validation_steps = 2000)