如何在Matlab中创建“降噪自动编码器”?

时间:2018-10-08 04:31:10

标签: matlab neural-network autoencoder

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

但是有多个缺失的部分:

  1. 如何使用此新网络对象对新数据点进行“编码”?它不支持encode()。
  2. 如何从此“网络”中获取要素的“潜在”变量?

如果有人能帮助我解决此问题,我将不胜感激。 谢谢, -Moein

2 个答案:

答案 0 :(得分:1)

  1. 当前(2019a),MATALAB不允许用户在自动编码器中手动添加图层。如果要构建自己的数据库,则可以使用MATLAB提供的图层从头开始;
  2. 为了使用TrainNetwork(...)训练模型,您将找到一种将数据插入名为imDatastore的对象的方法。自动编码器数据的困难在于没有标签,这是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的新手。我的两分钱是前者在深度学习方面有太多限制。

祝你好运:-)

答案 1 :(得分:0)

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

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