def charbonnier(I_x, I_y, I_t, U, V, e):
loss = K.sqrt(K.pow((U*I_x + V*I_y + I_t), 2) + e)
return K.sum(loss)
我想使用这个成本函数并对U和V进行优化。由于Keras损失函数只能具有f(y_true,y_pred)的形式,因此我目前正在努力使其与Keras一起使用。
我的模型是完全不受监督的,我没有事实依据。 I_x,I_y和I_t是常量,模型的目标是学习使E(F)最小的U和V。所以我的问题是: 在Keras中实现这种损失函数(不具有形式f(y_true,y_pred))的正确方法是什么?
答案 0 :(得分:0)
我认为您可能需要修改代码以调整喀拉拉邦的标准。如果网络不受监督,则可以让y_pred == y_ture
像自动编码器一样。
答案 1 :(得分:0)
如下定义损失函数:
def charbonnier(I_x, I_y, I_t, U, V, e)
def loss_fun(y_true, y_pred):
loss = K.sqrt(K.pow((U*I_x + V*I_y + I_t), 2) + e)
return K.sum(loss)
return loss_fun
答案 2 :(得分:0)
如您所见,tf.keras.models.Model.compile
方法中使用的 Keras 损失是面向监督学习的。对于无监督学习(不包括自监督学习,例如 VAE 和 SimCLR),一个好的解决方案是将损失作为张量直接添加到模型中。例如,
inp = tf.keras.layers.Input(...)
u = ...(inp)
v = ...(inp)
model = tf.keras.models.Model(inp, [u,v])
charbonnier_loss_tensor = tf.reduce_sum(tf.sqrt(tf.pow((U*I_x + V*I_y + I_t), 2) + e))
model.add_loss(charbonnier_loss_tensor)