python - 了解前馈神经网络输出
问题描述
我已经为回归问题建立了一个具有 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
我的问题是,在每个时期我看到平均绝对百分比误差和验证平均绝对百分比误差。后者似乎低于我的预期,为什么平均绝对百分比误差如此不同并且远高于验证平均绝对百分比误差?
另外,为什么验证平均绝对百分比误差波动如此之大?
感谢任何输入。
解决方案
看起来您的模型根本无法学习任何东西。你检查你的输入数据了吗?
另一个问题可能是梯度太大,这导致“不收敛行为”。因此,您的损失只是“随机”波动。
所以检查你的训练数据,尝试扩展它并尝试使用不同的损失函数!希望有帮助。
推荐阅读
- python-3.x - Python 请求:分块发布请求
- select - 无法从 Katalon 工作室的下拉菜单中选择一个选项
- javascript - 如何在 ReactJS 中切换类 onClick?
- reactjs - 如何获取任何组件的道具类型?
- npm - 如何在苗条的 JS 应用程序中添加引导模块?
- laravel - 表上存在具有相同值的两列的 Laravel 验证
- java - 什么系统时钟 System.currentTimeMillis(); 在 centOS 上的 Java 中使用
- css - CSS - 来回动画 css 设置
- html - 当它们都是 DIV 标记时,列表项不显示
- ios - ios上的Appsee热图