我对如何使用自定义损失函数训练深度神经网络感兴趣。我已经看到堆栈溢出的帖子,但没有得到答复。我已经下载了VGG16并冻结了砝码,并添加了自己的头部。现在,我想通过自定义损失来训练该网络,该怎么办?
答案 0 :(得分:1)
这是PyTorch中的自定义RMSE丢失。我希望这能为您提供有关实现自定义损失函数的具体思路。您必须创建一个继承OLD
的类,定义初始化和正向传递。
db.collection.updateMany(
{ "records.type": "CURRENT" },
[{
$set: {
records: {
$map: {
input: "$records",
as: "r",
in: {
$cond: {
if: { $eq: ["$$r.type", "CURRENT"] },
then: {
type: "$$r.type",
value: {
$add: [
"$$r.value",
{
$reduce: {
input: "$records",
initialValue: 0,
in: {
$cond: {
if: { $eq: ["$$this.type", "OLD" ] },
then: { $add: ["$$this.value", "$$value"] },
else: "$$value"
}
}
}
}
]
}
},
else: "$$r"
}
}
}
}
}
},
{
$set: {
records: {
$filter: {
input: "$records",
as: "r",
cond: { $ne: ["$$r.type", "OLD"] }
}
}
}
}
])
答案 1 :(得分:1)
您可以简单地使用两个输入参数(真实值,预测值)定义一个函数。然后,您可以通过自己的方法使用这些值来计算损失。
以下是编码示例:
def custom_loss( y_true , y_pred ):
tf.losses.mean_squared_error( y_true , y_pred )
在此示例中,我使用了tf后端的mse。但是您可以在此处使用手动计算。 使用此损失函数编译模型。
model.compile(
optimizer=your_optimizer,
loss=custom_loss
)
您还可以定义自己的自定义指标,以便在培训期间进行判断。
def custom_metric( y_true , y_pred ):
return calculate_your_metric( y_true , y_pred )
最后,用它编译
model.compile(
optimizer=your_optimizer,
loss=custom_loss,
metrics=[ custom_metric ]
)
答案 2 :(得分:0)
有几个示例和存储库显示了如何实现听起来像您所指的感觉损失。当然,您可以根据自己的问题,对这些模型中的某些方法进行概括和学习。如果这样做,建议您撰写并分享。除了使用一些预训练的vgg模型外,我看不到其他任何示例,打破这种模式可能是一个不错的贡献!无论如何,您可能会发现以下其他答案很有用: