【问题标题】:How to setup a neural network architecture for binary classification如何为二进制分类设置神经网络架构
【发布时间】:2019-01-14 06:04:54
【问题描述】:

我正在阅读关于神经网络的 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()

词汇大小? 嵌入的值为 16? 以及单位的选择,我得到了最后一个密集层背后的直觉,因为它是一个二元分类(1),但为什么第二层有 16 个单位? 嵌入中的 16 个单元和第一个密集层中的 16 个单元是否相关?他们应该是平等的吗?

如果有人也能解释一下这一段

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

来源: Classify movie reviews: binary classification

【问题讨论】:

    标签: tensorflow machine-learning


    【解决方案1】:
    • vocab_size:您的语料库(在本例中为 IMDB)中的所有单词都根据它们的频率和提取的前 10000 个单词进行排序。其余的词汇将被忽略。例如:这真的是 Fancyyyyyyy 将转换为 ==> [8 7 9]。正如您可能猜到的那样,Fancyyyyyyy 这个词被忽略了,因为它不在前 10000 个词中。
    • pad_sequences:将所有句子转换为相同大小。例如,在训练语料库中,文档长度是不同的。所以它们都转换为 seq_len = 256。在这一步之后,你的输出是[Batch_size * seq_len]
    • Embedding:将每个单词转换为一个 16 维的向量。因此,此步骤的输出是一个大小为 [Batch_size * seq_len * embedding_dim] 的张量。
    • GlobalAveragePooling1D:将大小为[Batch_size * seq_len * embedding_dim] 的序列转换为[Batch_size * embedding_dim]
    • unit:是密集层(MLP 层)的输出。它将[Batch_size * embedding_dim] 转换为[Batch_size * unit]

    【讨论】:

    • "每个单词都转换成16维向量"就是想知道,为什么是16?
    • 在更多的事情上,为什么他在导入数据集时已经做了词汇大小的事情,而他又做了这个事情 imdb = keras.datasets.imdb (train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)
    • @shahidammer 这是任意数字。您可以将其更改为您想要的任何内容。
    【解决方案2】:

    第一层是vocab_size,因为每个单词都表示为词汇表的索引。例如,如果输入单词是“word”,它是词汇表中的第 500 个单词,则输入是一个长度为 vocab_size 的向量,除了索引 500 处的 1 外,其他所有零。这通常称为“一”热的'表示。

    嵌入层本质上采用这个巨大的输入向量并将其压缩成一个较小的向量(在本例中,长度为 16),该向量对有关单词的一些信息进行编码。特定的嵌入权重是从训练中学习的,就像任何其他神经网络层一样。我建议阅读词嵌入。 16 的长度在这里有点随意,但可以调整。可以取消这个嵌入层,但这样模型的表达能力就会降低(它只是逻辑回归,它是一个线性模型)。

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

    【讨论】:

      猜你喜欢
      • 2013-11-29
      • 2017-07-09
      • 2017-08-31
      • 1970-01-01
      • 2021-07-31
      • 2015-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多