Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow 如何建立二元分类的神经网络结构_Tensorflow_Machine Learning - Fatal编程技术网

Tensorflow 如何建立二元分类的神经网络结构

Tensorflow 如何建立二元分类的神经网络结构,tensorflow,machine-learning,Tensorflow,Machine Learning,我正在阅读有关神经网络的tensorflow教程,我发现架构部分有点混乱。有人能解释一下为什么他在代码中使用了以下设置吗 # input shape is the vocabulary count used for the movie reviews 人声大小? 嵌入值为16? 对于单位的选择,我得到了最后一个密集层后面的直觉,因为它是一个二元分类(1),但为什么第二层有16个单位? 嵌入层中的16个单元和第一致密层中的16个单元相关吗?他们应该平等吗 如果有人也能解释这段话 第一层是嵌入层

我正在阅读有关神经网络的tensorflow教程,我发现架构部分有点混乱。有人能解释一下为什么他在代码中使用了以下设置吗

# input shape is the vocabulary count used for the movie reviews 
人声大小? 嵌入值为16? 对于单位的选择,我得到了最后一个密集层后面的直觉,因为它是一个二元分类(1),但为什么第二层有16个单位? 嵌入层中的16个单元和第一致密层中的16个单元相关吗?他们应该平等吗

如果有人也能解释这段话

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

资料来源:

第一层是
vocab_size
,因为每个单词都表示为词汇表的索引。例如,如果输入的单词是“word”,这是词汇表中的第500个单词,那么输入是一个长度为
vocab_size
的向量,除了索引500处的一个之外,该向量都是零。这通常被称为“一个热点”表示

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


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

第一层是
vocab_size
,因为每个单词都表示为词汇表的索引。例如,如果输入的单词是“word”,这是词汇表中的第500个单词,那么输入是一个长度为
vocab_size
的向量,除了索引500处的一个之外,该向量都是零。这通常被称为“一个热点”表示

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

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

  • vocab_size:语料库中的所有单词(在本例中为IMDB)根据频率和提取的前10000个单词进行排序。剩下的词汇将被忽略。例如:这真的很奇怪,YYYY将转换为==>[8 7 9]。您可能会猜到,Fancyyyyyyy被忽略,因为它不在前10000个单词中
  • 填充顺序:将所有句子转换为相同大小。例如,在训练语料库中,文档长度是不同的。所以它们都转换为seq_len=256。完成此步骤后,您的输出为
    [批次大小*序列长度]

  • 嵌入:将每个单词转换为16维向量。因此,该步骤的输出是一个大小为
    [Batch\u size*seq\u len*embedding\u dim]
    的张量
  • GlobalAveragePoolg1d:将大小为
    [批量大小*顺序大小*嵌入大小]
    的序列转换为
    [批量大小*嵌入大小]
  • 单位:是密集层(MLP层)的输出。它将
    [批量大小*嵌入尺寸]
    转换为
    [批量大小*单位]
      • vocab_size:语料库中的所有单词(在本例中为IMDB)根据频率和提取的前10000个单词进行排序。剩下的词汇将被忽略。例如:这真的很奇怪,YYYY将转换为==>[8 7 9]。您可能会猜到,Fancyyyyyyy被忽略,因为它不在前10000个单词中
      • 填充顺序:将所有句子转换为相同大小。例如,在训练语料库中,文档长度是不同的。所以它们都转换为seq_len=256。完成此步骤后,您的输出为
        [批次大小*序列长度]

      • 嵌入:将每个单词转换为16维向量。因此,该步骤的输出是一个大小为
        [Batch\u size*seq\u len*embedding\u dim]
        的张量
      • GlobalAveragePoolg1d:将大小为
        [批量大小*顺序大小*嵌入大小]
        的序列转换为
        [批量大小*嵌入大小]
      • 单位:是密集层(MLP层)的输出。它将
        [批量大小*嵌入尺寸]
        转换为
        [批量大小*单位]

      “每个单词转换成16维向量”只是想知道,为什么是16维?在更多的事情上,为什么他在导入数据集imdb=keras.datasets.imdb(train\u data,train\u labels),(test\u data,test\u labels)=imdb.load\u data(num\u words=10000)时已经做了vocab size的事情,他又在做了一次@这是一个任意数字。你可以将其更改为任何你想要的。“每个单词转换为16维向量”只是想知道,为什么是16维?在更多的事情上,当他导入数据集imdb=keras.datasets.imdb(train_data,train_labels),(test_data,test_labels)=imdb.load_data时,为什么他又在做vocab大小的事情(字数=10
      (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()