gpt4 book ai didi

python - 如何防止keras自定义损失函数中的负面预测

转载 作者:行者123 更新时间:2023-11-30 09:17:30 24 4
gpt4 key购买 nike

我正在使用自定义损失函数:

def ratio_loss(y, y0):
return (K.mean(K.abs(y - y0) / y))

并获得负预测值 - 在我的例子中这不会构成场景(我使用 CNN 和回归作为最后一层来获取对象的长度)。我使用除法是为了在真实值相对于预测值较小的情况下惩罚更多)。

如何防止负面预测?

这是模式(目前..):

def create_model():
model = Sequential()
model.add(Conv2D(128, kernel_size=(3, 3), activation='relu', padding='same', input_shape=(128, 128, 1)))
model.add(Dropout(0.5))

model.add(Conv2D(128, kernel_size=(3, 3), activation='relu', padding='same'))
model.add(Dropout(0.25))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(64, kernel_size=(3, 3), activation='relu', padding='same'))
model.add(Dropout(0.25))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2, 2)))
#
#
model.add(Conv2D(64, kernel_size=(3, 3), activation='relu', padding='same'))
model.add(Dropout(0.25))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Flatten())
model.add(Dense(512, activation='relu'))

model.add(Dropout(0.15))
model.add(Dense(1))
#model.compile(loss=keras.losses.mean_squared_error, optimizer=keras.optimizers.Adadelta(), metrics=[sacc])
model.compile(loss=ratio_loss, optimizer=keras.optimizers.Adadelta(), metrics=[sacc])
return model

谢谢,阿米尔

最佳答案

您可以继续训练您的神经网络,并希望它能够学会不做出任何低于 0 的预测(假设所有训练数据的输出都低于 0)。然后,您可以添加一个后预测步骤,在该步骤中将“如果它做出任何低于 0 的预测”,那么您只需将其转换为 0。

您可以按照 Daniel Möller 的回答添加激活函数。

这将涉及改变

model.add(Dense(1))

model.add(Dense(1, activation='softplus'))

既然您在评论中提到您希望输出介于 0 到 ~200 之间。这将保证输出不会低于 0。

关于python - 如何防止keras自定义损失函数中的负面预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51441690/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com