我的问题是我正在训练我的前馈神经网络来预测从一个站点训练到另一个站点需要多长时间。它有两个隐藏层(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);
这是我的神经网络配置:
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();