我对如何用自定义损失函数训练深度神经网络感兴趣。我在stack overflow上看到了一些帖子,但是没有得到答案。我已经下载了VGG16,冻结了权重并添加了我自己的头。现在我想用自定义损失来训练这个网络,我该怎么做呢?
3
个回答
Bryce Wayne
发布于
2020-08-17
0
人赞同
这里是PyTorch中的一个自定义RMSE损失。我希望这能让你对如何实现一个自定义的损失函数有一个具体的想法。你必须创建一个继承
nn.Module
的类,定义初始化和向前传递。
class RMSELoss(nn.Module):
def __init__(self, eps=1e-9):
super().__init__()
self.mse = nn.MSELoss()
self.eps = eps
def forward(self,yhat,y):
loss = torch.sqrt(self.mse(yhat,y) + self.eps)
return loss
-你看到我问的是TF而不是pytorch吗?
Nazmul Hasan
发布于
2020-08-17
0
人赞同
你可以简单地定义一个有两个输入参数(真值,预测值)的函数。然后你可以用你自己的方法用这些值来计算损失。
以下是编码样本。
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 ]