限制模型的输出并没有提高模型评估的损失值

数据挖掘 深度学习 喀拉斯 激活函数
2022-02-28 00:59:33

有一个用于预测的深层模型。

输出是 0 到 80 之间的一些数字。(在数据集中,输出为 0-80)

模型损失值为 70,我想减少它。

我在通过测试值评估模型后打印了输出,并且一些预测值大于 80 或小于 0。

我决定在训练步骤中设置最后一层来预测 0-80,因此我在最终密集层之后设置了一个 lambda 层来裁剪输出值。

代码:

def relu_advanced(x):
return K.relu(x, max_value=80)

def createModel4():
model = models.Sequential()
model.add(Conv2D(256,(3, 3),
                 activation='relu',
                 input_shape=(320,20,1), padding='same'))
model.add(MaxPooling2D((2, 2)))

model.add(Conv2D(128, (3, 3), activation='relu', padding='same'))
model.add(MaxPooling2D((2, 2)))

model.add(Conv2D(64, (3, 3), activation='relu', padding='same'))
model.add(MaxPooling2D((2,2)))

model.add(Flatten())
#model.add(Dense(5*320, activation= 'relu'))
model.add(Dense(5*320))
model.add(Lambda(relu_advanced))



model.summary()
return model

我测试了有和没有 relu_advanced 的模型,不幸的是,损失值随着 advanced_relu 增加!

虽然没有大于 80 或小于零的值,但我不知道 Loss 增加会发生什么情况?

谢谢

1个回答

我建议你标准化你的标签,使其在 0 和 1 之间缩放,而不是 0 和 80。一旦你有一个训练有素的模型,然后在最后乘以你的输出。网络应该更容易学习 0 到 1 之间的值(Andrew Ng 的 coursera 课程对此有很好的讲解)。

回到使用标准 ReLU:你的问题是它无法学习是否尝试输出大于 80 的值,因为没有用于更新参数的梯度。

我还会考虑在最后放置一个小得多的密集层(例如 10 个节点)。