Keras是基于Theano的一個深度學習架構,它的設計參考了Torch,用Python語言編寫,是一個高度子產品化的神經網絡庫,支援GPU和CPU。
使用文檔在這:http://keras.io/,
中文文檔在這:http://keras-cn.readthedocs.io/en/latest/ ,
這個架構是2015年流行起來的,使用中遇到的困惑或者問題可以送出到github:https://github.com/fchollet/keras。
Keras主要包括14個子產品包,可參見文檔https://keras.io/layers/ ,下面主要對Models、Layers、Initializations、Activations、Objectives、Optimizers、Preprocessing、metrics八個子產品包展開介紹。
1. Models包:keras.models
這是Keras中最主要的一個子產品,用于對各個元件進行組裝。
詳細說明:http://keras.io/models/
from keras.models import Sequential
model = Sequential() # 初始化模型
model.add(...) # 可使用add方法組裝元件
2. Layers包:keras.layers
該子產品主要用于生成神經網絡層,包含多種類型,如 Core layers、Convolutional layers、recurrent layers、advanced_activations layers、normalization layers、embeddings layers 等。
其中Core layers裡面包含了 flatten (CNN的全連接配接層之前需要把二維特征圖flatten成為一維的)、 reshape (CNN輸入時将一維的向量弄成二維的)、 dense (隐藏層)。
Convolutional layers層包含Theano的Convolution2D的封裝等。
詳細說明:http://keras.io/layers/
from keras.layers import Dense # Dense表示BP層
model.add(Dense(input_dim=3,output_dim=5)) # 加入隐含層
3. Initializations包:keras.initializations
該子產品主要負責對模型參數(權重)進行初始化,初始化方法包括: uniform、lecun_uniform、normal、orthogonal、zero、glorot_normal、he_normal 等。
詳細說明:http://keras.io/initializations/
model.add(Dense(input_dim=3,output_dim=5,init='uniform')) #加入帶初始化(uniform)的隐含層
4. Activations包:keras.activations、keras.layers.advanced_activations(新激活函數)
該子產品主要負責為神經層附加激活函數,如 linear、sigmoid、hard_sigmoid、tanh、softplus、softmax、relu以及LeakyReLU、PReLU 等比較新的激活函數。
詳細說明:http://keras.io/activations/
model.add(Dense(input_dim=3, output_dim=5, activation='sigmoid')) # 加入帶激活函數(sigmoid)的隐含層
等價于:
model.add(Dense(input_dim=3, output_dim=5))
model.add(Activation('sigmoid'))
5. Objectives包:keras.objectives
該子產品主要負責為神經網絡附加損失函數,即目标函數。如 mean_squared_error,mean_absolute_error ,squared_hinge,hinge,binary_crossentropy,categorical_crossentropy等,其中binary_crossentropy,categorical_crossentropy 是指logloss。
注:目标函數的設定是在模型編譯階段。
詳細說明:http://keras.io/objectives/
model.compile(loss='binary_crossentropy', optimizer='sgd') #loss是指目标函數
6. Optimizers包:keras.optimizers
該子產品主要負責設定神經網絡的優化方法,如最基本的随機梯度下降SGD,另外還有 Adagrad、Adadelta、RMSprop、Adam ,一些新的方法以後也會被不斷添加進來。
詳細說明:http://keras.io/optimizers/
keras.optimizers.SGD(lr=0.01, momentum=0.9, decay=0.9, nesterov=False)
上面的代碼是SGD的使用方法,lr表示學習速率,momentum表示動量項,decay是學習速率的衰減系數(每個epoch衰減一次),Nesterov的值是False或者True,表示使不使用Nesterov momentum。
model = Sequential()
model.add(Dense(64, init='uniform', input_dim=10))
model.add(Activation('tanh'))
model.add(Activation('softmax'))
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='mean_squared_error', optimizer=sgd) #指優化方法sgd
model.compile(loss='binary_crossentropy', optimizer='sgd')
7. Preprocessing包:keras.preprocessing
資料預處理子產品,包括序列資料的處理、文本資料的處理和圖像資料的處理等。對于圖像資料的處理,keras提供了ImageDataGenerator函數,實作資料集擴增,對圖像做一些彈性變換,比如水準翻轉,垂直翻轉,旋轉等。
8. metrics包:keras.metrics
與sklearn中metrics包基本相同,主要包含一些如binary_accuracy、mae、mse等的評價方法。
predict = model.predict_classes(test_x) #輸出預測結果
keras.metrics.binary_accuracy(test_y, predict) #計算預測精度