Keras.layers
- Keras.layers
- Dense(全連接層)
- Activation(激活函數)
- Dropout(正則化層)
- Flatten(展平)
- Input(用於實例化 Keras 張量)
- Reshape(調整輸入大小)
- Permute(置換輸入的維度)
- RepeatVector(將輸入重復 n 次)
- Lambda(將任意表達式封裝為 Layer對象)
- ActivityRegularization(網絡層)
- Masking(使用覆蓋值覆蓋序列)
- SpatialDropout1D(Dropout 的 Spatial 1D 版本)
- SpatialDropout2D(Dropout 的 Spatial 2D 版本)
- SpatialDropout3D(Dropout 的 Spatial 3D 版本)
- 參考
Dense(全連接層)
Syntax:
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)
Dense
實現以下操作: output = activation(dot(input, kernel) + bias)
其中 activation
是按逐個元素計算的激活函數,kernel
是由網絡層創建的權值矩陣,以及 bias
是其創建的偏置向量 (只在 use_bias
為 True
時才有用)。
Parameters:
- units: 正整數,輸出空間維度。
- activation: 激活函數 (詳見 activations)。 若不指定,則不使用激活函數 (即,「線性」激活:
a(x) = x
)。 - use_bias: 布爾值,該層是否使用偏置向量。
- kernel_initializer:
kernel
權值矩陣的初始化器 (詳見 initializers)。 - bias_initializer: 偏置向量的初始化器 (see initializers).
- kernel_regularizer: 運用到
kernel
權值矩陣的正則化函數 (詳見 regularizer)。 - bias_regularizer: 運用到偏置向的的正則化函數 (詳見 regularizer)。
- activity_regularizer: 運用到層的輸出的正則化函數 (它的 "activation")。 (詳見 regularizer)。
- kernel_constraint: 運用到
kernel
權值矩陣的約束函數 (詳見 constraints)。 - bias_constraint: 運用到偏置向量的約束函數 (詳見 constraints)。
輸入尺寸
nD 張量,尺寸: (batch_size, ..., input_dim)
。 最常見的情況是一個尺寸為 (batch_size, input_dim)
的 2D 輸入。
輸出尺寸
nD 張量,尺寸: (batch_size, ..., units)
。 例如,對於尺寸為 (batch_size, input_dim)
的 2D 輸入, 輸出的尺寸為 (batch_size, units)
。
Activation(激活函數)
syntax:
keras.layers.Activation(activation)
參數:
- activation: 要使用的激活函數的名稱 (詳見: activations), 或者選擇一個 Theano 或 TensorFlow 操作。
輸入尺寸:
任意尺寸。 當使用此層作為模型中的第一層時, 使用參數 input_shape
(整數元組,不包括樣本數的軸)。
輸出尺寸
與輸入相同。
Dropout(正則化層)
keras.layers.Dropout(rate, noise_shape=None, seed=None)
將 Dropout 應用於輸入。
Dropout 包括在訓練中每次更新時, 將輸入單元的按比率隨機設置為 0, 這有助於防止過擬合。
參數
- rate: 在 0 和 1 之間浮動。需要丟棄的輸入比例。
- noise_shape: 1D 整數張量, 表示將與輸入相乘的二進制 dropout 掩層的形狀。 例如,如果你的輸入尺寸為
(batch_size, timesteps, features)
,然后 你希望 dropout 掩層在所有時間步都是一樣的, 你可以使用noise_shape=(batch_size, 1, features)
。 - seed: 一個作為隨機種子的 Python 整數。
參考文獻
Flatten(展平)
keras.layers.Flatten(data_format=None)
將輸入展平。不影響批量大小。
參數
- data_format:一個字符串,其值為
channels_last
(默認值)或者channels_first
。它表明輸入的維度的順序。此參數的目的是當模型從一種數據格式切換到另一種數據格式時保留權重順序。channels_last
對應着尺寸為(batch, ..., channels)
的輸入,而channels_first
對應着尺寸為(batch, channels, ...)
的輸入。默認為image_data_format
的值,你可以在 Keras 的配置文件~/.keras/keras.json
中找到它。如果你從未設置過它,那么它將是channels_last
例
model = Sequential()
model.add(Conv2D(64, (3, 3),
input_shape=(3, 32, 32), padding='same',))
# 現在:model.output_shape == (None, 64, 32, 32)
model.add(Flatten())
# 現在:model.output_shape == (None, 65536)
Input(用於實例化 Keras 張量)
keras.engine.input_layer.Input()
Input()
用於實例化 Keras 張量。
Keras 張量是底層后端(Theano, TensorFlow 或 CNTK) 的張量對象,我們增加了一些特性,使得能夠通過了解模型的輸入 和輸出來構建 Keras 模型。
例如,如果 a, b 和 c 都是 Keras 張量, 那么以下操作是可行的: model = Model(input=[a, b], output=c)
添加的 Keras 屬性是: - _keras_shape: 通過 Keras端的尺寸推理 進行傳播的整數尺寸元組。 - _keras_history: 應用於張量的最后一層。 整個網絡層計算圖可以遞歸地從該層中檢索。
參數
- shape: 一個尺寸元組(整數),不包含批量大小。 例如,
shape=(32,)
表明期望的輸入是按批次的 32 維向量。 - batch_shape: 一個尺寸元組(整數),包含批量大小。 例如,
batch_shape=(10, 32)
表明期望的輸入是 10 個 32 維向量。batch_shape=(None, 32)
表明任意批次大小的 32 維向量。 - name: 一個可選的層的名稱的字符串。 在一個模型中應該是唯一的(不可以重用一個名字兩次)。 如未提供,將自動生成。
- dtype: 輸入所期望的數據類型,字符串表示 (
float32
,float64
,int32
...) - sparse: 一個布爾值,指明需要創建的占位符是否是稀疏的。
- tensor: 可選的可封裝到
Input
層的現有張量。 如果設定了,那么這個層將不會創建占位符張量。
返回
一個張量。
例
# 這是 Keras 中的一個邏輯回歸
x = Input(shape=(32,))
y = Dense(16, activation='softmax')(x)
model = Model(x, y)
Reshape(調整輸入大小)
keras.layers.Reshape(target_shape)
將輸入重新調整為特定的尺寸。
參數
- target_shape: 目標尺寸。整數元組。 不包含表示批量的軸。
輸入尺寸
任意,盡管輸入尺寸中的所有維度必須是固定的。 當使用此層作為模型中的第一層時, 使用參數 input_shape
(整數元組,不包括樣本數的軸)。
輸出尺寸
(batch_size,) + target_shape
例
# 作為 Sequential 模型的第一層
model = Sequential()
model.add(Reshape((3, 4), input_shape=(12,)))
# 現在:model.output_shape == (None, 3, 4)
# 注意: `None` 是批表示的維度
# 作為 Sequential 模型的中間層
model.add(Reshape((6, 2)))
# 現在: model.output_shape == (None, 6, 2)
# 還支持使用 `-1` 表示維度的尺寸推斷
model.add(Reshape((-1, 2, 2)))
# 現在: model.output_shape == (None, 3, 2, 2)
Permute(置換輸入的維度)
keras.layers.Permute(dims)
根據給定的模式置換輸入的維度。
在某些場景下很有用,例如將 RNN 和 CNN 連接在一起。
例
model = Sequential()
model.add(Permute((2, 1), input_shape=(10, 64)))
# 現在: model.output_shape == (None, 64, 10)
# 注意: `None` 是批表示的維度
參數
- dims: 整數元組。置換模式,不包含樣本維度。 索引從 1 開始。 例如,
(2, 1)
置換輸入的第一和第二個維度。
輸入尺寸
任意。當使用此層作為模型中的第一層時, 使用參數 input_shape
(整數元組,不包括樣本數的軸)。
輸出尺寸
與輸入尺寸相同,但是維度根據指定的模式重新排列。
RepeatVector(將輸入重復 n 次)
keras.layers.RepeatVector(n)
例
model = Sequential()
model.add(Dense(32, input_dim=32))
# 現在: model.output_shape == (None, 32)
# 注意: `None` 是批表示的維度
model.add(RepeatVector(3))
# 現在: model.output_shape == (None, 3, 32)
參數
- n: 整數,重復次數。
輸入尺寸
2D 張量,尺寸為 (num_samples, features)
。
輸出尺寸
3D 張量,尺寸為 (num_samples, n, features)
。
Lambda(將任意表達式封裝為 Layer對象)
keras.layers.Lambda(function, output_shape=None, mask=None, arguments=None)
例
# 添加一個 x -> x^2 層
model.add(Lambda(lambda x: x ** 2))
# 添加一個網絡層,返回輸入的正數部分
# 與負數部分的反面的連接
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))
參數
- function: 需要封裝的函數。 將輸入張量作為第一個參數。
- output_shape: 預期的函數輸出尺寸。 只在使用 Theano 時有意義。 可以是元組或者函數。 如果是元組,它只指定第一個維度; 樣本維度假設與輸入相同:
output_shape = (input_shape[0], ) + output_shape
或者,輸入是None
且樣本維度也是None
:output_shape = (None, ) + output_shape
如果是函數,它指定整個尺寸為輸入尺寸的一個函數:output_shape = f(input_shape)
- arguments: 可選的需要傳遞給函數的關鍵字參數。
輸入尺寸
任意。當使用此層作為模型中的第一層時, 使用參數 input_shape
(整數元組,不包括樣本數的軸)。
輸出尺寸
由 output_shape
參數指定 (或者在使用 TensorFlow 時,自動推理得到)。
ActivityRegularization(網絡層)
參數
keras.layers.ActivityRegularization(l1=0.0, l2=0.0)
網絡層,對基於代價函數的輸入活動應用一個更新
- l1**: L1 正則化因子 (正數浮點型)。
- l2: L2 正則化因子 (正數浮點型)。
輸入尺寸
任意。當使用此層作為模型中的第一層時, 使用參數 input_shape
(整數元組,不包括樣本數的軸)。
輸出尺寸
與輸入相同。
Masking(使用覆蓋值覆蓋序列)
keras.layers.Masking(mask_value=0.0)
使用覆蓋值覆蓋序列,以跳過時間步。
對於輸入張量的每一個時間步(張量的第一個維度), 如果所有時間步中輸入張量的值與 mask_value
相等, 那么這個時間步將在所有下游層被覆蓋 (跳過) (只要它們支持覆蓋)。
如果任何下游層不支持覆蓋但仍然收到此類輸入覆蓋信息,會引發異常。
例
考慮將要喂入一個 LSTM 層的 Numpy 矩陣 x
, 尺寸為 (samples, timesteps, features)
。 你想要覆蓋時間步 #3 和 #5,因為你缺乏這幾個 時間步的數據。你可以:
- 設置
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))
SpatialDropout1D(Dropout 的 Spatial 1D 版本)
keras.layers.SpatialDropout1D(rate)
此版本的功能與 Dropout 相同,但它會丟棄整個 1D 的特征圖而不是丟棄單個元素。如果特征圖中相鄰的幀是強相關的(通常是靠前的卷積層中的情況),那么常規的 dropout 將無法使激活正則化,且導致有效的學習速率降低。在這種情況下,SpatialDropout1D 將有助於提高特征圖之間的獨立性,應該使用它來代替 Dropout。
參數
- rate: 0 到 1 之間的浮點數。需要丟棄的輸入比例。
輸入尺寸
3D 張量,尺寸為:(samples, timesteps, channels)
輸出尺寸
與輸入相同。
參考文獻
SpatialDropout2D(Dropout 的 Spatial 2D 版本)
keras.layers.SpatialDropout2D(rate, data_format=None)
此版本的功能與 Dropout 相同,但它會丟棄整個 2D 的特征圖而不是丟棄單個元素。如果特征圖中相鄰的像素是強相關的(通常是靠前的卷積層中的情況),那么常規的 dropout 將無法使激活正則化,且導致有效的學習速率降低。在這種情況下,SpatialDropout2D 將有助於提高特征圖之間的獨立性,應該使用它來代替 dropout。
參數
- rate: 0 到 1 之間的浮點數。需要丟棄的輸入比例。
- data_format:
channels_first
或者channels_last
。在channels_first
模式中,通道維度(即深度)位於索引 1,在channels_last
模式中,通道維度位於索引 3。默認為image_data_format
的值,你可以在 Keras 的配置文件~/.keras/keras.json
中找到它。如果你從未設置過它,那么它將是channels_last
輸入尺寸
4D 張量,如果 data_format=channels_first
,尺寸為 (samples, channels, rows, cols)
,如果 data_format=channels_last
,尺寸為 (samples, rows, cols, channels)
輸出尺寸
與輸入相同。
參考文獻
SpatialDropout3D(Dropout 的 Spatial 3D 版本)
keras.layers.SpatialDropout3D(rate, data_format=None)
此版本的功能與 Dropout 相同,但它會丟棄整個 3D 的特征圖而不是丟棄單個元素。如果特征圖中相鄰的體素是強相關的(通常是靠前的卷積層中的情況),那么常規的 dropout 將無法使激活正則化,且導致有效的學習速率降低。在這種情況下,SpatialDropout3D 將有助於提高特征圖之間的獨立性,應該使用它來代替 dropout。
參數
- rate: 0 到 1 之間的浮點數。需要丟棄的輸入比例。
- data_format:
channels_first
或者channels_last
。在channels_first
模式中,通道維度(即深度)位於索引 1,在channels_last
模式中,通道維度位於索引 4。默認為image_data_format
的值,你可以在 Keras 的配置文件~/.keras/keras.json
中找到它。如果你從未設置過它,那么它將是channels_last
輸入尺寸
5D 張量,如果 data_format=channels_first
,尺寸為 (samples, channels, dim1, dim2, dim3)
,如果 data_format=channels_last
,尺寸為 (samples, dim1, dim2, dim3, channels)
輸出尺寸
與輸入相同。
參考文獻