我正在阅读有关神经网络的tensorflow教程,并且遇到了架构部分,这有点令人困惑。有人可以解释一下为什么他在此代码中使用了以下设置
# input shape is the vocabulary count used for the movie reviews
(10,000 words) vocab_size = 10000 model = keras.Sequential() model.add(keras.layers.Embedding(vocab_size, 16)) model.add(keras.layers.GlobalAveragePooling1D()) model.add(keras.layers.Dense(16, activation=tf.nn.relu)) model.add(keras.layers.Dense(1, activation=tf.nn.sigmoid)) model.summary()
Vocab_size? 嵌入的值是16? 以及单位的选择,我得到了最后一个密集层背后的直觉,因为它是二进制分类(1),但是为什么第二层有16个单位呢? 嵌入的16个单位和第一密集层的16个单位是否相关?好像他们应该平等吗?
如果有人也可以解释这一段
第一层是嵌入层。该层采用整数编码的词汇表,并为每个单词索引查找嵌入向量。这些向量是在模型训练中学习的。向量将维度添加到输出数组。生成的尺寸为:(批,序列,嵌入)。
答案 0 :(得分:1)
第一层是vocab_size
,因为每个单词都表示为词汇表的索引。例如,如果输入单词是“ word”(即词汇中的第500个单词),则输入是长度为vocab_size
的向量,除了索引为500的一个以外,其他所有零都为零。这通常称为a “一个热门”代表。
嵌入层本质上采用了巨大的输入向量,并将其压缩为较小的向量(在本例中为长度16),该向量对有关单词的某些信息进行了编码。像其他任何神经网络层一样,可以从训练中学习特定的嵌入权重。我建议您阅读单词嵌入。 16的长度在这里有点随意,但是可以调整。可以取消这一嵌入层,但是该模型的表达能力会降低(这只是逻辑回归,这是一个线性模型)。
然后,正如您所说,最后一层只是基于嵌入来预测单词的类别。
答案 1 :(得分:1)
[Batch_size * seq_len]
。[Batch_size * seq_len * embedding_dim]
的张量。[Batch_size * seq_len * embedding_dim]
的序列转换为[Batch_size * embedding_dim]
[Batch_size * embedding_dim]
转换为[Batch_size * unit]
。