将RNN和Embedding链接在一起时,了解Keras RNN中的参数数量和Keras Embedding中的输出形状尺寸

时间:2019-06-13 07:05:21

标签: keras recurrent-neural-network word-embedding

我从一些youtube视频中获得了Keras代码:

from keras.models import Sequential
from keras.layers import Embedding, SimpleRNN

model = Sequential()
model.add(Embedding(10000, 32))
model.add(SimpleRNN(32))
model.summary()

摘要的输出是这样:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
embedding_1 (Embedding)      (None, None, 32)          320000    
_________________________________________________________________
simple_rnn_1 (SimpleRNN)     (None, 32)                2080      
=================================================================
Total params: 322,080
Trainable params: 322,080
Non-trainable params: 

首先,我不明白为什么简单RNN中的参数数量为2080。接下来,我不明白为什么嵌入层的输出形状为(None,None,32)

2 个答案:

答案 0 :(得分:2)

用于计算simpleRNN的参数数量 Number of parameters for Keras SimpleRNN

对于第二个问题,由于未指定嵌入层的(batch_size, input_length, output_dim)参数(输入序列的长度),所以嵌入层的输出形状为input_length,它将采用默认值是None(变量)。

此外,由于RNN块在每个时间步中运行,因此您可以将其添加到可变的时间步层中。但是,如果要添加Flatten,然后添加以整个上一层作为输入的密集层,则必须在嵌入层中指定input_length

答案 1 :(得分:1)

SimpleRNN中的每个时间步都是输出Embedding。嵌入大小为32。 在RNN中,有两个参数矩阵U和W

S = f(UX + WS) + b

由于X的形状为(None,32),所以U的形状为32,S的形状为32。最后一个偏斜形状为1。

因此在RNN层中,参数的数量为(32+32+1)*32=2080