如何设置用于二进制分类的神经网络架构



我正在阅读关于神经网络的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个单元和第一致密层中的十六个单元相关吗?他们应该平等吗?

如果有人能解释这个段落太

第一层是嵌入层。该层采用整数编码的词汇表,并查找每个单词索引的嵌入向量。这些向量是在模型训练时学习的。矢量为输出数组添加一个维度。生成的维度为:(批处理、序列、嵌入(。

来源:分类电影评论:二元分类

  • vocab_size:语料库中的所有单词(在本例中为IMDB(根据其频率进行排序,并提取其前10000个单词。其余词汇将被忽略。E.g:这真的是Fancyyyyy将转换为==>[8 7 9]。正如您可能猜到的,单词Fancyyyyy被忽略,因为它不在前10000个单词中
  • pad_sequences:将所有句子转换为相同大小。例如,在训练语料库中,文档长度是不同的。所以所有这些都转换为seq_len=256。此步骤之后,您的输出为[Batch_size * seq_len]
  • 嵌入:每个单词转换为一个16维的向量。作为结果,该步骤的输出是大小为[Batch_size * seq_len * embedding_dim]的张量
  • GlobalAveragePooling1D:将大小为[Batch_size * seq_len * embedding_dim]的序列转换为[Batch_size * embedding_dim]
  • 单位:密集层(MLP层(的输出。它将CCD_ 5转化为CCD_

第一层是vocab_size,因为每个单词都表示为词汇表的索引。例如,如果输入单词是"单词",这是词汇表中的第500个单词,则输入是长度为vocab_size的向量,除索引500处的一个外,其余均为零。这通常被称为"一次性"表示。

嵌入层本质上取这个巨大的输入向量,并将其压缩为一个较小的向量(在这种情况下,长度为16(,该向量对单词的一些信息进行编码。与任何其他神经网络层一样,通过训练来学习特定的嵌入权重。我建议你多读单词嵌入。16的长度在这里有点任意,但可以调整。可以去掉这个嵌入层,但模型的表达能力会降低(它只是逻辑回归,这是一个线性模型(。

然后,正如你所说,最后一层只是基于嵌入来预测单词的类别。

最新更新