Чтение реконструированного вектора из автоэнкодера в 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 векторов и вернуть их реконструированные версии.

Но даже глядя на API VariationalAutoencoder (или AutoEncoder тоже), я не могу понять, как это сделать. Или эти слои не предназначены для такого рода «сквозного использования», и мне пришлось бы вручную создавать сеть автокодирования?


person Cedric Reichenbach    schedule 13.07.2018    source источник


Ответы (1)


Вы можете увидеть, как использовать слой VAE для извлечения усредненных реконструкций из вариационного примера.

Существует два метода получения реконструкции из вариационного слоя. Стандартом является generateAtMeanGivenZ, который будет брать образцы из слоя и давать вам среднее значение. Если вам нужны необработанные образцы, вы можете использовать generateRandomGivenZ. См. страницу javadoc для всех других методов.

person wm_eddie    schedule 19.07.2018