深度学习(六)keras常用函数学习
原文作者:aircraft
原文鏈接:https://www.cnblogs.com/DOMLX/p/9769301.html
深度學(xué)習(xí)教程目錄如下,還在繼續(xù)更新完善中
深度學(xué)習(xí)系列教程目錄
Keras是什么?
Keras:基于Theano和TensorFlow的深度學(xué)習(xí)庫(kù)
Keras是一個(gè)高層神經(jīng)網(wǎng)絡(luò)API,Keras由純Python編寫而成并基Tensorflow、Theano以及CNTK后端。Keras 為支持快速實(shí)驗(yàn)而生,能夠把你的idea迅速轉(zhuǎn)換為結(jié)果,如果你有如下需求,請(qǐng)選擇Keras:
簡(jiǎn)易和快速的原型設(shè)計(jì)(keras具有高度模塊化,極簡(jiǎn),和可擴(kuò)充特性)
支持CNN和RNN,或二者的結(jié)合
無縫CPU和GPU切換
如果還沒有配置keras可以這個(gè)博客配置:
2018最新win10 安裝tensorflow1.4(GPU/CPU)+cuda8.0+cudnn8.0-v6 + keras 安裝CUDA失敗 導(dǎo)入tensorflow失敗報(bào)錯(cuò)問題解決
kears Dense()函數(shù)--全連接層
keras.layers.core.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)
參數(shù):
units:大于0的整數(shù),代表該層的輸出維度。
activation:激活函數(shù),為預(yù)定義的激活函數(shù)名(參考激活函數(shù)),或逐元素(element-wise)的Theano函數(shù)。如果不指定該參數(shù),將不會(huì)使用任何激活函數(shù)(即使用線性激活函數(shù):a(x)=x)
use_bias: 布爾值,是否使用偏置項(xiàng)
kernel_initializer:權(quán)值初始化方法,為預(yù)定義初始化方法名的字符串,或用于初始化權(quán)重的初始化器。參考initializers
bias_initializer:權(quán)值初始化方法,為預(yù)定義初始化方法名的字符串,或用于初始化權(quán)重的初始化器。參考initializers
kernel_regularizer:施加在權(quán)重上的正則項(xiàng),為Regularizer對(duì)象
bias_regularizer:施加在偏置向量上的正則項(xiàng),為Regularizer對(duì)象
activity_regularizer:施加在輸出上的正則項(xiàng),為Regularizer對(duì)象
kernel_constraints:施加在權(quán)重上的約束項(xiàng),為Constraints對(duì)象
bias_constraints:施加在偏置上的約束項(xiàng),為Constraints對(duì)象
input_dim:可以指定輸入數(shù)據(jù)的維度
kears Conv2D()函數(shù)--卷積層
若不懂卷積概念可看:深度學(xué)習(xí)(二)神經(jīng)網(wǎng)絡(luò)中的卷積和反卷積原理
keras.layers.Conv2D(filters, kernel_size,
strides=(1, 1),
padding='valid',
data_format=None,
dilation_rate=(1, 1),
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)
2D 卷積層 (例如對(duì)圖像的空間卷積)。
該層創(chuàng)建了一個(gè)卷積核, 該卷積核對(duì)層輸入進(jìn)行卷積, 以生成輸出張量。 如果 use_bias 為 True, 則會(huì)創(chuàng)建一個(gè)偏置向量并將其添加到輸出中。 最后,如果 activation 不是 None,它也會(huì)應(yīng)用于輸出。
當(dāng)使用該層作為模型第一層時(shí),需要提供 input_shape 參數(shù) (整數(shù)元組,不包含樣本表示的軸),例如, input_shape=(128, 128, 3) 表示 128x128 RGB 圖像, 在 data_format="channels_last" 時(shí)。
參數(shù)
filters: 整數(shù),輸出空間的維度 (即卷積中濾波器的輸出數(shù)量)。
kernel_size: 一個(gè)整數(shù),或者 2 個(gè)整數(shù)表示的元組或列表, 指明 2D 卷積窗口的寬度和高度。 可以是一個(gè)整數(shù),為所有空間維度指定相同的值。
strides: 一個(gè)整數(shù),或者 2 個(gè)整數(shù)表示的元組或列表, 指明卷積沿寬度和高度方向的步長(zhǎng)。 可以是一個(gè)整數(shù),為所有空間維度指定相同的值。 指定任何 stride 值 != 1 與指定 dilation_rate 值 != 1 兩者不兼容。
padding: "valid" 或 "same" (大小寫敏感)。
data_format: 字符串, channels_last (默認(rèn)) 或 channels_first 之一,表示輸入中維度的順序。 channels_last 對(duì)應(yīng)輸入尺寸為 (batch, height, width, channels), channels_first 對(duì)應(yīng)輸入尺寸為 (batch, channels, height, width)。 它默認(rèn)為從 Keras 配置文件 ~/.keras/keras.json 中 找到的 image_data_format 值。 如果你從未設(shè)置它,將使用 "channels_last"。
dilation_rate: 一個(gè)整數(shù)或 2 個(gè)整數(shù)的元組或列表, 指定膨脹卷積的膨脹率。 可以是一個(gè)整數(shù),為所有空間維度指定相同的值。 當(dāng)前,指定任何 dilation_rate 值 != 1 與 指定 stride 值 != 1 兩者不兼容。
activation: 要使用的激活函數(shù) (詳見 activations)。 如果你不指定,則不使用激活函數(shù) (即線性激活: a(x) = x)。
use_bias: 布爾值,該層是否使用偏置向量。
kernel_initializer: kernel 權(quán)值矩陣的初始化器 (詳見 initializers)。
bias_initializer: 偏置向量的初始化器 (詳見 initializers)。
kernel_regularizer: 運(yùn)用到 kernel 權(quán)值矩陣的正則化函數(shù) (詳見 regularizer)。
bias_regularizer: 運(yùn)用到偏置向量的正則化函數(shù) (詳見 regularizer)。
activity_regularizer: 運(yùn)用到層輸出(它的激活值)的正則化函數(shù) (詳見 regularizer)。
kernel_constraint: 運(yùn)用到 kernel 權(quán)值矩陣的約束函數(shù) (詳見 constraints)。
bias_constraint: 運(yùn)用到偏置向量的約束函數(shù) (詳見 constraints)。
輸入尺寸
如果 data_format='channels_first', 輸入 4D 張量,尺寸為 (samples, channels, rows, cols)。
如果 data_format='channels_last', 輸入 4D 張量,尺寸為 (samples, rows, cols, channels)。
輸出尺寸
如果 data_format='channels_first', 輸出 4D 張量,尺寸為 (samples, filters, new_rows, new_cols)。
如果 data_format='channels_last', 輸出 4D 張量,尺寸為 (samples, new_rows, new_cols, filters)。
別看上面的參數(shù)一堆嚇?biāo)廊耍鋵?shí)我們?cè)趯?shí)際運(yùn)用的時(shí)候用的就只有幾個(gè)而已:
inputs = Input(shape=(n_ch,patch_height,patch_width)) conv1 = Conv2D(32, (3, 3), activation='relu', padding='same',data_format='channels_first')(inputs) #這個(gè)小括號(hào)填inputs是代表這層模型連接在inputs之后
當(dāng)然還可以用kears內(nèi)置的序貫?zāi)P蚢dd添加構(gòu)成模型圖:
model = Sequential() # Dense(64) is a fully-connected layer with 64 hidden units. # in the first layer, you must specify the expected input data shape: # here, 20-dimensional vectors. model.add(Dense(64, activation='relu', input_dim=20))
kears MaxPooling2D()函數(shù)--池化層
若不懂池化概念可看:深度學(xué)習(xí)(一)神經(jīng)網(wǎng)絡(luò)中的池化與反池化原理
keras.layers.pooling.MaxPooling2D( pool_size=(2, 2), strides=None, padding='valid', data_format=None )
參數(shù):
pool_size:整數(shù)或長(zhǎng)為2的整數(shù)tuple,代表在兩個(gè)方向(豎直,水平)上的下采樣因子,如取(2,2)將使圖片在兩個(gè)維度上均變?yōu)樵L(zhǎng)的一半。為整數(shù)意為各個(gè)維度值相同且為該數(shù)字。
strides:整數(shù)或長(zhǎng)為2的整數(shù)tuple,或者None,步長(zhǎng)值。
padding:‘valid’或者‘same’
data_format:字符串,“channels_first”或“channels_last”之一,代表圖像的通道維的位置。該參數(shù)是Keras 1.x中的image_dim_ordering,“channels_last”對(duì)應(yīng)原本的“tf”,“channels_first”對(duì)應(yīng)原本的“th”。以128x128的RGB圖像為例,“channels_first”應(yīng)將數(shù)據(jù)組織為(3,128,128),而“channels_last”應(yīng)將數(shù)據(jù)組織為(128,128,3)。該參數(shù)的默認(rèn)值是~/.keras/keras.json中設(shè)置的值,若從未設(shè)置過,則為“channels_last”。
還是一樣的好多東西默認(rèn)就行了,下面就是一個(gè)2*2的池化層:
pool1 = MaxPooling2D((2, 2))(conv1)
kears model.compile()函數(shù)--配置模型
model.compile(optimizer, loss, metrics=None, sample_weight_mode=None)
編譯用來配置模型的學(xué)習(xí)過程,其參數(shù)有
optimizer:字符串(預(yù)定義優(yōu)化器名)或優(yōu)化器對(duì)象,參考優(yōu)化器
loss:字符串(預(yù)定義損失函數(shù)名)或目標(biāo)函數(shù),參考損失函數(shù)
metrics:列表,包含評(píng)估模型在訓(xùn)練和測(cè)試時(shí)的網(wǎng)絡(luò)性能的指標(biāo),典型用法是metrics=['accuracy']
sample_weight_mode:如果你需要按時(shí)間步為樣本賦權(quán)(2D權(quán)矩陣),將該值設(shè)為“temporal”。默認(rèn)為“None”,代表按樣本賦權(quán)(1D權(quán))。在下面fit函數(shù)的解釋中有相關(guān)的參考內(nèi)容。
kwargs:使用TensorFlow作為后端請(qǐng)忽略該參數(shù),若使用Theano作為后端,kwargs的值將會(huì)傳遞給 K.function
示例代碼:
model.compile(optimizer='sgd', loss='categorical_crossentropy',metrics=['accuracy'])
kears model.fit()函數(shù)--模型運(yùn)行函數(shù)
fit(self, x, y, batch_size=32, epochs=10, verbose=1, callbacks=None, validation_split=0.0,
validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0 )
x:輸入數(shù)據(jù)。如果模型只有一個(gè)輸入,那么x的類型是numpy array,如果模型有多個(gè)輸入,那么x的類型應(yīng)當(dāng)為list,list的元素是對(duì)應(yīng)于各個(gè)輸入的numpy array
y:標(biāo)簽,numpy array
batch_size:整數(shù),指定進(jìn)行梯度下降時(shí)每個(gè)batch包含的樣本數(shù)。訓(xùn)練時(shí)一個(gè)batch的樣本會(huì)被計(jì)算一次梯度下降,使目標(biāo)函數(shù)優(yōu)化一步。
epochs:整數(shù),訓(xùn)練的輪數(shù),每個(gè)epoch會(huì)把訓(xùn)練集輪一遍。
verbose:日志顯示,0為不在標(biāo)準(zhǔn)輸出流輸出日志信息,1為輸出進(jìn)度條記錄,2為每個(gè)epoch輸出一行記錄
callbacks:list,其中的元素是keras.callbacks.Callback的對(duì)象。這個(gè)list中的回調(diào)函數(shù)將會(huì)在訓(xùn)練過程中的適當(dāng)時(shí)機(jī)被調(diào)用,參考回調(diào)函數(shù)
validation_split:0~1之間的浮點(diǎn)數(shù),用來指定訓(xùn)練集的一定比例數(shù)據(jù)作為驗(yàn)證集。驗(yàn)證集將不參與訓(xùn)練,并在每個(gè)epoch結(jié)束后測(cè)試的模型的指標(biāo),如損失函數(shù)、精確度等。注意,validation_split的劃分在shuffle之前,因此如果你的數(shù)據(jù)本身是有序的,需要先手工打亂再指定validation_split,否則可能會(huì)出現(xiàn)驗(yàn)證集樣本不均勻。
validation_data:形式為(X,y)的tuple,是指定的驗(yàn)證集。此參數(shù)將覆蓋validation_spilt。
shuffle:布爾值或字符串,一般為布爾值,表示是否在訓(xùn)練過程中隨機(jī)打亂輸入樣本的順序。若為字符串“batch”,則是用來處理HDF5數(shù)據(jù)的特殊情況,它將在batch內(nèi)部將數(shù)據(jù)打亂。
class_weight:字典,將不同的類別映射為不同的權(quán)值,該參數(shù)用來在訓(xùn)練過程中調(diào)整損失函數(shù)(只能用于訓(xùn)練)
sample_weight:權(quán)值的numpy array,用于在訓(xùn)練時(shí)調(diào)整損失函數(shù)(僅用于訓(xùn)練)。可以傳遞一個(gè)1D的與樣本等長(zhǎng)的向量用于對(duì)樣本進(jìn)行1對(duì)1的加權(quán),或者在面對(duì)時(shí)序數(shù)據(jù)時(shí),傳遞一個(gè)的形式為(samples,sequence_length)的矩陣來為每個(gè)時(shí)間步上的樣本賦不同的權(quán)。這種情況下請(qǐng)確定在編譯模型時(shí)添加了sample_weight_mode='temporal'。
initial_epoch: 從該參數(shù)指定的epoch開始訓(xùn)練,在繼續(xù)之前的訓(xùn)練時(shí)有用。
參數(shù)雖多,但是很多都可以省略看代碼示例:
model.fit(patches_imgs_train, patches_masks_train, epochs=N_epochs, batch_size=batch_size, verbose=1, shuffle=True, validation_split=0.1, callbacks=[checkpointer])
kears predict()函數(shù)--測(cè)試數(shù)據(jù)
predictions = model.predict(patches_imgs_test, batch_size=32, verbose=2)
print("predicted images size :")
print(predictions.shape)
kears load_weights()函數(shù)--直接導(dǎo)入訓(xùn)練好的模型
# 加載訓(xùn)練好的模型
model.load_weights('./weights.h5')
kears Dropout()函數(shù)--拋棄一些參數(shù)防止過擬合
Dropout(x)
X可以取0--1之間,代表百分比拋棄數(shù)據(jù)
Dropout(0.5)隨機(jī)拋棄百分之五十的數(shù)據(jù)
kears UpSampling2D()函數(shù)--上采樣函數(shù)
UpSampling2D(size=(2, 2))
size(x,y)
x代表行放大倍數(shù) 這里取2的話代表原來的一行變成了兩行 (就是一行那么粗,變成了兩行那么粗)
y代表列放大倍數(shù) 這里取2的話代表原來的一列變成了兩行 (就是一列那么粗,變成了兩列那么粗)
size(2,2)其實(shí)就等于將原圖放大四倍(水平兩倍,垂直兩倍) 32*32 變成 62*64的圖像
kears Model()函數(shù)--代表模型圖
inputs = Input((n_ch, patch_height, patch_width))
conv1 = Convolution2D(32, 3, 3, activation='relu', border_mode='same')(inputs)
conv1 = Dropout(0.2)(conv1)
conv1 = Convolution2D(32, 3, 3, activation='relu', border_mode='same')(conv1)
up1 = UpSampling2D(size=(2, 2))(conv1)
#
conv2 = Convolution2D(16, 3, 3, activation='relu', border_mode='same')(up1)
conv2 = Dropout(0.2)(conv2)
conv2 = Convolution2D(16, 3, 3, activation='relu', border_mode='same')(conv2)
pool1 = MaxPooling2D(pool_size=(2, 2))(conv2)
#
conv3 = Convolution2D(32, 3, 3, activation='relu', border_mode='same')(pool1)
conv3 = Dropout(0.2)(conv3)
conv3 = Convolution2D(32, 3, 3, activation='relu', border_mode='same')(conv3)
pool2 = MaxPooling2D(pool_size=(2, 2))(conv3)
#
conv4 = Convolution2D(64, 3, 3, activation='relu', border_mode='same')(pool2)
conv4 = Dropout(0.2)(conv4)
conv4 = Convolution2D(64, 3, 3, activation='relu', border_mode='same')(conv4)
pool3 = MaxPooling2D(pool_size=(2, 2))(conv4)
#
conv5 = Convolution2D(128, 3, 3, activation='relu', border_mode='same')(pool3)
conv5 = Dropout(0.2)(conv5)
conv5 = Convolution2D(128, 3, 3, activation='relu', border_mode='same')(conv5)
#
up2 = merge([UpSampling2D(size=(2, 2))(conv5), conv4], mode='concat', concat_axis=1)
conv6 = Convolution2D(64, 3, 3, activation='relu', border_mode='same')(up2)
conv6 = Dropout(0.2)(conv6)
conv6 = Convolution2D(64, 3, 3, activation='relu', border_mode='same')(conv6)
#
up3 = merge([UpSampling2D(size=(2, 2))(conv6), conv3], mode='concat', concat_axis=1)
conv7 = Convolution2D(32, 3, 3, activation='relu', border_mode='same')(up3)
conv7 = Dropout(0.2)(conv7)
conv7 = Convolution2D(32, 3, 3, activation='relu', border_mode='same')(conv7)
#
up4 = merge([UpSampling2D(size=(2, 2))(conv7), conv2], mode='concat', concat_axis=1)
conv8 = Convolution2D(16, 3, 3, activation='relu', border_mode='same')(up4)
conv8 = Dropout(0.2)(conv8)
conv8 = Convolution2D(16, 3, 3, activation='relu', border_mode='same')(conv8)
#
pool4 = MaxPooling2D(pool_size=(2, 2))(conv8)
conv9 = Convolution2D(32, 3, 3, activation='relu', border_mode='same')(pool4)
conv9 = Dropout(0.2)(conv9)
conv9 = Convolution2D(32, 3, 3, activation='relu', border_mode='same')(conv9)
#
conv10 = Convolution2D(2, 1, 1, activation='relu', border_mode='same')(conv9)
conv10 = core.Reshape((2,patch_height*patch_width))(conv10)
conv10 = core.Permute((2,1))(conv10)
############
conv10 = core.Activation('softmax')(conv10)
model = Model(input=inputs, output=conv10)
將模型的輸入和輸出給model函數(shù)就會(huì)自己組建模型運(yùn)行圖結(jié)構(gòu)
kears Embedding()函數(shù)--嵌入層
keras.layers.embeddings.Embedding( input_dim, output_dim, embeddings_initializer='uniform',
embeddings_regularizer=None, activity_regularizer=None, embeddings_constraint=None, mask_zero=False, input_length=None)
作用:嵌入層將正整數(shù)(下標(biāo))轉(zhuǎn)換為具有固定大小的向量,如[[4],[20]]->[[0.25,0.1],[0.6,-0.2]]。Embedding層只能作為模型的第一層。
input_dim:大或等于0的整數(shù),字典長(zhǎng)度,即輸入數(shù)據(jù)最大下標(biāo)+1,就是矩陣中的最大值
output_dim:大于0的整數(shù),代表全連接嵌入的維度
embeddings_initializer: 嵌入矩陣的初始化方法,為預(yù)定義初始化方法名的字符串,或用于初始化權(quán)重的初始化器。參考initializers
embeddings_regularizer: 嵌入矩陣的正則項(xiàng),為Regularizer對(duì)象
embeddings_constraint: 嵌入矩陣的約束項(xiàng),為Constraints對(duì)象
mask_zero:布爾值,確定是否將輸入中的‘0’看作是應(yīng)該被忽略的‘填充’(padding)值,該參數(shù)在使用遞歸層處理變長(zhǎng)輸入時(shí)有用。設(shè)置為True的話,模型中后續(xù)的層必須都支持masking,否則會(huì)拋出異常。如果該值為True,則下標(biāo)0在字典中不可用,input_dim應(yīng)設(shè)置為|vocabulary| + 2。
input_length:當(dāng)輸入序列的長(zhǎng)度固定時(shí),該值為其長(zhǎng)度。如果要在該層后接Flatten層,然后接Dense層,則必須指定該參數(shù),否則Dense層的輸出維度無法自動(dòng)推斷。
關(guān)于embeding作用的詳細(xì)介紹:http://spaces.ac.cn/archives/4122/
kears normalization()函數(shù)--標(biāo)準(zhǔn)化
keras.layers.normalization.BatchNormalization(axis=-1, momentum=0.99, epsilon=0.001, center=True,
scale=True, beta_initializer='zeros', gamma_initializer='ones', moving_mean_initializer='zeros',
moving_variance_initializer='ones', beta_regularizer=None, gamma_regularizer=None,
beta_constraint=None, gamma_constraint=None)
該層在每個(gè)batch上將前一層的激活值重新規(guī)范化,即使得其輸出數(shù)據(jù)的均值接近0,其標(biāo)準(zhǔn)差接近1
參數(shù)
axis: 整數(shù),指定要規(guī)范化的軸,通常為特征軸。例如在進(jìn)行data_format="channels_first的2D卷積后,一般會(huì)設(shè)axis=1。
momentum: 動(dòng)態(tài)均值的動(dòng)量
epsilon:大于0的小浮點(diǎn)數(shù),用于防止除0錯(cuò)誤
center: 若設(shè)為True,將會(huì)將beta作為偏置加上去,否則忽略參數(shù)beta
scale: 若設(shè)為True,則會(huì)乘以gamma,否則不使用gamma。當(dāng)下一層是線性的時(shí),可以設(shè)False,因?yàn)閟caling的操作將被下一層執(zhí)行。
beta_initializer:beta權(quán)重的初始方法
gamma_initializer: gamma的初始化方法
moving_mean_initializer: 動(dòng)態(tài)均值的初始化方法
moving_variance_initializer: 動(dòng)態(tài)方差的初始化方法
beta_regularizer: 可選的beta正則
gamma_regularizer: 可選的gamma正則
beta_constraint: 可選的beta約束
gamma_constraint: 可選的gamma約束
輸入shape
任意,當(dāng)使用本層為模型首層時(shí),指定input_shape參數(shù)時(shí)有意義。
輸出shape
與輸入shape相同
kears plot()函數(shù)--畫出模型圖
plot(model, to_file='./'+name_experiment+'/'+name_experiment + '_model.png')
kears中可以將自己建立的模型圖畫出來,傳進(jìn)去一個(gè)模型,指定畫出文件的路徑和名字即可
kears ModelCheckpoint()函數(shù)--保存模型參數(shù)
checkpointer = ModelCheckpoint(filepath='./'+name_experiment+'/'+name_experiment +'_best_weights.h5', verbose=1, monitor='val_loss', mode='auto', save_best_only=True) model.fit(patches_imgs_train, patches_masks_train, epochs=N_epochs, batch_size=batch_size, verbose=1, shuffle=True, validation_split=0.1, callbacks=[checkpointer])
ModelCheckpoint函數(shù)可以指定一定訓(xùn)練次數(shù)后保存中間訓(xùn)練的最佳參數(shù)
ModelCheckpoint函數(shù)作為model.fit()函數(shù)中回調(diào)函數(shù)使用
kears merge()函數(shù)--融合層
Merge層提供了一系列用于融合兩個(gè)層或兩個(gè)張量的層對(duì)象和方法。以大寫首字母開頭的是Layer類,以小寫字母開頭的是張量的函數(shù)。小寫字母開頭的張量函數(shù)在內(nèi)部實(shí)際上是調(diào)用了大寫字母開頭的層。
keras.layers.Add()用法
keras.layers.Add()
添加輸入列表的圖層。
該層接收一個(gè)相同shape列表張量,并返回它們的和,shape不變。
Example
import keras input1 = keras.layers.Input(shape=(16,)) x1 = keras.layers.Dense(8, activation='relu')(input1) input2 = keras.layers.Input(shape=(32,)) x2 = keras.layers.Dense(8, activation='relu')(input2) added = keras.layers.Add()([x1, x2]) # equivalent to added = keras.layers.add([x1, x2]) out = keras.layers.Dense(4)(added) model = keras.models.Model(inputs=[input1, input2], outputs=out)
keras.layers.Subtract()用法
keras.layers.Subtract()
兩個(gè)輸入的層相減。
它將大小至少為2,相同Shape的列表張量作為輸入,并返回一個(gè)張量(輸入[0] - 輸入[1]),也是相同的Shape。
Example
import keras input1 = keras.layers.Input(shape=(16,)) x1 = keras.layers.Dense(8, activation='relu')(input1) input2 = keras.layers.Input(shape=(32,)) x2 = keras.layers.Dense(8, activation='relu')(input2) # Equivalent to subtracted = keras.layers.subtract([x1, x2]) subtracted = keras.layers.Subtract()([x1, x2]) out = keras.layers.Dense(4)(subtracted) model = keras.models.Model(inputs=[input1, input2], outputs=out)
keras.layers.Multiply()用法
keras.layers.Multiply()
該層接收一個(gè)列表的同shape張量,并返回它們的逐元素積的張量,shape不變。
keras.layers.Average()用法
keras.layers.Average()
該層接收一個(gè)列表的同shape張量,并返回它們的逐元素均值,shape不變。
keras.layers.Maximum()用法
keras.layers.Maximum()
該層接收一個(gè)列表的同shape張量,并返回它們的逐元素最大值,shape不變。
keras.layers.Concatenate(axis=-1)參數(shù)
keras.layers.Concatenate(axis=-1)
該層接收一個(gè)列表的同shape張量,并返回它們的按照給定軸相接構(gòu)成的向量。
參數(shù)
axis: 想接的軸
**kwargs: 普通的Layer關(guān)鍵字參數(shù)
keras.layers.Dot(axes, normalize=False)參數(shù)
keras.layers.Dot(axes, normalize=False)
計(jì)算兩個(gè)tensor中樣本的張量乘積。例如,如果兩個(gè)張量a和b的shape都為(batch_size, n),則輸出為形如(batch_size,1)的張量,結(jié)果張量每個(gè)batch的數(shù)據(jù)都是a[i,:]和b[i,:]的矩陣(向量)點(diǎn)積。
參數(shù)
axes: 整數(shù)或整數(shù)的tuple,執(zhí)行乘法的軸。
normalize: 布爾值,是否沿執(zhí)行成績(jī)的軸做L2規(guī)范化,如果設(shè)為True,那么乘積的輸出是兩個(gè)樣本的余弦相似性。
**kwargs: 普通的Layer關(guān)鍵字參數(shù)
keras.layers.add(inputs)參數(shù)
keras.layers.add(inputs)
Add層的函數(shù)式包裝
參數(shù):
inputs: 長(zhǎng)度至少為2的張量列表A
**kwargs: 普通的Layer關(guān)鍵字參數(shù)
返回值
輸入列表張量之和
Example
import keras input1 = keras.layers.Input(shape=(16,)) x1 = keras.layers.Dense(8, activation='relu')(input1) input2 = keras.layers.Input(shape=(32,)) x2 = keras.layers.Dense(8, activation='relu')(input2) added = keras.layers.add([x1, x2]) out = keras.layers.Dense(4)(added) model = keras.models.Model(inputs=[input1, input2], outputs=out)
keras.layers.subtract(inputs)參數(shù)
keras.layers.subtract(inputs)
Subtract層的函數(shù)式包裝
參數(shù):
inputs: 長(zhǎng)度至少為2的張量列表A
**kwargs: 普通的Layer關(guān)鍵字參數(shù)
返回值
輸入張量列表的差別
Example
import keras input1 = keras.layers.Input(shape=(16,)) x1 = keras.layers.Dense(8, activation='relu')(input1) input2 = keras.layers.Input(shape=(32,)) x2 = keras.layers.Dense(8, activation='relu')(input2) subtracted = keras.layers.subtract([x1, x2]) out = keras.layers.Dense(4)(subtracted) model = keras.models.Model(inputs=[input1, input2], outputs=out)
keras.layers.multiply(inputs)參數(shù)
keras.layers.multiply(inputs)
Multiply的函數(shù)式包裝
參數(shù):
inputs: 長(zhǎng)度至少為2的張量列表
**kwargs: 普通的Layer關(guān)鍵字參數(shù)
返回值
輸入列表張量之逐元素積
keras.layers.average(inputs)參數(shù)
keras.layers.average(inputs)
Average的函數(shù)包裝
參數(shù):
inputs: 長(zhǎng)度至少為2的張量列表
**kwargs: 普通的Layer關(guān)鍵字參數(shù)
返回值
輸入列表張量之逐元素均值
keras.layers.maximum(inputs)參數(shù)
keras.layers.maximum(inputs)
Maximum的函數(shù)包裝
參數(shù):
inputs: 長(zhǎng)度至少為2的張量列表
**kwargs: 普通的Layer關(guān)鍵字參數(shù)
返回值
輸入列表張量之逐元素均值
keras.layers.concatenate(inputs, axis=-1)參數(shù)
keras.layers.concatenate(inputs, axis=-1)
Concatenate的函數(shù)包裝
參數(shù)
inputs: 長(zhǎng)度至少為2的張量列
axis: 相接的軸
**kwargs: 普通的Layer關(guān)鍵字參數(shù)
keras.layers.dot(inputs, axes, normalize=False)參數(shù)
keras.layers.dot(inputs, axes, normalize=False)
Dot的函數(shù)包裝
參數(shù)
inputs: 長(zhǎng)度至少為2的張量列
axes: 整數(shù)或整數(shù)的tuple,執(zhí)行乘法的軸。
normalize: 布爾值,是否沿執(zhí)行成績(jī)的軸做L2規(guī)范化,如果設(shè)為True,那么乘積的輸出是兩個(gè)樣本的余弦相似性。
**kwargs: 普通的Layer關(guān)鍵字參數(shù)
kears core()模塊函數(shù)--常用層
Activation層
keras.layers.core.Activation(activation)
激活層對(duì)一個(gè)層的輸出施加激活函數(shù)
參數(shù)
activation:將要使用的激活函數(shù),為預(yù)定義激活函數(shù)名或一個(gè)Tensorflow/Theano的函數(shù)。參考激活函數(shù)
輸入shape
任意,當(dāng)使用激活層作為第一層時(shí),要指定input_shape
輸出shape
與輸入shape相同
Dropout層
keras.layers.core.Dropout(rate, noise_shape=None, seed=None)
為輸入數(shù)據(jù)施加Dropout。Dropout將在訓(xùn)練過程中每次更新參數(shù)時(shí)按一定概率(rate)隨機(jī)斷開輸入神經(jīng)元,Dropout層用于防止過擬合。
參數(shù)
rate:0~1的浮點(diǎn)數(shù),控制需要斷開的神經(jīng)元的比例
noise_shape:整數(shù)張量,為將要應(yīng)用在輸入上的二值Dropout mask的shape,例如你的輸入為(batch_size, timesteps, features),并且你希望在各個(gè)時(shí)間步上的Dropout mask都相同,則可傳入noise_shape=(batch_size, 1, features)。
seed:整數(shù),使用的隨機(jī)數(shù)種子
參考文獻(xiàn)
Dropout: A Simple Way to Prevent Neural Networks from Overfitting
Flatten層
keras.layers.core.Flatten()
Flatten層用來將輸入“壓平”,即把多維的輸入一維化,常用在從卷積層到全連接層的過渡。Flatten不影響batch的大小。
例子
model = Sequential() model.add(Convolution2D(64, 3, 3, border_mode='same', input_shape=(3, 32, 32))) # now: model.output_shape == (None, 64, 32, 32) model.add(Flatten()) # now: model.output_shape == (None, 65536)
Reshape層
keras.layers.core.Reshape(target_shape)
Reshape層用來將輸入shape轉(zhuǎn)換為特定的shape
參數(shù)
target_shape:目標(biāo)shape,為整數(shù)的tuple,不包含樣本數(shù)目的維度(batch大小)
輸入shape
任意,但輸入的shape必須固定。當(dāng)使用該層為模型首層時(shí),需要指定input_shape參數(shù)
輸出shape
(batch_size,)+target_shape
例子
# as first layer in a Sequential model model = Sequential() model.add(Reshape((3, 4), input_shape=(12,))) # now: model.output_shape == (None, 3, 4) # note: `None` is the batch dimension # as intermediate layer in a Sequential model model.add(Reshape((6, 2))) # now: model.output_shape == (None, 6, 2) # also supports shape inference using `-1` as dimension model.add(Reshape((-1, 2, 2))) # now: model.output_shape == (None, 3, 2, 2)
Permute層
keras.layers.core.Permute(dims)
Permute層將輸入的維度按照給定模式進(jìn)行重排,例如,當(dāng)需要將RNN和CNN網(wǎng)絡(luò)連接時(shí),可能會(huì)用到該層。
參數(shù)
dims:整數(shù)tuple,指定重排的模式,不包含樣本數(shù)的維度。重拍模式的下標(biāo)從1開始。例如(2,1)代表將輸入的第二個(gè)維度重拍到輸出的第一個(gè)維度,而將輸入的第一個(gè)維度重排到第二個(gè)維度
例子
model = Sequential() model.add(Permute((2, 1), input_shape=(10, 64))) # now: model.output_shape == (None, 64, 10) # note: `None` is the batch dimension
輸入shape
任意,當(dāng)使用激活層作為第一層時(shí),要指定input_shape
輸出shape
與輸入相同,但是其維度按照指定的模式重新排列
RepeatVector層
keras.layers.core.RepeatVector(n)
RepeatVector層將輸入重復(fù)n次
參數(shù)
n:整數(shù),重復(fù)的次數(shù)
輸入shape
形如(nb_samples, features)的2D張量
輸出shape
形如(nb_samples, n, features)的3D張量
例子
model = Sequential() model.add(Dense(32, input_dim=32)) # now: model.output_shape == (None, 32) # note: `None` is the batch dimension model.add(RepeatVector(3)) # now: model.output_shape == (None, 3, 32)
Lambda層
keras.layers.core.Lambda(function, output_shape=None, mask=None, arguments=None)
本函數(shù)用以對(duì)上一層的輸出施以任何Theano/TensorFlow表達(dá)式
參數(shù)
function:要實(shí)現(xiàn)的函數(shù),該函數(shù)僅接受一個(gè)變量,即上一層的輸出
output_shape:函數(shù)應(yīng)該返回的值的shape,可以是一個(gè)tuple,也可以是一個(gè)根據(jù)輸入shape計(jì)算輸出shape的函數(shù)
mask: 掩膜
arguments:可選,字典,用來記錄向函數(shù)中傳遞的其他關(guān)鍵字參數(shù)
例子
# add a x -> x^2 layer
model.add(Lambda(lambda x: x ** 2))
# add a layer that returns the concatenation
# of the positive part of the input and
# the opposite of the negative part
def antirectifier(x):
x -= K.mean(x, axis=1, keepdims=True)
x = K.l2_normalize(x, axis=1)
pos = K.relu(x)
neg = K.relu(-x)
return K.concatenate([pos, neg], axis=1)
def antirectifier_output_shape(input_shape):
shape = list(input_shape)
assert len(shape) == 2 # only valid for 2D tensors
shape[-1] *= 2
return tuple(shape)
model.add(Lambda(antirectifier,
output_shape=antirectifier_output_shape))
輸入shape
任意,當(dāng)使用該層作為第一層時(shí),要指定input_shape
輸出shape
由output_shape參數(shù)指定的輸出shape,當(dāng)使用tensorflow時(shí)可自動(dòng)推斷
ActivityRegularizer層
keras.layers.core.ActivityRegularization(l1=0.0, l2=0.0)
經(jīng)過本層的數(shù)據(jù)不會(huì)有任何變化,但會(huì)基于其激活值更新?lián)p失函數(shù)值
參數(shù)
l1:1范數(shù)正則因子(正浮點(diǎn)數(shù))
l2:2范數(shù)正則因子(正浮點(diǎn)數(shù))
輸入shape
任意,當(dāng)使用該層作為第一層時(shí),要指定input_shape
輸出shape
與輸入shape相同
Masking層
keras.layers.core.Masking(mask_value=0.0)
使用給定的值對(duì)輸入的序列信號(hào)進(jìn)行“屏蔽”,用以定位需要跳過的時(shí)間步
對(duì)于輸入張量的時(shí)間步,即輸入張量的第1維度(維度從0開始算,見例子),如果輸入張量在該時(shí)間步上都等于mask_value,則該時(shí)間步將在模型接下來的所有層(只要支持masking)被跳過(屏蔽)。
如果模型接下來的一些層不支持masking,卻接受到masking過的數(shù)據(jù),則拋出異常。
例子
考慮輸入數(shù)據(jù)x是一個(gè)形如(samples,timesteps,features)的張量,現(xiàn)將其送入LSTM層。因?yàn)槟闳鄙贂r(shí)間步為3和5的信號(hào),所以你希望將其掩蓋。這時(shí)候應(yīng)該:
賦值x[:,3,:] = 0.,x[:,5,:] = 0.
在LSTM層之前插入mask_value=0.的Masking層
model = Sequential()
model.add(Masking(mask_value=0., input_shape=(timesteps, features)))
model.add(LSTM(32))
參考網(wǎng)址鏈接:https://keras-cn.readthedocs.io/en/latest/
若有興趣交流分享技術(shù),可關(guān)注本人公眾號(hào),里面會(huì)不定期的分享各種編程教程,和共享源碼,諸如研究分享關(guān)于c/c++,python,前端,后端,opencv,halcon,opengl,機(jī)器學(xué)習(xí)深度學(xué)習(xí)之類有關(guān)于基礎(chǔ)編程,圖像處理和機(jī)器視覺開發(fā)的知識(shí)
總結(jié)
以上是生活随笔為你收集整理的深度学习(六)keras常用函数学习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安神宁_功效作用注意事项用药禁忌用法用量
- 下一篇: 斐讯K2P刷固件教程斐讯路由器k2p如何