我有从未编译的 keras 代码构建的模型,并试图通过自定义训练循环运行它们。
TF 2.0 eager(默认)代码在 CPU(笔记本电脑)上运行大约 30 秒。当我使用包装的 tf.function 调用方法创建 keras 模型时,它的运行速度要慢得多,而且似乎需要很长时间才能启动,尤其是“第一次”时间。
例如,在 tf.function 代码中,10 个样本的初始训练需要 40 秒,10 个样本的后续训练需要 2 秒。
在 20 个样本上,初始需要 50 秒,后续需要 4 秒。
1 个样本的第一列火车需要 2 秒,后续需要 200 毫秒。
所以看起来每次调用 train 都在创建一个新图,其中复杂性随列车数量而变化!?
我只是在做这样的事情:
@tf.function
def train(n=10):
step = 0
loss = 0.0
accuracy = 0.0
for i in range(n):
step += 1
d, dd, l = train_one_step(model, opt, data)
tf.print(dd)
with tf.name_scope('train'):
for k in dd:
tf.summary.scalar(k, dd[k], step=step)
if tf.equal(step % 10, 0):
tf.print(dd)
d.update(dd)
return d
根据示例,模型keras.model.Model
使用@tf.function
装饰call
方法的位置。