Валидационные потери ниже, чем обучение в FeedForward NN, DL4J - PullRequest
0 голосов
/ 30 апреля 2020

Моя проблема в том, что я тренирую свой FeedForward NN, чтобы предсказать, сколько времени потребуется для обучения от одной станции к другой. Он имеет два скрытых слоя (128 и 64) и использует TANH. Первое, что не имеет смысла для меня, так это то, что моя модель предсказывает лучший результат при проверке набора данных. И в один прекрасный момент потери начинают колебаться.

введите описание изображения здесь

Я проверил свои данные, и они разные, без дубликатов. Может быть, это потому, что данные очень похожи, например, одинаковые маршруты, одинаковые типы поездов, и в этом причина такого поведения?

Я ИСПОЛЬЗУЮ DL4J. И проверочный набор данных составляет 10% от тренировочного набора. И мой набор данных содержит более 130 000 строк (для этого конкретного примера). Изменить: Вот значения, которые я строю.

for (int i = 0; i < nEpochs; i++) {
        trainingSetIterator.reset();
        model.fit(trainingSetIterator);

        System.out.println(i + ": " + model.evaluateRegression(validationIterator).averagerootMeanSquaredError() + " || "
                + model.evaluateRegression(trainingSetIterator).averagerootMeanSquaredError());

        validationValues[i] = model.evaluateRegression(validationIterator).averagerootMeanSquaredError();
        trainValues[i] = model.evaluateRegression(trainingSetIterator).averagerootMeanSquaredError();
    }
PlotRMSE plot = new PlotRMSE(trainValues, validationValues);

А вот мой Конфиг для нейронных net:

MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder()
            .seed(seed)
            .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)//pridane
            .weightInit(WeightInit.XAVIER)
            .dropOut(0.6)
            .updater(new Adam(learningRate))
            .list()
            .layer(new DenseLayer.Builder().nIn(numInputs).nOut(numHiddenNodes1)
                    .activation(Activation.TANH).build())
            .layer(new DenseLayer.Builder().nIn(numHiddenNodes1).nOut(numHiddenNodes2)
                    .activation(Activation.TANH).build())
            .layer(new DenseLayer.Builder().nIn(numHiddenNodes2).nOut(numHiddenNodes2)
                    .activation(Activation.TANH).build())
            .layer(new OutputLayer.Builder(LossFunctions.LossFunction.MSE)
                    .activation(Activation.IDENTITY)
                    .nIn(numHiddenNodes2).nOut(numOutputs).build()).backpropType(BackpropType.Standard)
            .build();
...