Keras是一個由Python編寫的開源人工神經網路庫,可以作為Tensorflow、Microsoft-CNTK和Theano的高階應用程式接口,進行深度學習模型的設計、調試、評估、套用和可視化。
Keras在代碼結構上由面向對象方法編寫,完全模組化並具有可擴展性,其運行機制和說明文檔有將用戶體驗和使用難度納入考慮,並試圖簡化複雜算法的實現難度。Keras支持現代人工智慧領域的主流算法,包括前饋結構和遞歸結構的神經網路,也可以通過封裝參與構建統計學習模型。在硬體和開發環境方面,Keras支持多作業系統下的多GPU並行計算,可以根據後台設定轉化為Tensorflow、Microsoft-CNTK等系統下的組件。
Keras的主要開發者是谷歌工程師François Chollet,此外其GitHub項目頁面包含6名主要維護者和超過800名直接貢獻者。Keras在其正式版本公開後,除部分預編譯模型外,按MIT許可證開放原始碼。
基本介紹
- 外文名:Keras
- 開發者:François Chollet 等
- 初始版本:0.1.0/2015年6月13日
- 穩定版本:2.3.0/2019年09月17日
- 程式語言:Python
- 平台:Linux,macOS,Windows
- 類型:神經網路庫,應用程式接口
- 許可協定:MIT License(不包含預編譯模型)
歷史與命名
安裝
pip install kerasconda install keras
神經網路API
屬性與方法
- model.layers返回一個列表,列表中包含該模型內所有已創建的層對象(參見“層API”),例如keras.layers.Dense
- model.inputs返回一個列表,列表包含該模型輸入端接收的數據類型,例如以Tensorflow為後台時返回tf.Tensor
- model.outputs與model.inputs相同但返回輸出端信息。
- model.summary返回該模型的結構信息、總參數量、可學習參數量等信息。
- model.get_config返回一個字典,字典包含該模型所有對象的結構和編譯信息。Keras可以通過該信息建立新模型。
- model.get_weights返回一個列表,列表中每個成員都是NumPy數組形式的模型權重,列表的順序為輸入端到輸出端。
- model.set_weights(pre_trained_w)指定模型的所有權重,指定的權重必須與model.get_weights返回的權重大小一致。
- model.to_yaml將Keras模型的結構輸出為yaml檔案,不包含模型權重。輸出完成後,Keras模型可以由yaml檔案導入。
- model.save_weights(filepath)將Keras模型的權重保存為HDF5檔案,運行時指定檔案路徑filepath。
- model.load_weights(filepath, by_name=False)由HDF5檔案導出權重到模型。model.load_weights通常只接受model.save_weights輸出的檔案,在接收其他來源的檔案時,需要指定by_name=True並要求HDF5的變數名與模型層對象的名字相同。
搭建模型
import keras# 定義一個8-16-2的感知器(方法一)model = keras.models.Sequential([keras.layers.Dense(16, activation='relu', input_shape=(8,)), keras.layers.Dense(2, activation='sigmoid')])# (方法二)model = keras.models.Sequential()model.add(keras.layers.Dense(16, activation='relu', input_shape=(8,)))model.add(keras.layers.Dense(2, activation='sigmoid'))
import keras# 定義一個8-16-2的感知器IN = keras.layers.Input(shape=(8,))HIDDEN = keras.layers.Dense(16, activation='relu')(IN)OUT = keras.layers.Dense(2, activation='sigmoid')(HIDDEN)model = keras.models.Model(inputs=IN, outputs=OUT)
使用模型
model.compile(optimizer, loss=None, metrics=None, loss_weights=None, sample_weight_mode=None, weighted_metrics=None, target_tensors=None)·
- optimizer為最佳化器、loss為損失函式、metrics為評價函式,可以按列表使用多個評價。
- loss_weights為損失權重,可以在多輸出的模型中對不同輸出所對應的損失疊加不同的權重係數,要求提供與模型損失相對應的列表或張量。
- sample_weight_mode是進行樣本賦權的參量,默認為None,表示在model.fit中進行一維賦權;在編譯時間序列模型時,可選擇sample_weight_mode="temporal",此時模型對時間序列樣本(按時間步)進行二維賦權。
- weighted_metrics和metrics的用法相同,在不指定樣本賦權時等價於metrics,在指定了樣本賦權時會對賦權樣本的學習進行評價。
- target_tensor:較少使用的參量,Tensorflow後台的Keras默認為學習目標分配張量占位符,但使用者可以調用該參量顯式指定學習目標的張量。
model.fit(x=None, y=None, verbose=1, callbacks=None, epochs=1, initial_epoch=0, class_weight=None steps_per_epoch=None, batch_size=None, validation_split=0.0, validation_data=None, validation_steps=None, validation_freq=1, shuffle=True, sample_weight=None) model.fit_generator(generator,..., max_queue_size=10, workers=1, use_multiprocessing=False) # ... 表示與model.fit相同的關鍵字
- verbose表示在學習時顯示進度條和當前評估結果,默認為開啟。
- callback是回饋器選項(參見“回饋器”)。
- epochs是學習的紀元數,即對所有學習樣本疊代的次數。
- initial_epoch表示開始學習時的紀元數,如果沒有載入先前的學習權重則默認為從0開始。
- class_weight是在分類問題中進行類別賦權的參量,即對不同分類的學習目標使用不同的權重。calss_weight的輸入為一個字典,變數名為類別名,內容為權重,例如對二元分類,類別名通常為“0”和“1”。
- x表示輸入特徵,y表示學習目標,batch_size表示分批學習時單個批次的樣本數。steps_per_epoch表示參與學習的批次數,默認值None表示總樣本數除以單個批次的樣本數,即可允許的最大批次數。
- validation_split表示樣本中用於模型驗證(validation)的比例,這部分數據會按比例隨機選取且不參與學習。
- validation_data接收一個包含或(x, y)或(x, y, sample_weight)的Python元組用於學習時的驗證。
- validation_freq僅在調用了validation_split或validation_data時使用,表示模型驗證的頻率,默認值為1,表示每個紀元都進行驗證。validation_freq也接收列表,列表中的元素表示進行模型驗證的紀元數,例如[1, 5, 10]表示在第1、5、10個紀元進行模型驗證。
- validation_steps僅在調用了steps_per_epoch後使用,表示參與模型驗證的批次數。
- shuffle是數據的洗牌選項,僅在調用了steps_per_epoch=None時使用,默認值為True,表示完全洗牌,此外也可選False和batch,後者表示僅在一個批次的樣本內洗牌。
- sample_weight是對樣本賦權的參量,通常不和類別賦權的參量calss_weight一起調用。在model.compile中定義sample_weight_mode=None時,sample_weight接收一個1維NumPy數組,大小與樣本總數相同;在定義sample_weight_mode=“temporal”時,calss_weight接收一個二維數組,按行表示每個樣本在不同時間步的權重,即數組大小為(sample, timestep)。
- generator表示生成器(參見“通用工具”),返回輸入特徵、學習目標和樣本權重,不返回樣本權重時默認均等賦權。
- steps_per_epoch的含義與model.fit相同,但默認值為生成器的內部方法__len__(self)的返回值。
- validation_data的含義與model.fit相同,接收相同的輸入,但也接收驗證數據的生成器。
- validation_step僅在validation_data接收生成器時使用,表示參與模型驗證的批次數。
- validation_freq僅在調用了validation_data時有效,表示進行模型驗證的頻率,使用方法與model.fit相同。
- max_queue_size接收一個整數,表示生成器的最大佇列數。
- use_multiprocessing默認為False,表示不使用基於執行緒的流程。在計算系統具有多執行緒能力且生成器支持Python的多執行緒處理框架,即支持pickle操作時,可以選擇True。
- workers表示工作的執行緒數,默認為0,表示僅在主執行緒運行,在use_multiprocessing=True時可選大於0的整數。
model.evaluate(x=None, y=None, batch_size=None, verbose=1, sample_weight=None, steps=None, callbacks=None)model.evaluate_generator(generator, ... max_queue_size=10, workers=1, use_multiprocessing=False) # ... 表示與model.evaluate相同的關鍵字
model.predict(x, batch_size=None, verbose=0, steps=None, callbacks=None)model.predict_generator(generator, ..., max_queue_size=10, workers=1, use_multiprocessing=False)model.predict_on_batch(x)
層API
屬性與方法
- layer.get_weights返回一個列表,列表中的元素為NumPy數組形式的,該層對象的權重矩陣。
- layer.set_weights(weights) 指定一個層對象的權重,指定的權重必須與layer.get_weights返回的權重大小一致。
- layer.get_config: 返回一個字典,字典包含該層對象的結構信息。Keras可以通過該信息對層進行重建。
- layer.get_input_at(node_index) 按節點的索引返回層對象的輸入張量
- layer.get_output_at(node_index) 按節點的索引返回層對象的輸出張量
- layer.get_input_shape_at(node_index) 按節點的索引返回層對象輸入張量的大小
- layer.get_output_shape_at(node_index) 按節點索引返回層對象輸出張量的大小
- layer.input
- layer.output
- layer.input_shape
- layer.output_shape
核心層
keras.layers.Input(shape=None, batch_shape=None, name=None, dtype=None, sparse=False, tensor=None)
- shape和batch_shape表示張量的大小,接收Python元組,其中shape不指定數據批次的長度。
- name接收一個字元串,表示該輸入層的名稱
- dtype按字元形式接收張量的數據類型,例如‘float32’、'int32'等
- spare和tensor表示輸入層返回張量的類型,前者表示是否返回稀疏張量,後者取默認值時創建一個張量占位符,接收了指定張量時返回數值到該指定張量。
keras.layers.Dense(units, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)
- activation表示該全連線層使用的激活函式,接收一個激活函式對象,例如keras.activations.sigmoid,也可接收關鍵字,例如'sigmoid',使用關鍵字時該激活函式類的參量取默認值。默認值None表示不使用激活函式。全連線層中激活函式的計算在權重計算完成後進行。
- use_bias接收一個邏輯變數,默認值為True,表示該全連線層的權重矩陣中包含一個偏差量,偏差量和其餘權重一起在學習時進行更新。
- kernel_initializer表示該全連線層權重的初始化方法,接收一個keras.initializers對象或其關鍵字,默認值為keras.initializers.glorot_normal(seed=None),從一個0均值的常態分配中取隨機數進行權重初始化。
- bias_initializer在use_bias=True時可用,接收一個偏差量的初始化器對象或其關鍵字,默認值為keras.initializers.Zeros,表示按0值張量初始化。
- kernel_regularizer和bias_regularizer表示該全連線層中權重矩陣的正則化方法,接收一個正則化器對象,默認值None表示不使用正則化,使用正則化時可用的對象包括keras.regularizers.l1、keras.regularizers.l2和keras.regularizers.l1_l2。
- activity_regularizer表示該全連線層輸出的正則化,調用方法與kernel_regularizer和bias_regularizer相同。
- kernel_constraint和bias_constraint表示該全連線層中權重矩陣使用的參數限制方法,接收一個參數限制器,默認值為None,表示不限制參數,其它可用對象包括keras.constraints.NonNeg、keras.constraints.UnitNorm和keras.constraints.MinMaxNorm。
keras.layers.Activation(activation)
keras.layers.Dropout(rate, noise_shape=None, seed=None)keras.layers.SpatialDropout1D(rate) # same for 2D & 3D
keras.layers.ActivityRegularization(l1=0.0, l2=0.0)
- keras.layers.Flatten可以將多維張量展開成1維張量,可類比numpy.flatten
- keras.layers.Reshape和keras.layers.Permute可以調整張量的維度,可類比numpy.reshape和numpy.permute。
- keras.layers.RepeatVector可以在新的維度複製張量,可類比numpy.repeat。
- keras.layers.Lambda與Python中匿名函式類似,是一個通用的操作封裝器。
- keras.layers.Masking忽略張量中取值為給定值的元素,接近於numpy.ma.masked_where。
卷積層與池化層
keras.layers.Conv2D(filters, kernel_size, strides=(1, 1), padding='valid', dilation_rate=(1, 1), activation=None, use_bias=True, data_format=None, bias_initializer='zeros', kernel_initializer='glorot_uniform', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)keras.layers.SeparableConv2D(..., depth_multiplier=1, depthwise_initializer='glorot_uniform', pointwise_initializer='glorot_uniform', bias_initializer='zeros', depthwise_regularizer=None, pointwise_regularizer=None, bias_regularizer=None, activity_regularizer=None, depthwise_constraint=None, pointwise_constraint=None, bias_constraint=None) # ... 表示Conv2D的共有參量
- filters接收一個整數,表示該卷積層的卷積核個數,也被稱為通道數。
- kernel_size接收一個Python元組,表示每個卷積核的尺寸,例如對3x3的二維卷積核,kernel_size=(2, 2)。
- strides接收一個Python元組,表示卷積步長。2維卷積核的默認值為(1, 1),表示單步卷積
- padding是卷積核的0值填充選項,默認值'valid'表示不進行填充(即等效填充),輸入'same'時使用相同填充。
- dilation_rate是卷積核的擴張比率,2維卷積核的默認值為(1, 1),表示線性卷積,當使用擴張卷積時,元組的值通常大於1。按擴張卷積的定義,當擴張比率大於1時,卷積步長必須等於1,即strides=(1, 1)。
- data_format是接收特徵度維度順序的參量,默認值None表示張量的第1維表示樣本,最後1維表示通道,等價於輸入"channels_last"。在張量的第1維表示通道時輸入“channels_first”。
- activation、use_bias、*_initializer、*_regularizer、*_constraint的調用方法參見keras.layers.Dense。
- depth_multiplier接收一個整數,表示沿通道方向的空間卷積的可分度,默認值1表示完全可分,即每個通道獨立進行空間卷積。
- depthwise_initializer、depthwise_regularizer、depthwise_constraint接收深度可分卷積中空間卷積部分的初始化器、正則化器和參數限制器。
- pointwise_initializer、pointwise_regularizer、pointwise_constraint接收深度可分卷積中單位卷積核的初始化器、正則化器和參數限制器。
keras.layers.MaxPooling2D(pool_size=(2, 2), strides=None, padding='valid', data_format=None)keras.layers.GlobalMaxPooling2D(data_format=None)
keras.layers.Conv2DTranspose(filters, kernel_size, strides=(1, 1), padding='valid', output_padding=None, dilation_rate=(1, 1), activation=None, use_bias=True, data_format=None, kernel_initializer='glorot_uniform', bias_initializer='zeros', bias_regularizer=None, kernel_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)keras.layers.UpSampling2D(size=(2, 2), data_format=None, interpolation='nearest')
- output_padding接收一個整數或整數元組,表示轉置卷積輸出端的0值填充層數,其中接收元組時,對特徵圖各維度分別使用元組中整數指定的層數進行填充。注意到output_padding指定的整數必須小於步長。原因是轉置卷積(或反卷積)可視為卷積的逆變換,因此output_padding在功能上是對卷積計算的“還原”。作為解釋性的例子,100x100的特徵圖在通過3x3、步長為10、無填充的卷積核後,會輸出為10x10的特徵圖,但由於步長取整的原因,95x95的特徵圖在通過該卷積核後也會得到10x10的特徵圖,因此使用轉置卷積“還原”上述過程時需要指定output_padding以確保能還原到100x100的特徵圖尺寸。
- 參量filters、kernel_size、strides、padding、dilation_rate、data_format的調用方法與keras.layers.Conv2D相同。activation、use_bias、*_initializer、*_regularizer、*_constraint的含義和調用方可法參見keras.layers.Dense。
keras.layers.Cropping2D(cropping=((0, 0), (0, 0)), data_format=None) # 裁剪keras.layers.ZeroPadding2D(padding=(1, 1)) # 0值填充
循環層與循環單元
keras.layers.SimpleRNNCell(units, activation='tanh', use_bias=True, kernel_initializer='glorot_uniform', recurrent_initializer='orthogonal', bias_initializer='zeros', kernel_regularizer=None, recurrent_regularizer=None, bias_regularizer=None, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, dropout=0.0, recurrent_dropout=0.0)keras.layers.LSTMCell(recurrent_activation='hard_sigmoid', unit_forget_bias=True, implementation=1, ...) keras.layers.GRUCell(recurrent_activation='hard_sigmoid', implementation=1, reset_after=False, ...) # ... 表示SimpleRNNCell的共有參量
- units接收一個整數,表示輸入序列的維度或序列特徵的個數。
- use_bias、bias_initializer、bias_regularizer、bias_constraint的含義和調用方可法參見keras.layers.Dense。
- activation表示系統狀態的激活函式,默認值為關鍵字'tanh',表示keras.activations.tanh
- recurrent_initializer、recurrent_regularizer、recurrent_constrain是接收狀態-狀態權重的初始化器、正則化器和參數限制器的參量,使用方法可參見keras.layers.Dense,關鍵字'orthogonal'表示keras.initializers.Orthogonal。
- kernel_initializer、kernel_regularizer、kernel_constrain是接收狀態-輸入權重的初始化器、正則化器和參數限制器的參量,使用方法可參見keras.layers.Dense。
- droupout、recurrent_droupout接收0至1的小數,表示狀態-狀態權重和狀態-輸入權重的隨機失活比率。默認值0表示不進行隨機失活操作。
- recurrent_activation表示LSTM或GPU門控的激活函式,默認值為關鍵字'hard_sigmoid',表示keras.activations.hard_sigmoid。
- implementation是調整LSTM或GRU單元內部計算方案的關鍵字,默認值1表示將內部計算拆分為大量的小型矩陣計算,implementation=2表示將內部計算拆分為少量的大型矩陣計算。兩種計算策略在不同的計算系統中有不同的執行效率。
keras.layers.RNN(cell, return_sequences=False, return_state=False, go_backwards=False, stateful=False, unroll=False)
- cell接收循環單元子類,可以是Keras預提供的循環單元,也可以是自定義的循環單元,對後者,該對象需包含call、state_size、out_size等3個方法。接收多個循環單元時,循環單元對象按列表組織先後順序。
- return_sequences和return_state分別表示輸出最後1個時間步的輸出或所有時間步的輸出,以及是否輸出最後1個時間步的系統狀態。
- go_backwards表示是否允許在學習時反向輸入序列。
- stateful表示是在當前批次數據的學習中否保留上對一批次序列學習得到的權重。
- unroll: 表示是否在學習中“展開”循環單元。“展開”表示循環單元會對所有時間步得到一個複製並按前饋結構進行學習。因為展開後的RNN不需要遞歸計算,因此以提高記憶體開銷為代價加快了學習速度。展開通常僅在短序列輸入時使用。
- input_dim和input_length表示輸入數據中單個時間步的維度和時間步的個數。
層間合併
IN1 = keras.layers.Input(shape=(16,)) # 分支1H1 = keras.layers.Dense(8, activation='relu')(IN1)IN2 = keras.layers.Input(shape=(32,)) # 分支2H2 = keras.layers.Dense(8, activation='relu')(IN2)# 使用函式化接口M = keras.layers.concatenate([x1, x2])# 使用層間合併對象M = keras.layers.Concatenate()([x1, x2])model = keras.models.Model(inputs=[IN1, IN2], outputs=M)
自定義層
- build(self, input_shape)是與隱含層權重有關的方法,包括權重張量的大小、初始化等。該方法的結尾要求指定self.built = True,實現方法之一是super(keras.layers.Layer, self).build(input_shape)
- call(input_tensor)是層內計算的方法,要求返回張量的計算結果
- compute_output_shape(input_shape)是返回張量計算後大小的方法。
其它子類
- keras.layers.BatchNormalization是對層對象的輸出張量進行分批歸一化的子類。
- keras.layers.LeakyReLU、PReLU、ELU、ThresholdedReLU、ReLU和Softmax是可以從層API直接創建的激活層子類。
- keras.layers.Bidirectional和keras.layers.TimeDistributed是層的封裝器子類,以層對象為輸入並為其賦予特定功能。其中Bidirectional僅接收循環層對象並賦予其雙向連線,TimeDistributed接收所有隱含層對象並將該層的操作在一個維度“複製”。
- keras.GaussianNoise、GaussianDropout和AlphaDropout為層對象的輸出張量混入噪聲,其中GaussianNoise按加法混入噪聲,GaussianDropout和AlphaDropout按乘法混入噪聲。
- keras.layers.Embedding可以實現張量的嵌入操作。
學習與最佳化API
最佳化器
名稱 | 對象 |
---|---|
均方差傳播算法(RMSprop) | keras.optimizers.RMSprop(lr=0.001, rho=0.9, epsilon=None, decay=0.0) |
隨機梯度下降算法(SGD) | keras.optimizers.SGD(lr=0.01, momentum=0.0, decay=0.0, nesterov=False) |
自適應梯度下降算法(Adagrad) | keras.optimizers.Adagrad(lr=0.01, epsilon=None, decay=0.0) |
自適應學習速率算法(Adadelta) | keras.optimizers.Adadelta(lr=1.0, rho=0.95, epsilon=None, decay=0.0) |
自適應動量估計(Adam) | keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False) |
自適應最大階動量估計(Adamax) | keras.optimizers.Adamax(lr=0.002, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0) |
Nesterov加速自適應動量估計(Nadam) | keras.optimizers.Nadam(lr=0.002, beta_1=0.9, beta_2=0.999, epsilon=None, schedule_decay=0.004) |
初始化器
- keras.initializers.Zeros、Ones、Constants按常量初始化權重。
- keras.initializers.RandomNormal、RandomUniform、TruncatedNormal、he_uniform、lecun_uniform、glorot_uniform、he_normal、lecun_normal、glorot_normal、VarianceScaling生成隨機數初始化權重
正則化器
參數限制器
回調函式
# 定義並編譯你的模型callback_list = [callback1, callback2, callback3] # 定義回饋器records = model.fit(..., callbacks=callback_list, ...) # 在模型學習時調用
keras.callbacks.ModelCheckpoint(filepath, monitor='val_loss', verbose=0, save_best_only=False, save_weights_only=False, mode='auto', period=1)
keras.callbacks.LearningRateScheduler(schedule, verbose=0)keras.callbacks.ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=10, verbose=0, mode='auto', min_delta=0.0001, cooldown=0, min_lr=0)keras.callbacks.TerminateOnNaN()keras.callbacks.EarlyStopping(monitor='val_loss', min_delta=0, patience=0, verbose=0, mode='auto', baseline=None, restore_best_weights=False)
keras.callbacks.LambdaCallback(on_epoch_begin=None, on_epoch_end=None, on_batch_begin=None, on_batch_end=None, on_train_begin=None, on_train_end=None)
後台API
通用後台工具
後台指令互動
import keras.backend as K# 使用K.tf對tf.ConfigProto進行操作config = K.tf.ConfigProto()config.gpu_options.allow_growth = True# 使用K.tf對tf.Session進行操作sess = K.tf.Session(config=config)K.set_session(sess)
keras.json
{ "image_data_format": "channels_last", "epsilon": 1e-07, "floatx": "float32", "backend": "tensorflow"}
數據預處理API
序列
- keras.preprocessing.sequence.TimeseriesGenerator是時間序列的生成器類,可以將時間序列數據分割為多個批次。
- keras.preprocessing.sequence.pad_sequences是1個函式,將不同長度的序列填充為相同長度。
- keras.preprocessing.sequence.skipgrams是1個函式,可以由嵌入的字元序列或語句生成skipgram。
- keras.preprocessing.sequence.make_sampling_table是1個函式,可以由文本序列的樣本數和採樣係數生成機率採樣表。
文本
- keras.preprocessing.text.Tokenizer是1個用於文本分割的類,按特定規則,例如空格將句子分割為單詞並返回Tokenizer對象,該對象可用於文本編碼等其它預處理操作。
- keras.preprocessing.text.text_to_word_sequence是1個函式,按特定規則將句子分割並按列表返回單詞序列。
- keras.preprocessing.text.hashing_trick是1個函式,在給定Python環境下的hash算法後可以將輸入的文本轉化為哈希值。
- keras.preprocessing.text.one_hot類似於hashing_trick,使用Python默認的hash算法進行文本的獨熱編碼。
圖像
其它組件
函式
名稱 | 函式使用格式 | 用途說明 |
---|---|---|
keras.losses.mean_squared_error(y_true, y) | 用於回歸問題。 | |
均方對數誤差 | keras.losses.mean_squared_logarithmic_error(y_true, y) | 取對數的均方誤差。 |
keras.losses.mean_absolute_error(y_true, y) | 用於回歸問題,具有稀疏性。 | |
百分比平均絕對誤差 | keras.losses.mean_absolute_percentage_error(y_true, y) | 按百分比計算的平均絕對誤差。 |
鉸鏈損失 | keras.losses.hinge(y_true, y) | 用於二元分類問題,具有稀疏性。 |
平方鉸鏈損失 | keras.losses.squared_hinge(y_true, y) | 鉸鏈損失的平方。 |
類別鉸鏈損失 | keras.losses.categorical_hinge(y_true, y) | 用於多元分類問題,具有稀疏性。 |
對數雙曲餘弦函式 | keras.losses.logcosh(y_true, y) | 用於回歸問題,介於均方誤差和平均絕對誤差之間,具有一定的稀疏性。 |
類別交叉熵 | keras.losses.categorical_crossentropy(y_true, y) | 用於多元分類問題。 |
稀疏類型交叉熵 | keras.losses.sparse_categorical_crossentropy(y_true, y) | 用於分類問題,具有稀疏性。 |
二元分類交叉熵 | keras.losses.binary_crossentropy(y_true, y) | 用於二元分類問題。 |
keras.losses.kullback_leibler_divergence(y_true, y) | 用於包含機率分布的回歸或分類問題,例如變分自編碼器的學習。 | |
泊松分布損失 | keras.losses.poisson(y_true, y) | |
餘弦相似性損失 | keras.losses.cosine_proximity(y_true, y) | 用於矢量化數據的回歸或分類問題。 |
名稱 | 函式使用格式 | 說明 |
---|---|---|
keras.activations.sigmoid(x) | 二元分類的輸出層、 RNN門控 | |
硬限幅Sigmoid函式 | keras.activations.hard_sigmoid(x) | 二元分類的輸出層、 RNN門控 |
keras.activations.softmax(x, axis=-1) | 多元分類的輸出層 | |
雙曲正切函式 | keras.activations.tanh(x) | (淺層結構的)隱含層、RNN單元 |
Softsign函式 | keras.activations.softsign(x) | (淺層結構的)隱含層 |
指數函式 | keras.activations.exponential(x) | - |
線性函式 | keras.activations.linear(x) | - |
keras.activations.relu(x, alpha=0.0, max_value=None, threshold=0.0) | (深度結構的)隱含層 | |
指數線性函式 | keras.activations.elu(x, alpha=1.0) | (深度結構的)隱含層 |
尺度指數線性函式 | keras.activations.selu(x) | (深度結構的)隱含層 |
Softplus函式 | keras.activations.softplus(x) | (深度結構的)隱含層 |
- keras.metrics.binary_accuracy可用於二元分類的評價。
- keras.metrics.categorical_accuracy、sparse_categorical_accuracy可用於多元分類的評價。
- keras.metrics.top_k_categorical_accuracy、sparse_top_k_categorical_accuracy可用於前k項分類的評價。
通用工具
- keras.utils.CustomObjectScope可以為用戶自定義的對象設立關鍵字,並可以在keras代碼中按關鍵字調用該對象。
- keras.utils.HDF5Matrix是keras與HDF5檔案互動的類,要求Python環境預裝h5Py。
- keras.utils.Sequence是序列生成器類,其主要作用是創建能夠循環讀取檔案並生成數據的分批導入對象,該對象在神經網路模型的學習、評估和測試中可以使用。
- keras.utils.to_categorical是進行標記-類別轉換的函式,將標記轉換為類別,其中類別為0-1元素的Numpy矩陣,列數等於輸入數據的不同標記數。
- keras.utils.normalize是1個函式,功能是數據標準化。
- keras.utils.get_file是1個函式,功能是通過url下載指定數據到本地路徑。
- keras.utils.plot_model是將編譯的keras模型繪製為圖像的函式,要求Python環境預裝PyDot。
- keras.utils.print_summary是將編譯的keras模型總結為表格的函式,表格包括keras模型的結構和參數信息。
- keras.utils.multi_gpu_model是僅在Tensorflow後台時使用的函式,可以將keras模型複製到多塊GPU上進行並行計算。
Scikit-Learn封裝器
預編譯模型
名稱 | 提出者(按引用) | 許可協定 |
---|---|---|
Xception | Chollet (2017) | |
VGG16 | Simonyan and Zisserman (2014) | Creative Commons Attribution License |
VGG19 | Simonyan and Zisserman (2014) | Creative Commons Attribution License |
ResNet50、101、152 | He et al. (2015) | MIT許可證 |
ResNet50V2、101V2、152V2 | He et al. (2016) | BSD協定(Facebook) |
ResNetXt50、101 | Xie et al. (2017) | BSD協定(Facebook) |
InceptionV3 | Szegedy et al. (2016) | 阿帕奇授權協定(2.0版) |
InceptionResNetV2 | Szegedy et al. (2017) | 阿帕奇授權協定(2.0版) |
MobileNet | Howard et al. (2017) | 阿帕奇授權協定(2.0版) |
DenseNet121、169、201 | Huang et al. (2017) | BSD協定(第三版) |
NASNet | Zoph et al. (2018) | 阿帕奇授權協定(2.0版) |
MobileNetV2 | Sandler et al. (2018) | 阿帕奇授權協定(2.0版) |
自帶數據
名稱 | 樣本數 | 說明 |
---|---|---|
CIFRA10圖像數據 | 50000,單樣本為32x32 RGB圖像 | 包含10個類別,用於圖像分類問題 |
IMDB電影評價數據 | 25000,單樣本為矢量化字元編碼 | 按評價的正/負分類,用於二元情感分析 |
路透社新聞數據 | 11228,單樣本為矢量化字元編碼 | 按新聞主題分為46類,用於主題模型 |
MINST手寫數字圖像數據 | 60000,單樣本為28x28灰度圖像 | 包含10個類別,用於圖像分類問題 |
MINST時尚物件圖像數據 | 60000,單樣本為28x28灰度圖像 | 包含10個類別,用於圖像分類問題 |
波士頓房價數據 | 約400個樣本,單樣本包含13個特徵 | 用於回歸問題 |