Hướng
dẫn triển khai Deep learning model với Keras
chuc1803@gmail.com
Deep learning là một lĩnh vực chuyên sâu của Machine
Leaning. Deep learning sử dụng một số kỹ
thuật của Machine Learning để giải quyết các vấn đề thực tế bằng cách khai thác
khả năng của các neural network nhiều lớp ẩn. Deep learning hiện nay đang được
nghiên cứu và triển khai mạnh mẽ bởi kết quả chính xác cao. Hiểu một cách đơn
giản DEEP LEARNING = LEARNING BASED ON DEEP NEURAL NETWORK.
Keras là thư viên rất mạnh và dễ sử dụng của
Python để phát triển và đánh giá các deep learning models. Keras kết hợp với
Tensorflow (backend) cho phép triển khai các deep neural network models chỉ với
vài dòng lệnh.
Bài viết này giới thiệu từng bước để sử dụng
Keras triển khai một Deep Learning model.
Yêu cầu:
Softwares:
1. Cài đặt Python (nên
dùng môi trường anaconda)
2. Cài đặt Keras
C:\Users\chucnv>conda
install -c conda-forge keras
3. Cài đặt Tensorflow
C:\Users\chucnv>conda install -c
anaconda tensorflow-gpu
Dataset: Data sử dụng minh họa về indians
diabetes (về bệnh đái tháo đường) được cho trên github. Download và xem giải
thích dataset tại các link sau:
Dataset File
Dataset Details
Các
bước triển khai như sau:
1. Load Data.
2. Define Model.
3. Deploy Model.
4. Fit Model.
5. Evaluate Model
6. Make Prediction
1. Importing
requirement packages and Loading dataset
# Importing requirement packages
from keras.models import
Sequential
from keras.layers import Dense
import numpy
# fix random seed for
reproducibility
numpy.random.seed(7)
# load indians diabetes dataset
dataset =
numpy.loadtxt("D:/Python_Pro/diabetes.csv", delimiter=",")
# split into input (X) and
output (Y) variables
X = dataset[:,0:8]
Y = dataset[:,8]
2.
Define Model
Models trong Keras được định nghĩa như là một sequence
of layers. Vì vậy chúng ta tạo một Sequential model và thêm các layers cho đến
khi chúng ta được một model có kết quả mong muốn. Trong ví dụ này sử dụng cấu
trúc fully-connected network với 3 layers. Fully connected layers được định
nghĩa bằng cách sử dụng Dense class.
Chúng ta có thể xác định số neurons trong layer, initialization method và activation
function cho Model. Trong trường hợp này, khởi tạo network weights bằng các số
ngẫu nhiên nhỏ (từ 0 đến 0.5) bằng cách sử dụng uniform distribution (‘uniform‘).
Một cách khác thường dùng để khởi tạo network weights là Gaussian distribution. Chúng ta sẽ sử dụng
hàm kích hoạt (activation function) rectifier linear unit (‘relu‘) cho 2 layers
đầu tiên của network và sigmoid function
cho output layer. sigmoid trên output layer để đảm bảo rằng output chỉ nằm
trong khoảng 0 và 1 với threshold là 0.5
để dễ dàng mapping kết quả của network là 1 (bị bệnh đái tháo đường) và 0
(không bị bệnh). Layer đầu tiên gồm 12 neurons và 8 input variables, layers thứ
2 gồm 8 neurons, output layers gồm 1 neuron để dự đoán bệnh(1: có bệnh, 0:
không có bệnh)
#
create model
model
= Sequential()
model.add(Dense(12,
input_dim=8, activation='relu'))
model.add(Dense(8,
activation='relu'))
model.add(Dense(1,
activation='sigmoid'))
3.
Deploy Model
Sau khi đã define model, bây giờ chúng ta có
thể deploy model
Deploy model sử dụng các thư viện phía backend
của TensorFlow. Phía backend sẽ tự động chọn cách để training model sao cho
hiệu quả nhất (như việc chọn chạy trên CPU hoặc GPU hoặc thậm chí trên các hệ
thống phân tán). Training model có nghĩa là tìm ra tập trọng số (network weights)
tốt nhất của model để dự đoán. Khi deploy model chúng ta phải xác định loss function để đánh giá tập trọng số.
Trong trường hợp này chúng ta sử dụng logarithmic
loss cho phân lớp nhị phân (binary classification) được định nghĩa trong Keras
là “binary_crossentropy“.
Sử dụng gradient descent algorithm “adam” để tối ưu.
#
Deploying model
model.compile(loss='binary_crossentropy',
optimizer='adam', metrics=['accuracy'])
4.
Fit Model
Sau khi đã deploy model, gọi hàm fit(), quá
trình training (training process) sẽ được thực hiện lặp lại với số lần lặp xác
định trên dataset (gọi là epochs),
trong quá trình này cũng phải xác định số instannces dùng để evaluate model
trước khi cập nhật network weights, tham số này gọi là batch_size. Trong ví dụ này, sẽ chạy với số lần lặp nhỏ (epochs =150)
và batch_size là 10
#
Fit the model
model.fit(X,
Y, epochs=150, batch_size=10)
5.
Evaluate Model
Sau khi đã train neural network trên
toàn bộ dataset, bây giờ đánh giá hiệu quả của model.
#
evaluate the model
scores
= model.evaluate(X, Y)
print("\n%s:
%.2f%%" % (model.metrics_names[1], scores[1]*100))
6.
Make Predictions
Sau khi fit model, có thể sử dụng model.predict()
để dự đoán
#
calculate predictions
predictions
= model.predict(X)
#
round predictions
rounded
= [round(x[0]) for x in predictions]
print(rounded)
---
Download code file tại ĐÂY
Xem Video tại Đây
Xem thêm video Deep learning model (advanced) tại
đây: