代码之家  ›  专栏  ›  技术社区  ›  Cedric Reichenbach

从DL4J中的自动编码器读取重构向量

  •  0
  • Cedric Reichenbach  · 技术社区  · 6 年前

    我的目标是建立一个自动编码网络,在那里我可以训练身份函数,然后向前传递,生成一个输入的重构。

    为此,我正在尝试使用 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();
    

    然而, 变分编码器 似乎是为训练(和提供)从输入到编码版本的映射而设计的,即在上面的示例配置中,大小为100的向量到大小为15的向量。

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

    但即使在查看 变分编码器 (或) AutoEncoder 我也不知道该怎么做。或者这些层不是为这种“端到端使用”而设计的,我必须手动构建一个自动编码网络?

    1 回复  |  直到 6 年前
        1
  •  1
  •   wm_eddie    6 年前

    您可以看到如何使用vae层提取平均重建 from the variational example .

    有两种方法可以从变分层中得到重建。标准是 generateAtMeanGivenZ 它将从层中提取样本并给出平均值。如果你想要原始样品,你可以用 generateRandomGivenZ . 见 the javadoc page 所有其他方法。