keras.layers.Flatten不会丢失信息吗?
Doesn't keras.layers.Flatten lose information?
一般来说,对于 keras 和 ML 来说是全新的。我在看 https://machinelearningmastery.com/use-word-embedding-layers-deep-learning-keras/,它在 Embedding 和 Dense 之间使用 Flatten,因为 Embedding 产生一个二维向量,但 Dense 需要一个维度。
我确定我在这里遗漏了一些明显的东西,但是为什么这不会丢失哪些输入向量中的哪些词?我们如何仍然能够知道输入 #3 是 "nice work" 并且与标签 #3, 1 相关联 "positive"?
我想原始尺寸是从原始输入中保留下来的,然后以某种方式恢复为 Dense 的输出?或者我只是完全错过了一个主要的概念方面?
model = Sequential()
model.add(Embedding(vocab_size, 8, input_length=max_length))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))
感谢您的指导!
嵌入层为每个单词标记提供一个向量,因此输出是二维的。我们需要在任何分类器块之前使用 flatten
。
有一些信息丢失,例如当我们使用卷积层,然后将特征图扁平化时,空间信息丢失了。但是我们已经使用 Conv 层提取了最重要的特征,并将这些特征提供给全连接层。
在您的示例中,不再保留时间维度,通常需要将嵌入矩阵的输出传递给 RNN/Conv 层以进一步提取特征。
Flatten 仅应用于非批次维度,这意味着示例仍然是分开的(如果你是这个意思的话)。
对于每个样本,假设 nice work
,我们得到 2 个向量(1 个表示好,1 个表示工作),现在我们只想知道句子的整体情绪,所以,一旦我们提取了特征,我们就可以应用扁平化。
一般来说,对于 keras 和 ML 来说是全新的。我在看 https://machinelearningmastery.com/use-word-embedding-layers-deep-learning-keras/,它在 Embedding 和 Dense 之间使用 Flatten,因为 Embedding 产生一个二维向量,但 Dense 需要一个维度。
我确定我在这里遗漏了一些明显的东西,但是为什么这不会丢失哪些输入向量中的哪些词?我们如何仍然能够知道输入 #3 是 "nice work" 并且与标签 #3, 1 相关联 "positive"?
我想原始尺寸是从原始输入中保留下来的,然后以某种方式恢复为 Dense 的输出?或者我只是完全错过了一个主要的概念方面?
model = Sequential()
model.add(Embedding(vocab_size, 8, input_length=max_length))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))
感谢您的指导!
嵌入层为每个单词标记提供一个向量,因此输出是二维的。我们需要在任何分类器块之前使用 flatten
。
有一些信息丢失,例如当我们使用卷积层,然后将特征图扁平化时,空间信息丢失了。但是我们已经使用 Conv 层提取了最重要的特征,并将这些特征提供给全连接层。
在您的示例中,不再保留时间维度,通常需要将嵌入矩阵的输出传递给 RNN/Conv 层以进一步提取特征。
Flatten 仅应用于非批次维度,这意味着示例仍然是分开的(如果你是这个意思的话)。
对于每个样本,假设
nice work
,我们得到 2 个向量(1 个表示好,1 个表示工作),现在我们只想知道句子的整体情绪,所以,一旦我们提取了特征,我们就可以应用扁平化。