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

How to stack same RNN for every layer?

我想知道如何堆叠多层 RNN,但每一层都是相同的 RNN。我希望每一层都具有相同的重量。我看过stack 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()

enter image description here 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()

enter image description here 堆叠 RNN 2 层。

例如,我想构建两层RNN,但第一层和第二层必须具有相同的权重,这样当我更新第一层的权重时,第二层必须更新并共享相同的权重价值。据我所知,TF有RNN.state。它 returns 上一层的值。但是,当我使用它时,似乎每一层都是独立处理的。我想要的 2 层 RNN 应该具有等于 1 层的可训练参数,因为它们共享相同的权重,但这没有用。

您可以将图层对象视为知道如何应用权重的权重容器。您可以根据需要多次使用图层对象。假设embedding和RNN维度相同,你可以这样做:

states = Emb_layer(inputs)
first_layer = layers.SimpleRNN(n_hidden, use_bias=True, return_sequences=True)
for _ in range(10):
    states = first_layer(states)

没有理由将 stateful 设置为 true。当您将长序列分成多个批次以及 RNN 记住批次之间的状态时使用它,因此您不必手动设置初始状态。您可以通过简单地索引 states.

的最后位置来获得 RNN 的最终状态(您想要用于分类的状态)