【发布时间】: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