从 DL4J 中的自动编码器读取重构向量
Reading recustructed vector from autoencoder in 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
的 API(或 AutoEncoder
),我也不知道该怎么做。或者那些层不是为这种 "end-to-end usage" 设计的,我必须手动构建一个自动编码网络?
您可以了解如何使用 VAE 层提取平均重建from the variational example。
有两种方法可以从变层获得重建。标准是 generateAtMeanGivenZ
,它将从图层中抽取样本并给出平均值。如果你想要原始样本,你可以使用 generateRandomGivenZ
。有关所有其他方法,请参阅 the javadoc page。
我的目标是拥有一个自动编码网络,我可以在其中训练身份函数,然后进行前向传递以重建输入。
为此,我尝试使用 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
的 API(或 AutoEncoder
),我也不知道该怎么做。或者那些层不是为这种 "end-to-end usage" 设计的,我必须手动构建一个自动编码网络?
您可以了解如何使用 VAE 层提取平均重建from the variational example。
有两种方法可以从变层获得重建。标准是 generateAtMeanGivenZ
,它将从图层中抽取样本并给出平均值。如果你想要原始样本,你可以使用 generateRandomGivenZ
。有关所有其他方法,请参阅 the javadoc page。