繁体   English   中英

如何使用 Keras 自定义损失 function 中的张量?

[英]How to use the tensors inside a Keras custom loss function?

我需要训练一个自定义损失为 function 的 model,它还应在预测后立即更新一些外部 function,如下所示:

def loss_fct(y_true, y_pred):
    global feeder
 
    # Change values of feeder given y_pred
    for value in y_pred:
        feeder.do_something(value)
    
    return K.mean(y_true - y_pred, axis=-1)

但这不起作用,因为 TF 无法迭代 AutoGraph 中的张量:

OperatorNotAllowedInGraphError: iterating over `tf.Tensor` is not allowed: AutoGraph did convert this function. This might indicate you are trying to use an unsupported feature.

我的 model 看起来像这样

model = Sequential()
model.add(Input(shape=(DIM, )))
model.add(Dense(DIM, activation=None))
model.add(Dense(16, activation=None))
model.add(Dense(4, activation="softmax"))
model.compile(optimizer="adam", loss=loss_fct)
model.summary()

它是这样训练的:

model.fit(x=feeder.feed,
    epochs=18,
    verbose=1,
    callbacks=None,
)

其中feeder.feed是一个产生 2 NumPy arrays 的生成器。


经过大量研究,我遇到了这个答案 该方法似乎没有任何问题,但它是一个Tensorflow >= 2.2.0错误,默认情况下启用了Eager Execution

最后,要解决此问题,请使用model.compile(..., run_eagerly=True)并在训练期间迭代和访问张量。

暂无
暂无

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

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