Python 如何使用另一个模型的输出作为参数来实现自定义Keras调节器?
我试图复制这篇文章: 基本上,完全卷积网络(FCN)对图像的面片进行体素级预测,然后,该面片及其各自的标签通过自动编码器,然后进行比较,以评估预测的“全局形状” 因此损失函数(等式(1)第4页)是来自FCN的交叉熵和来自自动编码器的欧氏距离损失之间的线性组合 问题: 我有一个工作的FCN和一个工作的自动编码器,我的问题是在Keras/tensorflow中实现这个损失函数。那么,我该怎么做呢 这是我到目前为止尝试过的(没有方程的第三项),但给出了错误的结果:Python 如何使用另一个模型的输出作为参数来实现自定义Keras调节器?,python,tensorflow,neural-network,keras,loss-function,Python,Tensorflow,Neural Network,Keras,Loss Function,我试图复制这篇文章: 基本上,完全卷积网络(FCN)对图像的面片进行体素级预测,然后,该面片及其各自的标签通过自动编码器,然后进行比较,以评估预测的“全局形状” 因此损失函数(等式(1)第4页)是来自FCN的交叉熵和来自自动编码器的欧氏距离损失之间的线性组合 问题: 我有一个工作的FCN和一个工作的自动编码器,我的问题是在Keras/tensorflow中实现这个损失函数。那么,我该怎么做呢 这是我到目前为止尝试过的(没有方程的第三项),但给出了错误的结果: def euclidean_dist
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)))
与
通常,L2正则化总是采用平方距离。您希望得到什么结果?标题应该是一个问题,以便我们了解您具体想要什么。谢谢您的提示。我想通过使用自动编码器丢失的信息来改进我的FCN预测。我的问题是如何在keras中使用另一个模型的输出作为参数来实现调节器。请在您的帖子中包含您的问题的任何附加信息。避免在评论中添加这些内容,因为它们更难阅读,也更容易删除。你的帖子的编辑按钮就在帖子标签下面。你是说欧几里得距离损失吗?我认为欧几里德范数是和我一样计算出来的,从我在维基百科上看到的我指的是
Lhe=K.sqrt(K.sum(K.square(ae_seg-ae_gt))
。总的来说,计算距离确实和你做的一样,但这不是计算损失的方式。同样,参见等式4。在报纸上。他们不接受sqrt。@jfga,太好了:)PS:如果你觉得我的答案有帮助,请投票或接受它
Lhe = K.sum(K.square(ae_seg - ae_gt))