keras.layers.recurrent.Recurrent(weights=None, return_sequences=False, go_backwards=False, stateful=False, unroll=False, consume_less='cpu', input_dim=None, input_length=None)
這是遞歸層的抽象類,請(qǐng)不要在模型中直接應(yīng)用該層(因?yàn)樗浅橄箢?,無(wú)法實(shí)例化任何對(duì)象)。請(qǐng)使用它的子類LSTM
或SimpleRNN
。
所有的遞歸層(LSTM
,GRU
,SimpleRNN
)都服從本層的性質(zhì),并接受本層指定的所有關(guān)鍵字參數(shù)。
weights:numpy array的list,用以初始化權(quán)重。該list形如[(input_dim, output_dim),(output_dim, output_dim),(output_dim,)]
return_sequences:布爾值,默認(rèn)False
,控制返回類型。若為True
則返回整個(gè)序列,否則僅返回輸出序列的最后一個(gè)輸出
go_backwards:布爾值,默認(rèn)為False
,若為True
,則逆向處理輸入序列
stateful:布爾值,默認(rèn)為False
,若為True
,則一個(gè)batch中下標(biāo)為i的樣本的最終狀態(tài)將會(huì)用作下一個(gè)batch同樣下標(biāo)的樣本的初始狀態(tài)。
unroll:布爾值,默認(rèn)為False
,若為True
,則遞歸層將被展開(kāi),否則就使用符號(hào)化的循環(huán)。當(dāng)使用TensorFlow為后端時(shí),遞歸網(wǎng)絡(luò)本來(lái)就是展開(kāi)的,因此該層不做任何事情。層展開(kāi)會(huì)占用更多的內(nèi)存,但會(huì)加速RNN的運(yùn)算。層展開(kāi)只適用于短序列。
consume_less:‘cpu’或‘mem’之一。若設(shè)為‘cpu’,則RNN將使用較少、較大的矩陣乘法來(lái)實(shí)現(xiàn),從而在CPU上會(huì)運(yùn)行更快,但會(huì)更消耗內(nèi)存。如果設(shè)為‘mem’,則RNN將會(huì)較多的小矩陣乘法來(lái)實(shí)現(xiàn),從而在GPU并行計(jì)算時(shí)會(huì)運(yùn)行更快(但在CPU上慢),并占用較少內(nèi)存。
input_dim:輸入維度,當(dāng)使用該層為模型首層時(shí),應(yīng)指定該值(或等價(jià)的指定input_shape)
input_length:當(dāng)輸入序列的長(zhǎng)度固定時(shí),該參數(shù)為輸入序列的長(zhǎng)度。當(dāng)需要在該層后連接Flatten
層,然后又要連接Dense
層時(shí),需要指定該參數(shù),否則全連接的輸出無(wú)法計(jì)算出來(lái)。注意,如果遞歸層不是網(wǎng)絡(luò)的第一層,你需要在網(wǎng)絡(luò)的第一層中指定序列的長(zhǎng)度,如通過(guò)input_shape
指定。
形如(samples,timesteps,input_dim)的3D張量
如果return_sequences=True
:返回形如(samples,timesteps,output_dim)的3D張量
否則,返回形如(samples,output_dim)的2D張量
# as the first layer in a Sequential modelmodel = Sequential()model.add(LSTM(32, input_shape=(10, 64)))# now model.output_shape == (None, 10, 32)# note: `None` is the batch dimension.# the following is identical:model = Sequential()model.add(LSTM(32, input_dim=64, input_length=10))# for subsequent layers, not need to specify the input size:model.add(LSTM(16))
遞歸層支持通過(guò)時(shí)間步變量對(duì)輸入數(shù)據(jù)進(jìn)行Masking,如果想將輸入數(shù)據(jù)的一部分屏蔽掉,請(qǐng)使用Embedding層并將參數(shù)mask_zero
設(shè)為True
。
目前為止,當(dāng)使用TensorFlow作為后端時(shí),序列的時(shí)間步數(shù)目必須在網(wǎng)絡(luò)中指定。通過(guò)input_length
(如果網(wǎng)絡(luò)首層是遞歸層)或完整的input_shape
來(lái)指定該值。
可以將RNN設(shè)置為‘stateful’,意味著訓(xùn)練時(shí)每個(gè)batch的狀態(tài)都會(huì)被重用于初始化下一個(gè)batch的初始狀態(tài)。狀態(tài)RNN假設(shè)連續(xù)的兩個(gè)batch之中,相同下標(biāo)的元素有一一映射關(guān)系。
要啟用狀態(tài)RNN,請(qǐng)?jiān)趯?shí)例化層對(duì)象時(shí)指定參數(shù)stateful=True
,并指定模型使用固定大小的batch:通過(guò)在模型的第一層傳入batch_input_shape=(...)
來(lái)實(shí)現(xiàn)。該參數(shù)應(yīng)為包含batch大小的元組,例如(32,10,100)代表每個(gè)batch的大小是32.
如果要將遞歸層的狀態(tài)重置,請(qǐng)調(diào)用.reset_states()
,對(duì)模型調(diào)用將重置模型中所有狀態(tài)RNN的狀態(tài)。對(duì)單個(gè)層調(diào)用則只重置該層的狀態(tài)。
當(dāng)使用TensorFlow作為后端時(shí),如果要在遞歸層使用dropout,需要同上面所述的一樣指定好固定的batch大小
keras.layers.recurrent.SimpleRNN(output_dim, init='glorot_uniform', inner_init='orthogonal', activation='tanh', W_regularizer=None, U_regularizer=None, b_regularizer=None, dropout_W=0.0, dropout_U=0.0)
全連接RNN網(wǎng)絡(luò),RNN的輸出會(huì)被回饋到輸入
output_dim:內(nèi)部投影和輸出的維度
init:初始化方法,為預(yù)定義初始化方法名的字符串,或用于初始化權(quán)重的Theano函數(shù)。
inner_init:內(nèi)部單元的初始化方法
activation:激活函數(shù),為預(yù)定義的激活函數(shù)名(參考激活函數(shù))
W_regularizer:施加在權(quán)重上的正則項(xiàng),為WeightRegularizer對(duì)象
U_regularizer:施加在遞歸權(quán)重上的正則項(xiàng),為WeightRegularizer對(duì)象
b_regularizer:施加在偏置向量上的正則項(xiàng),為WeightRegularizer對(duì)象
dropout_W:0~1之間的浮點(diǎn)數(shù),控制輸入單元到輸入門的連接斷開(kāi)比例
dropout_U:0~1之間的浮點(diǎn)數(shù),控制輸入單元到遞歸連接的斷開(kāi)比例
keras.layers.recurrent.GRU(output_dim, init='glorot_uniform', inner_init='orthogonal', activation='tanh', inner_activation='hard_sigmoid', W_regularizer=None, U_regularizer=None, b_regularizer=None, dropout_W=0.0, dropout_U=0.0)
門限遞歸單元(詳見(jiàn)參考文獻(xiàn))
output_dim:內(nèi)部投影和輸出的維度
init:初始化方法,為預(yù)定義初始化方法名的字符串,或用于初始化權(quán)重的Theano函數(shù)。
inner_init:內(nèi)部單元的初始化方法
activation:激活函數(shù),為預(yù)定義的激活函數(shù)名(參考激活函數(shù))
inner_activation:內(nèi)部單元激活函數(shù)
W_regularizer:施加在權(quán)重上的正則項(xiàng),為WeightRegularizer對(duì)象
U_regularizer:施加在遞歸權(quán)重上的正則項(xiàng),為WeightRegularizer對(duì)象
b_regularizer:施加在偏置向量上的正則項(xiàng),為WeightRegularizer對(duì)象
dropout_W:0~1之間的浮點(diǎn)數(shù),控制輸入單元到輸入門的連接斷開(kāi)比例
dropout_U:0~1之間的浮點(diǎn)數(shù),控制輸入單元到遞歸連接的斷開(kāi)比例
On the Properties of Neural Machine Translation: Encoder–Decoder Approaches
Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling
A Theoretically Grounded Application of Dropout in Recurrent Neural Networks
keras.layers.recurrent.LSTM(output_dim, init='glorot_uniform', inner_init='orthogonal', forget_bias_init='one', activation='tanh', inner_activation='hard_sigmoid', W_regularizer=None, U_regularizer=None, b_regularizer=None, dropout_W=0.0, dropout_U=0.0)
Keras長(zhǎng)短期記憶模型,關(guān)于此算法的詳情,請(qǐng)參考本教程
output_dim:內(nèi)部投影和輸出的維度
init:初始化方法,為預(yù)定義初始化方法名的字符串,或用于初始化權(quán)重的Theano函數(shù)。
inner_init:內(nèi)部單元的初始化方法
forget_bias_init:遺忘門偏置的初始化函數(shù),Jozefowicz et al.建議初始化為全1元素
activation:激活函數(shù),為預(yù)定義的激活函數(shù)名(參考激活函數(shù))
inner_activation:內(nèi)部單元激活函數(shù)
W_regularizer:施加在權(quán)重上的正則項(xiàng),為WeightRegularizer對(duì)象
U_regularizer:施加在遞歸權(quán)重上的正則項(xiàng),為WeightRegularizer對(duì)象
b_regularizer:施加在偏置向量上的正則項(xiàng),為WeightRegularizer對(duì)象
dropout_W:0~1之間的浮點(diǎn)數(shù),控制輸入單元到輸入門的連接斷開(kāi)比例
dropout_U:0~1之間的浮點(diǎn)數(shù),控制輸入單元到遞歸連接的斷開(kāi)比例
聯(lián)系客服