如何处理一个常数值作为神经网络的输出?

数据挖掘 神经网络 喀拉斯 训练 优化
2022-02-28 18:28:14

我正在使用前馈神经网络进行回归,我得到的预测结果是下图中可见的常数值:我的神经网络的输出

我使用的数据是典型的标准化表格数字。架构如下:

model.add(Dense(units=512, activation='relu', input_shape=x_train.shape[1],)))
model.add(Dropout(0.2))
model.add(Dense(units=512, activation='relu'))
model.add(Dropout(0.3))
model.add(Dense(units=256, activation='relu'))
model.add(Dropout(0.3))
model.add(Dense(units=128, activation='relu'))
model.add(Dense(units=128, activation='relu'))
model.add(Dense(units=1))

adam = optimizers.Adam(lr=0.1)

model.compile(loss='mean_squared_error', optimizer=adam)

reduce_lr = ReduceLROnPlateau(
    monitor='val_loss',
    factor=0.9,
    patience=10,
    min_lr=0.0001,
    verbose=1)

tensorboard = TensorBoard(log_dir="logs\{}".format(NAME))

history = model.fit(
    x_train,
    y_train,
    epochs=500,
    verbose=10,
    batch_size=128,
    callbacks=[reduce_lr, tensorboard],
    validation_split=0.1)

在我看来,所有权重都归零,并且这里只存在恒定偏差,因为对于来自测试集的不同数据样本,我得到相同的值。

我知道该算法已经为这样一个常数值找到了最小的 MSE,但是有没有办法避免这种情况,因为直线对我的项目来说并不是很好的解决方案?

[编辑] 为训练和验证集添加学习曲线。 在此处输入图像描述

2个回答

将初始学习率从 0.1 降低到 0.005 有助于解决问题。

adam = optimizers.Adam(lr=0.005)

然而,这篇文章有点老了,我用 PyTorch 处理过类似的情况。规范化数据应该会有所帮助。我认为这是因为您的所有值都是严格的正数,因此减去均值应该会改善您的网络,因为它不同于“较低”和“较高”值。