나는 DeepLearning4J 0.7로 제한된 볼츠만 머신 (RBM)을 훈련 시키려고했지만 성공하지는 못했다. 내가 찾은 모든 예제는 DeepLearning4J 0.7로 더 이상 유용하지 않거나 더 이상 작동하지 않습니다.RBM을 교육하고 DeepLearning4J로 입력을 재구성하는 방법은 무엇입니까?
Contrastive Divergence를 사용하여 하나의 RBM을 트레이닝 한 다음 재구성 오류를 계산해야합니다. 여기
는 내가 지금까지 무엇을 가지고 :import org.nd4j.linalg.factory.Nd4j;
import org.deeplearning4j.datasets.fetchers.MnistDataFetcher;
import org.deeplearning4j.nn.conf.layers.RBM;
import org.deeplearning4j.nn.api.Layer;
import static org.deeplearning4j.nn.conf.layers.RBM.VisibleUnit;
import static org.deeplearning4j.nn.conf.layers.RBM.HiddenUnit;
import org.deeplearning4j.optimize.api.IterationListener;
import org.deeplearning4j.datasets.iterator.impl.MnistDataSetIterator;
import org.deeplearning4j.eval.Evaluation;
import org.deeplearning4j.nn.api.OptimizationAlgorithm;
import org.deeplearning4j.nn.conf.MultiLayerConfiguration;
import org.deeplearning4j.nn.conf.NeuralNetConfiguration;
import org.deeplearning4j.nn.conf.Updater;
import org.deeplearning4j.nn.multilayer.MultiLayerNetwork;
import org.deeplearning4j.nn.weights.WeightInit;
import org.deeplearning4j.optimize.listeners.ScoreIterationListener;
import org.nd4j.linalg.dataset.DataSet;
import org.nd4j.linalg.dataset.api.iterator.DataSetIterator;
import org.nd4j.linalg.lossfunctions.LossFunctions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.nd4j.linalg.api.ndarray.INDArray;
public class experiment3 {
private static final Logger log = LoggerFactory.getLogger(experiment3.class);
public static void main(String[] args) throws Exception {
DataSetIterator mnistTrain = new MnistDataSetIterator(100, 60000, true);
MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder()
.regularization(false)
.iterations(1)
.optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)
.list()
.layer(0, new RBM.Builder()
.nIn(784).nOut(500)
.weightInit(WeightInit.XAVIER)
.lossFunction(LossFunctions.LossFunction.RECONSTRUCTION_CROSSENTROPY)
.updater(Updater.NESTEROVS)
.learningRate(0.1)
.momentum(0.9)
.k(1)
.build())
.pretrain(true).backprop(false)
.build();
MultiLayerNetwork model = new MultiLayerNetwork(conf);
model.init();
model.setListeners(new ScoreIterationListener(600));
for(int i = 0; i < 50; i++) {
model.fit(mnistTrain);
}
}
}
그것은 컴파일하고 각각의 시대에서 어떤 점수를 인쇄하지만, 점수가 감소되어야하고, 나는 재건 할 수있는 방법을 발견하지 않았습니다 때 확장합니다.
나는 재 구축 기능을 사용하여 거리를 계산하기 위해 노력했다 :
while(mnistTrain.hasNext()){
DataSet next = mnistTrain.next();
INDArray in = next.getFeatureMatrix();
INDArray out = model.reconstruct(in, 1); // tried with 0 but arrayindexoutofbounds
log.info("distance(1):" + in.distance1(out));
}
을하지만 거리가 항상 모델이 불가능 하나의 신기원을 위해 훈련되지 않은 경우에도 각 요소에 대해 0.0입니다.
RBM을 교육하는 올바른 방법입니까? 단일 RBM으로 입력을 재구성하려면 어떻게해야합니까?
DL4J의 거터 채널 (매우 활발한 채널)에이 질문을 올리십시오. https://gitter.im/deeplearning4j/deeplearning4j – tremstat
답변이 없으면 지터를 확인하겠습니다. 감사. –
성공 했습니까? 여전히 최신 릴리스 (0.9.1)에서 동일한 문제로 어려움을 겪고 있습니다. –