为啥 Autoencoder 也将输入数据作为标签数据
Posted
技术标签:
【中文标题】为啥 Autoencoder 也将输入数据作为标签数据【英文标题】:Why does Autoencoder take the input data as label data as well为什么 Autoencoder 也将输入数据作为标签数据 【发布时间】:2021-10-16 11:08:49 【问题描述】:我按照指南构建了一个基本的单层自动编码器来学习 Keras 和自动编码器。但是我意识到该模型在训练期间将X_train
数据作为输入数据和标签数据,实际上与评估中的X_test
相同。我还检查了另一个示例自动编码器代码,它们也具有相同的结构。
这是因为自动编码器按原样获取数据,就像标签是数据本身一样,没有特定的标签?这背后的原因是什么,我们不能在没有任何标签的情况下运行模型吗(我实际上尝试过,但 Keras 不喜欢这个想法并给出了错误)?
培训和评估电话如下
autoencoder.fit(X_train,X_train, epochs=nb_epoch, batch_size=batch_size, shuffle=True, verbose=0)
test_predictions = autoencoder.predict(X_test)
print('Test reconstrunction error\n', sklearn.metrics.mean_squared_error(X_test, test_predictions))
注意:我的数据只是随机创建的,如果有影响的话,是正态分布的 5d 数据
编辑:谢谢大家,这是我的错误/困惑,正如我在 cmets 中所说,我完全忽略了系统将重建输出与标签数据进行比较的部分。因为据说在口头交谈时与输入数据进行比较。但是在构建的系统中,误差是通过给定的标签数据和输出之间的差异来计算的
【问题讨论】:
你知道自动编码器应该做什么吗?你知道在监督学习中总是应该有一些标签,以便网络学习吗? @Kaveh,我是这些主题的新手,但是是的,我的问题就是从那里出现的。如果我错了,请纠正我,我只是在努力学习。自动编码器尝试从输入数据中提取特征,以便仍然可以从提取的特征中重建数据(最好以最小的误差)。然而,在这个过程中,自动编码器不使用外部提供的标签,而是根据重建误差的最小化来调整训练过程,因此它们被认为是无监督的。所以我想知道为什么我们将数据本身作为标签提供 您正在评论中回答您的问题。所以想象一下,你想找到一个函数来将一些 n 维数据映射到 m 维空间中。你怎么知道你在嵌入空间中的表示是否有意义?一种方法是尝试向后执行相同的过程,这意味着将嵌入表示映射到数据本身。如果您能够使用整个训练数据集实现这一点,这意味着您很有可能找到了有意义的数据表示。换句话说,你找到了一个很好的函数来映射嵌入空间中的数据 谢谢@hamid.khb 我完全忽略了系统将重建输出与标签数据进行比较的部分。因为据说在口头交谈时与输入数据进行比较。然而,在构建的系统中,误差是通过给定的标签数据和输出之间的差异来计算的 如果我正确理解您的评论,输入数据是标签数据。将标签与输出进行比较与将重建与实际数据(输入)进行比较是相同的。如果它没有回答您的问题,请尝试解释更多,问题是什么。 【参考方案1】:自动编码器旨在将输入数据压缩为简化的、有意义的参数,并将它们解码回输入数据。因此,该模型在设法准确地再现输入数据时得到了很好的训练。出于这个原因,y 标签是输入数据本身,而作为输出得到的损失是衡量您想要预测的内容(输入数据本身)与您的模型实际生成的内容之间的相似性
【讨论】:
谢谢,我完全忽略了系统将重建输出与标签数据进行比较的部分。因为据说在口头交谈时与输入数据进行比较。然而,在构建的系统中,误差是通过给定的标签数据和输出之间的差异来计算的以上是关于为啥 Autoencoder 也将输入数据作为标签数据的主要内容,如果未能解决你的问题,请参考以下文章
Variational AutoEncoder- Keras-logits 和标签必须具有相同的形状?