gpt4 book ai didi

python-3.x - Convnet 序数回归损失函数

转载 作者:行者123 更新时间:2023-12-05 08:06:36 25 4
gpt4 key购买 nike

我目前正在尝试使用在 Imagenet 上训练的 Densenet 进行迁移学习,以输出一个有序整数值 {2 < 3 < 4 < 5 < 6}。我使用 this method 将目标变量编码为长度为 4 的二进制向量(即 [1,0,0,0]、[1,1,0,0] 等)。 .下面是我的模型的架构:

base_model = DenseNet121(include_top=False, weights="imagenet", classes=5, input_shape=(224,224,3))
base_model.trainable = False
x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dropout(0.8)(x)
preds = Dense(4, activation="sigmoid",
axis=1),
)(x)
model = Model(inputs=base_model.input, outputs=preds, name = "ordered_logit")

model.compile(optimizer=keras.optimizers.Nadam(), loss='binary_crossentropy', metrics=[soft_acc_multi_output])

'soft_acc_multi_output' 是我的自定义指标,如果所有条目都匹配真实值,则输出 1,否则输出 0。

import tensorflow.keras.backend as K
def soft_acc_multi_output(y_true, y_pred):
return K.mean(K.all(K.equal(K.cast(K.round(y_true),'int32'), K.cast(K.round(y_pred),'int32')),axis=1))

我目前正在使用“binary_crossentropy”,但我意识到它并没有告诉模型,如果真正的标签是 [1,1,0,0],那么 [0.9, 0.7, 0, 0.6] 应该比 [0.9, 0.7, 0.6, 0] 受到更严重的惩罚,但目前对它们的惩罚是相同的。我应该如何修改损失函数以使其能够识别这种差异?

最佳答案

当我们需要使用可用的损失函数(或度量)以外的损失函数(或指标)时,我们需要构建自己的自定义损失函数并传递给 model.compile。

度量函数类似于损失函数,只是在训练模型时不使用度量​​的评估结果。我们可以使用任何损失函数作为度量函数。

因此构建一个自定义损失函数,使用您为指标评估构建的计算来确定模型要优化的额外惩罚或损失。

关于python-3.x - Convnet 序数回归损失函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60133055/

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