Dựng mạng Convolutional Neural Network

Cái này đơn giản, chả có gì để nói cả.

1
2
3
4
5
6
7
8
9
10
11
12
# Convolutional Neural Network

# Installing Theano
# pip install --upgrade --no-deps git+git://github.com/Theano/Theano.git

# Installing Tensorflow
# pip install tensorflow

# Installing Keras
# pip install --upgrade keras

# Part 1 - Building the CNN
1
2
3
4
5
6
7
8
9
# Importing the Keras libraries and packages
from keras.models import Sequential
from keras.layers import Conv2D
from keras.layers import MaxPooling2D
from keras.layers import Flatten
from keras.layers import Dense

# Initialising the CNN
classifier = Sequential()

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. MaxPooling2D

1
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ẳng

1
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
24
train_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)