Keras 和 AutoGraph

rsm*_*rsm 5 python keras tensorflow tensorflow2.0

阅读这个这个答案,我明白对于 TensorFlow-2.0 上的非动态模型,Keras 将使用 AutoGraph。但是现在编写一个回调来获取训练期间变量的历史记录,

class TrainHistory(tf.keras.callbacks.Callback):
    def on_train_begin(self, logs={}):
        self.vars = []

    def on_batch_end(self, batch, logs={}):
        self.vars.append([v.numpy() for v in self.model.variables])
Run Code Online (Sandbox Code Playgroud)

我看到.numpy()可以使用渴望张量的方法。我期待这样的错误numpy() is only available when eager execution is enabled。将 Keras 与 TensorFlow-2.0 结合使用时,是否正在执行 Eager 代码?

这里提到,对于像卷积这样的计算密集型函数,与tf.functionEager 代码相比,装饰函数的速度并没有太大提升,但从示例中显示的数字来看,我认为这种差异对于长时间训练可能意义重大。使用GradientTape装饰的自定义训练函数tf.function而不是 Keras 的fit()方法在性能方面会更好吗?

tor*_*keo 1

如果您打算@tf.function在外部循环(即“纪元”循环)上使用,它可能不会给您的模型带来太大好处。这只会让开发变得更加困难。代码越多,就越复杂。

但是,您绝对必须使用tf.function自定义损失函数和其他每批调用一个的函数。

而且,不,使用GradientTape-d customtf.function可能不会优于 keras 的 fit 方法。多年来它经过了彻底的测试和完善。

这能回答您的问题吗?