【问题标题】:Using Keras layers inside custom loss function在自定义损失函数中使用 Keras 层
【发布时间】:2018-07-22 19:23:34
【问题描述】:

是否可以在自定义损失函数中使用 Keras 层(预训练或没有可训练参数的固定层)?

我想做这样的事情:

def custom_loss(y_true, y_pred):
    y_true_trans = SomeKerasLayer()(y_true)
    y_true_trans = SomeKerasLayer()(y_pred)
    return K.mean(K.abs(y_pred_trans - y_true_trans), axis=-1)

在 TensorFlow 后端,我收到错误:

make_tensor_proto 中的文件“/home/drb/venvs/keras/lib/python3.5/site-packages/tensorflow/python /framework/tensor_util.py”,第 364 行

raise ValueError("None values not supported.")

ValueError:不支持任何值。

当然,我可以在损失函数之外使用 Keras 层转换 y_pred(通过提供额外的输出),但我不能对参考值 y_true 做同样的事情。

用更一般的术语重新表述同一问题的另一种方法是:是否可以将 Keras 层封装为 Keras 后端函数?

有什么解决办法或变通办法吗?

【问题讨论】:

  • 你要使用哪一层?
  • 一个没有可学习参数的自定义层。
  • 你能给出定义吗?
  • 很遗憾不是,因为它不是开源的,我不拥有代码。它是一个中等复杂的层,在内部进行一些 FFT 转换。我知道我可以通过使用 Keras 后端将内层处理移植到损失函数中,但这需要大量的工作和重写。如果可能的话,我想避免这种情况。
  • 我实际上注意到可以将问题改写为更一般的形式:是否可以将固定的 Keras 层封装为 Keras 后端函数?我会相应地更新问题。

标签: python deep-learning keras


【解决方案1】:

这个问题有点模糊,所以它有一个是和不是的回答。
根据您的实施,您可以尝试
model = keras.layers.Add(..something..)(x)
其中 x = 前一个相关值的名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-28
    • 2020-12-19
    • 2017-12-18
    • 2020-03-27
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 2018-10-28
    相关资源
    最近更新 更多