如何为每一层堆叠相同的 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 的最终状态(您想要用于分类的状态)
我想知道如何堆叠多层 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
.