从DL4J中的自动编码器读取重新构造的矢量



我的目标是拥有一个自动编码网络,在那里我可以训练身份函数,然后进行前向传递,从而重建输入。

为此,我尝试使用VariationalAutoencoder,例如:

MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder()
.seed(77147718)
.trainingWorkspaceMode(WorkspaceMode.NONE)
.gradientNormalization(GradientNormalization.ClipElementWiseAbsoluteValue)
.gradientNormalizationThreshold(1.0)
.optimizationAlgo(OptimizationAlgorithm.CONJUGATE_GRADIENT)
.list()
.layer(0, new VariationalAutoencoder.Builder()
.activation(Activation.LEAKYRELU)
.nIn(100).nOut(15)
.encoderLayerSizes(120, 60, 30)
.decoderLayerSizes(30, 60, 120)
.pzxActivationFunction(Activation.IDENTITY)
.reconstructionDistribution(new BernoulliReconstructionDistribution(Activation.SIGMOID.getActivationFunction()))
.build())
.pretrain(true).backprop(false)
.build();

然而,VariationalAutoencoder似乎被设计用于训练(并提供(从输入到编码版本的映射,即,在上述示例配置中,大小为100的向量到大小为15的向量。

然而,我对编码版本不是特别感兴趣,但我想训练一个100向量到它自己的映射。然后,我想通过它运行另外100个向量,并返回它们的重建版本。

但即使在查看VariationalAutoencoder(或AutoEncoder(的API时,我也不知道如何做到这一点。或者这些层不是为这种"端到端使用"而设计的,我必须手动构建一个自动编码网络?

您可以看到如何使用VAE层从变分示例中提取平均重建。

从变分层得到重建有两种方法。标准是generateAtMeanGivenZ,它将从图层中提取样本并给出平均值。如果您想要原始样本,可以使用generateRandomGivenZ。有关所有其他方法,请参阅javadoc页面。

相关内容

  • 没有找到相关文章

最新更新