繁体   English   中英

如何使用另一个模型的输出作为参数来实现自定义Keras稳压器?

[英]How to implement custom Keras regulizer with output of another model as a parameter?

我正在尝试复制这篇文章: https : //arxiv.org/pdf/1705.08302.pdf

基本上,全卷积网络(FCN)对图像的小块进行体素级别预测,然后将该小块及其相应的标签传递给自动编码器,然后进行比较以评估预测的“整体形状”。

因此,损失函数(第(4)页的等式(1))是FCN的交叉熵和自编码器的欧式距离损失之间的线性组合。

问题:

我有一个工作的FCN和一个工作的自动编码器,我的问题是在Keras / tensorflow中实现此损失功能。 那么,我该怎么做呢?

这是我到目前为止(没有方程的第三项)尝试过的结果,但是给出了错误的结果:

def euclidean_distance_loss(y_true, y_pred):
    from keras import backend as K
return K.sqrt(K.sum(K.square(y_pred - y_true)))

def ACNN_loss(l1, autoencoder):
    from keras import backend as K

    def loss(y_true, y_pred):
        ae_seg = autoencoder(y_pred)
        ae_gt = autoencoder(y_true)

        Lhe = K.sqrt(K.sum(K.square(ae_seg - ae_gt)))

        Lx = K.binary_crossentropy(y_true, y_pred)

        return Lx + (l1 * Lhe)

return loss

l1 = 0.01

ae_path = #path of my autoencoder model and its weights
autoencoder = keras.models.load_model(os.path.join(ae_path,'model.h5'), custom_objects={'euclidean_distance_loss': euclidean_distance_loss})

autoencoder.load_weights(os.path.join(ae_path,'weigths.h5'))


model.compile(loss = ACNN_loss(l1, autoencoder),
              optimizer = keras.optimizers.Adam(lr=0.0003, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0),
              metrics= ['accuracy', keras.metrics.binary_crossentropy]
              )

这是我的第一个问题,对不起任何要求,对不起。 提前致谢

平方根是不必要的。 在您所附的纸上,损失不包含sqrt函数。 即正则化项采用平方距离而不是范数距离

具体来说,您应该更换

Lhe = K.sqrt(K.sum(K.square(ae_seg - ae_gt)))

Lhe = K.sum(K.square(ae_seg - ae_gt))

通常,L2正则化始终采用平方距离。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM