Keras 如何为每层堆叠相同的RNN?

Keras 如何为每层堆叠相同的RNN?,keras,lstm,recurrent-neural-network,Keras,Lstm,Recurrent Neural Network,我想知道如何堆叠许多层的RNN,但每一层都是相同的RNN。我希望每一层都有相同的重量。我读过堆栈LSTM和RNN,但我发现每一层都不一样 1层代码: inputs = keras.Input(shape=(maxlen,), batch_size = batch_size) Emb_layer = layers.Embedding(max_features,word_dim) Emb_output = Emb_layer(inputs) first_layer = layers.Simple

我想知道如何堆叠许多层的RNN,但每一层都是相同的RNN。我希望每一层都有相同的重量。我读过堆栈LSTM和RNN,但我发现每一层都不一样

1层代码:

inputs = keras.Input(shape=(maxlen,), batch_size = batch_size)

Emb_layer = layers.Embedding(max_features,word_dim)
Emb_output = Emb_layer(inputs)

first_layer = layers.SimpleRNN(n_hidden,use_bias=True,return_sequences=False,stateful =False)
first_layer_output = first_layer(Emb_output)

dense_layer = layers.Dense(1, activation='sigmoid')
dense_output = dense_layer(first_layer_output )

model = keras.Model(inputs=inputs, outputs=dense_output)
model.summary()
RNN 1层

inputs = keras.Input(shape=(maxlen,), batch_size = batch_size)

Emb_layer = layers.Embedding(max_features,word_dim)
Emb_output = Emb_layer(inputs)

first_layer = layers.SimpleRNN(n_hidden,use_bias=True,return_sequences=True,stateful =True)
first_layer_output = first_layer(Emb_output)
first_layer_state = first_layer.states

second_layer = layers.SimpleRNN(n_hidden,use_bias=True,return_sequences=False,stateful =False)
second_layer_set_state = second_layer(first_layer_output, initial_state=first_layer_state)

dense_layer = layers.Dense(1, activation='sigmoid')
dense_output = dense_layer(second_layer_set_state )

model = keras.Model(inputs=inputs, outputs=dense_output)
model.summary()
堆栈RNN 2层


例如,我想构建两个层RNN,但第一层和第二层必须具有相同的权重,这样当我更新第一层中的权重时,第二层必须更新并共享相同的值。据我所知,TF有RNN状态。它返回上一层的值。然而,当我使用它时,似乎每个层都是独立处理的。我想要的2层RNN应该具有与1层相同的可训练参数,因为它们共享相同的权重,但这不起作用。

您可以将层对象视为权重容器,知道如何应用权重。可以根据需要多次使用图层对象。假设嵌入和RNN维度相同,可以执行以下操作:

states=Emb\u层(输入)
第一层=层。SimpleRN(n\u隐藏,使用\u偏差=真,返回\u序列=真)
对于范围(10)内的uu:
状态=第一层(状态)

没有理由将stateful设置为
true
。当您将长序列拆分为多个批次,并且RNN需要记住批次之间的状态时,可以使用此选项,这样您就不必手动设置初始状态。您只需从
状态

索引最后一个位置,就可以获得RNN的最终状态(您希望用于分类),您可以更具体一些吗?你到底试了什么?我想把许多RNN层堆叠在一起,但每一层都有相同的权重。例如,我想构建两个层RNN,但第一层和第二层必须具有相同的权重,这样当我更新第一层中的权重时,第二层必须更新并共享相同的值。据我所知,TF有RNN状态。它返回上一层的值。然而,当我使用这个时,似乎每一层都是独立处理的。我现在明白了!非常感谢你的解释。但是如果我将其设置为False,我会与stateful混淆,似乎第一层返回states=None。