Keras là một library được phát triển vào năm 2015 bởi François Chollet, là một kỹ sư nghiên cứu deep learning tại google. Nó là một open source cho neural network được viết bởi ngôn ngữ python. keras là một API bậc cao có thể sử dụng chung với các thư viện deep learning nổi tiếng như tensorflow(được phát triển bởi gg), CNTK(được phát triển bởi microsoft),theano(người phát triển chính Yoshua Bengio). keras có một số ưu điểm như :
- Dễ sử dụng,xây dựng model nhanh.
- Có thể run trên cả cpu và gpu
- Hỗ trợ xây dựng CNN , RNN và có thể kết hợp cả 2.*
Cách cài đặt :
Trước khi cài đặt keras bạn phải cài đặt một trong số các thư viện sau tensorflow,CNTK,theano. Sau đó bạn có thể cài đặt bằng 1 số lệnh sau đối với window:
- pip install keras
- conda install keras
Tìm hiểu cấu trúc của Keras
Cấu trúc của keras chúng ta có thể chia ra thành 3 phần chính :
Đầu tiền là các module dùng để xây dựng bộ xương cho model :
Đầu tiên ta tìm hiểu sub-module : Models trong keras. Để khởi tạo một model trong keras ta có thể dùng 2 cách:
- Cách 1 : Thông qua Sequential như ví dụ dưới. Chúng ta khởi tạo model bằng
Sequential
sau đó dùng method add để thêm các layer.
import numpy as np
from keras.models import Sequential,Model
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),
activation='relu',
input_shape=input_shape))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))
model.compile(loss=keras.losses.categorical_crossentropy,
optimizer=keras.optimizers.Adadelta(),
metrics=['accuracy'])
model.fit(x_train, y_train,
batch_size=batch_size,
epochs=epochs,
verbose=1,
validation_data=(x_test, y_test))
- Cách thứ 2 để khởi tạo model là dùng function API . Như ví dụ dưới
from keras.models import Model
from keras.layers import Input, Dense
a = Input(shape=(32,))
b = Dense(32)(a)
model = Model(inputs=a, outputs=b)
- Nó cũng tương tự như computation graph, chúng ta xem input cũng là một layer sau đó build từ input tới output sau đó kết hợp lại bằng hàm
Model
. Ưu điểm của phương pháp này có thể tùy biến nhiều hơn,giúp ta xây dựng các model phức tạp nhiều input và output. - Khi chúng ta khởi tạo một model thì có các method ta cần lưu ý là :
compile
: Sau khi build model xong thì compile nó có tác dụng biên tập lại toàn bộ model của chúng ta đã build. Ở đây chúng ta có thể chọn các tham số để training model như : thuật toán training thông qua tham sốoptimizer
, function loss của model chúng ta có thể sử dụng mặc định hoặc tự build thông qua tham sốloss
, chọn metrics hiện thị khi model được trainingsummary
method này giúp chúng ta tổng hợp lại model xem model có bao nhiêu layer, tổng số tham số bao nhiêu,shape của mỗi layer..fit
dùng để đưa data vào training để tìm tham số model(tương tự như sklearn)predict
dùng để predict các new instanceevaluate
để tính toán độ chính xác của modelhistory
dùng để xem accuracy,loss qua từng epochs . Thường dùng với matplotlib để vẽ chart.
Tiếp theo chúng ta tìm hiểu đên sub-module Layers : Nó chứa các layers chuyên dụng để ta build các model như CNN,RNN,GANs..Có rất nhiều layers nên ta chỉ quan tâm đến một số layer thường sử dụng.
Core layer : chứa các layer mà hầu như model nào cũng sử dụng đến nó.
Dense
layer này sử dụng như một layer neural network bình thường. Các tham số quan tâm.units
chiều outputactivation
dùng để chọn activation.input_dim
chiều input nếu là layer đầu tiênuse_bias
có sử dụng bias ko,true or falsekernel_initializer
khởi tạo giá trị đầu cho tham số trong layer trừ biasbias_initializer
khởi tạo giá trị đầu cho biaskernel_regularizer
regularizer cho coeffbias_regularizer
regularizer cho biasactivity_regularizer
có sử dụng regularizer cho output kokernel_constraint
,bias_constraint
có ràng buộc về weight ko
Activation
dùng để chọn activation trong layer(có thể dùng tham số activation thay thế).Xem phần sau.Dropout
layer này dùng như regularization cho các layer hạn chế overfiting. Tham số cần chú ý :rate
tỉ lệ dropoutnoise_shape
cái này chưa tìm hiểuseed
random seed bình thường
Flatten
dùng để lát phằng layer để fully connection, vd : shape : 20x20 qua layer này sẽ là 400x1Input
layer này sử dụng input như 1 layer như vd trước ta đã nói.Reshape
giống như tên gọi của nó, dùng để reshapeLambda
dùng như lambda trong python thôi ha- Convolutional Layers: chứa các layer trong mạng nơ ron tích chập .
Conv1D
,Conv2D
là convolution layer dùng để lấy feature từ image. tham số cần chú ý:filters
số filter của convolution layerkernel_size
size window search trên imagestrides
bước nhảy mỗi window searchpadding
same là dùng padding,valid là kodata_format
format channel ở đầu hay cuối
UpSampling1D
,UpSampling2D
Ngược lại với convolution layersize
vd (2,2) có nghĩa mỗi pixel ban đầu sẽ thành 4 pixelZeroPadding1D
,ZeroPadding2D
dùng để padding trên image.padding
số pixel padding
- Pooling Layers : Chứa các layer dùng trong mạng CNN.
MaxPooling1D
,MaxPooling2D
dùng để lấy feature nổi bật(dùng max) và giúp giảm parameter khi trainingpool_size
size poolingAveragePooling1D
,AveragePooling2D
giống như maxpooling nhưng dùng Average
GlobalMaxPooling1D
,GlobalMaxPooling2D
chưa dùng bao giờ nên chưa hiểu nó làm gì- Recurrent Layers chứa các layers dùng trong mạng RNN
RNN
layer RNN cơ bảnGRU
khắc phục hạn chế RNN tránh vanish gradient.LSTM
Long Short-Term Memory layer
- Embedding layer :
Embedding
dùng trong nhiều trong nlp mục đích embbding sang một không gian mới có chiều nhỏ hơn, và dc learning from data thay cho one-hot lad hard code.input_dim
size của vocabularyoutput_dim
size của word embbdinginput_length
chiều dài mỗi sequence
- Merge Layers chứa các layers giúp chúng ta cộng,trừ,hoặc nối các layer như các vector vậy :
Add
cộng các layersSubtract
trừ các layersMultiply
nhân các layerAverage
tính trung bình các layersMaximum
lấy maximun giữa các layersConcatenate
nối các layer
Dot
Nhân matrix giữ 2 layers Own Keras layers : Giúp chúng ta có thể xây dựng layer như theo ý muốn, gồm 3 method chúng ta cần chú ý làbuild
,call
vàcompute_output_shape
from keras import backend as K
from keras.engine.topology import Layer
import numpy as np
class MyLayer(Layer):
def __init__(self, output_dim, **kwargs):
self.output_dim = output_dim
super(MyLayer, self).__init__(**kwargs)
def build(self, input_shape):
# Create a trainable weight variable for this layer.
self.kernel = self.add_weight(name='kernel',
shape=(input_shape[1], self.output_dim),
initializer='uniform',
trainable=True)
super(MyLayer, self).build(input_shape) # Be sure to call this at the end
def call(self, x):
return K.dot(x, self.kernel)
def compute_output_shape(self, input_shape):
return (input_shape[0], self.output_dim)
Tiếp theo chúng ta tìm hiểu đến tiền xử lý dữ liệu trong keras, nó được chia ra làm 3 phần :
Sequence Preprocessing
tiền xử lý chuỗi .TimeseriesGenerator
cái này dùng để tạo dữ liệu cho time seriespad_sequences
dùng để padding giúp các chuỗi có độ dài bằng nhauskipgrams
tạo data trong model skip gram,kết quả trả về 2 tuple nếu word xuất hiện cùng nhau là 1 nếu ko là 0.
Text Preprocessing
tiền xử lý textTokenizer
giống kỹ thuật tokenizer trong nlp, tạo tokenizer từ docummentone_hot
tạo data dạng one hot encodingtext_to_word_sequence
covert text thành sequence
Image Preprocessing
tiền xử lý imageImageDataGenerator
tạo thêm data bằng cách scale,rotation...
Các function trong bộ xương của model
Các hàm loss functions
thường dùng :
mean_squared_error
thường dùng trong regression tính theo eculicmean_absolute_error
tính theo trị tuyệt đốicategorical_crossentropy
dùng trong classifier nhiều classbinary_crossentropy
dùng trong classifier 2 classkullback_leibler_divergence
dùng để tính loss giữa phân phối thực tế và thực nghiệm
metrics
nó là thước đo để ta đánh giá accuracy của model :
binary_accuracy
nếu y_true==y_pre thì trả về 1 ngược lại 0,dùng cho 2 classcategorical_accuracy
tương tự binary_accuracy nhưng cho nhiều class
optimizers
dùng để chọn thuật toán training.
SGD
Stochastic gradient descent optimizerRMSprop
RMSProp optimizerAdam
Adam optimizer
activations
để chọn activation function
linear
như trong linear regressionsoftmax
dùng trong multi classifierrelu
max(0,x) dùng trong các layer cnn,rnn để giảm chi phí tính toántanh
range (-1,1)Sigmoid
range (0,1) dùng nhiều trong binary class
Callbacks : khi model chúng ta lớn có khi training thì gặp sự cố ta muốn lưu lại model để chạy lại thì callback giúp t làm điều này :
ModelCheckpoint
lưu lại model sau mỗi epochEarlyStopping
stop training khi training ko cải thiện modelReduceLROnPlateau
giảm learning mỗi khi metrics ko được cải thiện
Datasets. Keras hỗ trợ một số dataset theo công thức :
cifar100
gồm 50,000 32x32 color training images, labeled over 100 categories, and 10,000 test images.mnist
data 70k image data hand written.fashion_mnist
Dataset of 70k 28x28 grayscale images of 10 fashion categoriesimdb
25,000 movies reviews from IMDB, label đánh theo pos/negreuters
11,228 newswires from Reuters, labeled over 46 topicsboston_housing
data giá nhà ở boston theo 13 features
from keras.datasets import name_data
(X_train,X_test),(y_train,y_test) = name_data.load_data()
Applications
chứa các pre-training weight của các model deep learning nổi tiếng.Xception
,VGG16
,VGG19
,resnet50
,inceptionv3
,
InceptionResNetV2
,MobileNet
,DenseNet
,NASNet
cẩu trúc chung như sau :
preprocess_input
dùng để preprocessing input custom same với input của pretrainingdecode_predictions
dùng để xem label predict
from keras.applications.name_pre_train import Name_pre_train
from keras.applications.name_pre_train import preprocess_input, decode_predictions
model = Name_pre_train(weights='tên dataset')
backends
banckend có nghĩa là thay vì keras xây dựng từ đầu các công thức từ đơn giản đến phức tạp, thì nó dùng những thư viện đã xây dựng sẵn rồi và dùng thôi. Giúp tiết kiệm dc thời gian và chí phí. Trong keras có hỗ trợ 3 backend là tensorflow,theano và CNTK.
initializers
khởi tạo giá trị weight của coeff và bias trước khi training lần lượt kernel_initializer
and bias_initializer
. mặc định là glorot_uniform
phân phối uniform với giá trị 1/căn(input+output).
regularizers
Dùng để phạt những coeff nào tác động quá mạnh vào mỗi layer thường dùng là L1 và L2
constraints
dùng để thiết lập các điều kiện ràng buộc khi training
visualization
giúp chúng ta plot lại cấu trúc mạng neral network.
Utils
chứa các function cần thiết giúp ta xử lý data nhanh hơn.
normalize
chuẩn hóa data theo L2
plot_model
giúp chúng ta plot model
to_categorical
covert class sang binary class matrix