我已经建立了具有3个隐藏层的前馈神经网络来解决回归问题。我用于验证的指标是MAPE。以下是模型参数
#Define the model
NN_model = Sequential()
# The Input Layer :
NN_model.add(Dense(128, kernel_initializer='normal',input_dim = X_train.shape[1], activation='relu'))
# The Hidden Layers :
NN_model.add(Dense(256, kernel_initializer='normal',activation='relu'))
NN_model.add(Dense(256, kernel_initializer='normal',activation='relu'))
NN_model.add(Dense(256, kernel_initializer='normal',activation='relu'))
# The Output Layer :
NN_model.add(Dense(1, kernel_initializer='normal',activation='linear'))
# Compile the network :
NN_model.compile(loss='mean_absolute_percentage_error', optimizer='adam', metrics=['mean_absolute_percentage_error'])
##NN_model.compile(loss='mean_absolute_error', optimizer='adam', metrics=['mean_absolute_error'])
NN_model.summary()
示例输出如下所示
Train on 18000 samples, validate on 4500 samples
Epoch 1/500
18000/18000 [==============================] - 3s 148us/step - loss: 672.5252 - mean_absolute_percentage_error: 672.5252 - val_loss: 29.3799 - val_mean_absolute_percentage_error: 29.3799
Epoch 00001: val_loss improved from inf to 29.37992, saving model to Weights-001--29.37992.hdf5
Epoch 2/500
18000/18000 [==============================] - 2s 133us/step - loss: 739.9019 - mean_absolute_percentage_error: 739.9019 - val_loss: 220.4918 - val_mean_absolute_percentage_error: 220.4918
Epoch 00002: val_loss did not improve from 29.37992
Epoch 3/500
18000/18000 [==============================] - 2s 129us/step - loss: 840.8005 - mean_absolute_percentage_error: 840.8005 - val_loss: 18.5716 - val_mean_absolute_percentage_error: 18.5716
我的问题是,在每个时期,我看到平均绝对百分比误差和验证平均绝对百分比误差。后者似乎更低,这是我所期望的,为什么平均绝对百分比误差如此不同并且远高于验证平均绝对百分比误差?
还有,为什么验证意味着绝对百分比误差波动这么大?
感谢任何输入。
答案 0 :(得分:0)
您的模型似乎根本无法学习任何东西。您检查输入数据了吗?
另一个问题可能是梯度太大,从而导致“没有收敛行为”。因此,您的损失只是“随机”地波动。
因此,请检查您的训练数据,尝试按比例缩放并尝试使用其他损失函数!希望有帮助。
答案 1 :(得分:0)
MAPE可能偏低,因为在输入值方面没有太大的差异。
让我们假装我们正在讨论经典的线性回归,以使事情更容易可视化。不幸的是,您恰巧在一个不错的经典S型曲线上进行了线性回归-从-inf
到inf
,拐点为0.5,拐点为0.5。
您的最大可能的努力将是定义为0x+0.5
的一行。您实际上根本无法使用所使用的模型做任何更好的事情。但是,您的MAPE将达到50%,而不是像10000%那样疯狂。
该模型完全是垃圾,但是其错误被限制在相当小的值范围内。
现在,使用DNN会比较麻烦,因为您需要担心所有这些额外的维度,但这可能是调试模型的不错方法。
就波动而言,很难说出自动柜员机-您刚刚显示了前三个时期,它可能仍在努力寻找数据的立足点。在进行任何诊断之前,我会看看问题是否在继续培训期间仍然存在。