【发布时间】:2021-04-03 19:22:07
【问题描述】:
我正在训练一个 Keras 模型 (tf.keras.models.Sequential),调用它的方法 fit()。
由于我启用了 Eager Execution,训练时间(对于相同数量的 epoch)从 20.1 秒增加到 49.4 秒。此外,训练似乎不再收敛,因为损失保持在 9 左右(没有急切执行,它下降到 1),而方法 fit() 甚至不再报告请求的指标“准确度”。
是否支持 Keras 模型的急切执行?请注意,我在模型上调用方法 fit(),而不是使用估算器。
这里是声明模型并进行训练的代码的 sn-p。使用 TF 1.7 for GPU 安装 pip3。
tf.enable_eager_execution()
model = tf.keras.models.Sequential([
tf.keras.layers.InputLayer(input_shape=(11,)) ,
tf.keras.layers.Dense(64, activation='relu') ,
tf.keras.layers.Dense(32, activation='relu'),
tf.keras.layers.Dense(11, activation='softmax')
])
optimizer = tf.train.AdamOptimizer()
# optimizer = 'adam'
model.compile(optimizer=optimizer, loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(x=train_X, y=train_y, epochs=200, batch_size=64, verbose=2)
更新:在 Tensorflow GITHUB 上提交了 issue #18642。
【问题讨论】:
-
是的,
tf.keras旨在与急切执行兼容。事实上"Getting Started with Eager Execution" 指南使用它。如果您发现图形和急切执行之间的行为不同,我建议您使用filing a bug。 -
不幸的是,您提到的示例使用
tfe.GradientTape()来适应数据集,它不会尝试调用tf.keras.models.Sequential.fit()。它们为急切执行和 Keras 提供了另一个示例,它再次不调用fit()而是使用估计器。我可以让tfe.GradientTape()工作,但fit()似乎没有收敛(损失没有下降),并且没有报告它应该报告的指标。我将改进我的问题的标题以澄清问题是在 Keras 模型上调用fit()方法。我还计划在 GITHUB 上打开一个问题,将更新我的问题。
标签: tensorflow keras