【问题标题】:How to create a "Denoising Autoencoder" in Matlab?如何在 Matlab 中创建“去噪自动编码器”?
【发布时间】:2018-10-08 04:31:10
【问题描述】:

我知道 Matlab 有函数 TrainAutoencoder(input, settings) 来创建和训练自动编码器。结果能够运行“Encode”和“Decode”这两个函数。 但这仅适用于普通自动编码器的情况。如果您想要一个去噪自动编码器怎么办?我搜索并找到了一些示例代码,他们使用“网络”功能将自动编码器转换为普通网络,然后Train(network, noisyInput, smoothOutput)就像一个去噪自动编码器。

但是有多个缺失的部分:

  1. 如何使用这个新的网络对象来“编码”新的数据点?它不支持 encode()。
  2. 如何从这个“网络”中获取特征的“潜在”变量?

如果有人可以帮助我解决此问题,我将不胜感激。 谢谢, -莫因

【问题讨论】:

    标签: matlab neural-network autoencoder


    【解决方案1】:
    1. 目前(2019a),MATALAB 不允许用户在自动编码器中手动添加层。如果您想构建自己的,您将使用 MATLAB 提供的层从头开始;
    2. 为了使用 TrainNetwork(...) 来训练您的模型,您需要找到一种将数据插入到名为 imDatastore 的对象中的方法。 autoencoder 的数据的难点在于没有标签,这是 imDatastore 所要求的,因此你必须找到一个聪明的方法来避免它——本质上你是要处理一个所谓的 OCC(一类分类)问题.

    https://www.mathworks.com/help/matlab/ref/matlab.io.datastore.imagedatastore.html

    1. 使用激活(...) 转储中间(隐藏)层的输出

    https://www.mathworks.com/help/deeplearning/ref/activations.html?searchHighlight=activations&s_tid=doc_srchtitle

    1. 我在使用 MATLAB 和 Python (Keras) 进行深度学习之间徘徊了几周,最终我选择了后者,尽管我是 MATLAB 的长期忠实用户和 Python 的新手。我的两分钱是前者对深度学习的限制太多。

    祝你好运。:-)

    【讨论】:

    • 非常感谢 Theron,我实际上能够创建一个类似于自动编码器结构的多层前馈网络。现在,问题是:有没有办法只在前半层模拟“编码”过程?
    【解决方案2】:

    如果您的“模拟”是指预测/推理,只需使用 activations(...) 来转储我之前提到的任何中间(隐藏)层的输出,以便您可以检查它们。

    另一种方法是构建一个相同的网络,但仅使用编码部分,将训练好的参数复制到其中,然后输入模拟信号。

    【讨论】:

      最近更新 更多