Tensorflow2.0 训练:model.compile vs GradientTape
Tensorflow2.0 training: model.compile vs GradientTape
我开始学习 Tensorflow2.0,我感到困惑的一个主要原因是什么时候使用 keras-like model.compile
vs tf.GradientTape
训练模型。
在用于 MNIST 分类的 Tensorflow2.0 教程中,他们训练了两个相似的模型。 One with model.compile
and the other with tf.GradientTape
.
抱歉,如果这是微不足道的,但你什么时候使用一个而不是另一个?
这确实是一件 case-specific 的事情,这里很难给出一个明确的答案(它可能也接近于“opinion-based”)。但总的来说,我会说
- "classic" Keras 界面(使用
compile
、fit
等)允许快速轻松地构建、训练和评估标准模型。但是,它非常 high-level/abstract,因此不会给您太多 low-level 控制权。如果您正在实施具有 non-trivial 控制流的模型,这可能很难适应。
GradientTape
让您完全 low-level 控制 training/running 模型的所有方面,允许更轻松的调试以及更复杂的架构等,但您需要编写更多compiled
模型会向您隐藏的许多事情的样板代码(例如训练循环)。尽管如此,如果您从事深度学习研究,您可能大部分时间都在这个级别上工作。
我开始学习 Tensorflow2.0,我感到困惑的一个主要原因是什么时候使用 keras-like model.compile
vs tf.GradientTape
训练模型。
在用于 MNIST 分类的 Tensorflow2.0 教程中,他们训练了两个相似的模型。 One with model.compile
and the other with tf.GradientTape
.
抱歉,如果这是微不足道的,但你什么时候使用一个而不是另一个?
这确实是一件 case-specific 的事情,这里很难给出一个明确的答案(它可能也接近于“opinion-based”)。但总的来说,我会说
- "classic" Keras 界面(使用
compile
、fit
等)允许快速轻松地构建、训练和评估标准模型。但是,它非常 high-level/abstract,因此不会给您太多 low-level 控制权。如果您正在实施具有 non-trivial 控制流的模型,这可能很难适应。 GradientTape
让您完全 low-level 控制 training/running 模型的所有方面,允许更轻松的调试以及更复杂的架构等,但您需要编写更多compiled
模型会向您隐藏的许多事情的样板代码(例如训练循环)。尽管如此,如果您从事深度学习研究,您可能大部分时间都在这个级别上工作。