tensorflow - 如何为二进制分类设置神经网络架构
问题描述
我正在阅读有关神经网络的 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 个单元是否相关?好像他们应该是平等的?
如果有人也可以解释这个段落
第一层是嵌入层。该层采用整数编码的词汇表并查找每个单词索引的嵌入向量。这些向量是作为模型训练来学习的。向量向输出数组添加一个维度。结果维度是:(批次、序列、嵌入)。
来源: 电影评论分类:二元分类
解决方案
第一层是vocab_size
因为每个单词都表示为词汇表的索引。例如,如果输入单词是 'word',它是词汇表中的第 500 个单词,则输入是一个长度向量,vocab_size
除了索引 500 处的 1 之外全为零。这通常称为“one hot”表示.
嵌入层本质上采用这个巨大的输入向量并将其压缩成一个较小的向量(在本例中,长度为 16),该向量对有关单词的一些信息进行编码。特定的嵌入权重是从训练中学习的,就像任何其他神经网络层一样。我建议阅读词嵌入。16 的长度在这里有点随意,但可以调整。可以取消这个嵌入层,但这样模型的表达能力就会降低(它只是逻辑回归,它是一个线性模型)。
然后,如您所说,最后一层只是根据嵌入预测单词的类别。
推荐阅读
- authentication - ASP Core 3 react模板,登录后HttpContext.User.IsAuthenticated()返回False
- linux - 无法在基于 Yocto 的发行版上从 VLC 流式传输 RTSP
- ios - ASAuthorizationAppleIDButton 没有响应 touchUpInside 事件
- oracle - 使用 Datagrip 从 CSV 文件导入 VARRAY
- javascript - 如何在弹性搜索索引中获取特定文档
- python - 字符串选项的 Python 3 类型提示
- java - 是否可以在使用 @FeignClient 注释的 bean 中自动连接 bean
- android - 如何使用 Google Tag Manager v5 到 Google Analytics 跟踪电子商务事件?
- c# - 如果有,我如何使用第二个路由数据值
- php - 如何将数组值与相同的键组合?