VGG16—perceptual loss in keras感知损失【Keras】

前言

正常的损失加上感知损失,肯定需要自定义合适的loss function。在keras中,自定义loss function :
先考虑keras中的loss,如下:

def mean_squared_error(y_true, y_pred):
    return K.mean(K.square(y_pred - y_true), axis=-1)

如果要定义自己的感知损失:

def model_loss(y_true, y_pred):
    inp = Input(shape=(128, 128, 1))
    x = Dense(2)(inp)
    x = Flatten()(x)

    model = Model(inputs=[inp], outputs=[x])
    a = model(y_pred)
    b = model(y_true)

    # calculate MSE
    mse = K.mean(K.square(a - b))
    return mse

上面的代码只是一个概念展示,但是能够指导我们应该如何去做。

举例

因为在做医疗影像,所以一般的医疗影像都不是正常的RGB三通道图像,往往是3D的影像或者是1通道影像,如下图所示:
在这里插入图片描述
脑部的失状图影像,图像大小是(182, 218,1),训练的神经网络输入是(160,200,1),那么如果要使用VGG16的感知损失的话,需要将其复制为3通道,具体细节代码如下:

def VGGloss(y_true, y_pred):  # Note the parameter order
    from keras.applications.vgg16 import VGG16
    mod = VGG16(include_top=False, weights='imagenet')
    pred = K.concatenate([y_pred, y_pred, y_pred])
    true = K.concatenate([y_true, y_true, y_true])
    vggmodel = mod 
    f_p = vggmodel(pred)  
    f_t = vggmodel(true)  
    return K.mean(K.square(f_p - f_t)) 

使用:

model.compile(optimizer=Adam, loss = losses.VGGloss) 

参考:https://stackoverflow.com/questions/43914931/vgg-perceptual-loss-in-keras

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值