Моя проблема в том, что я тренирую свой 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();