我需要训练一个带有自定义损失函数的模型,该模型还将在预测后立即更新一些外部函数,如下所示:
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 = 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数组的生成器在哪里。
经过大量研究,我遇到了这个答案。该方法似乎没有什么问题,但这是一个Tensorflow >= 2.2.0
错误,默认情况下启用了Eager Execution。
最后,要解决此问题model.compile(..., run_eagerly=True)
,可以在训练过程中使用和迭代以及访问张量。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句