【问题标题】:Understanding number of params in Keras RNN and output shape dimension in Keras Embedding when RNN and Embedding are chained together当 RNN 和 Embedding 链接在一起时,了解 Keras RNN 中的参数数量和 Keras Embedding 中的输出形状维度
【发布时间】:2019-06-13 07:05:21
【问题描述】:

我有一些 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)

【问题讨论】:

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


【解决方案1】:

用于计算simpleRNN的params个数 Number of parameters for Keras SimpleRNN

对于第二个问题,嵌入层的输出形状为(batch_size, input_length, output_dim),因为您没有指定嵌入层的input_length 参数(输入序列的长度),它将采用默认值None (多变的)。

此外,由于 RNN 块在每个时间步中运行,您可以将其添加到可变时间步层。但是,如果要添加 Flatten 后跟 Dense Layers 以将整个前一层作为输入,则必须在 Embedding Layer 中指定 input_length

【讨论】:

  • 谢谢@meowongac。我不明白的是 batch_size 和 input_length(又名 sequence_length)之间的区别。对我来说,这两个似乎是相同的(我想将多少个词转换为密集词向量?)。它们有什么区别?
  • 我猜这里的batch_size就像句子的数量,input_length是每个句子的单词数?所以嵌入层并不是真的一次处理一个单词,而是一次处理一个单词列表?
  • 你是对的。对于您的示例,batch_size 是一批中的句子数,而 input_length 是一个句子中的 max 个标记数。每个标记都由其对应的整数 (id) 表示,然后嵌入层将每个标记向量转换为您的情况下的 32 暗度向量。如果你想知道 Keras 中的嵌入层是如何在幕后工作的,你可以看看这个:[stats.stackexchange.com/questions/270546/…
  • 另外,如果你指定了 input_length 参数,你必须固定每个句子中的标记数量,你需要填充它们(可能使用pad_sequences in Keras。如果你想要你的 RNN 块或 TimeDistributed块...忽略填充值,您可以使用masking layer in Keras
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2022-01-15
    • 2020-06-10
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    • 2019-07-17
    • 1970-01-01
    • 2018-08-08
    • 2018-01-19
    相关资源
    最近更新 更多