【发布时间】:2019-06-04 22:34:44
【问题描述】:
是否可以在原生 TensorFlow 中定义一个图,然后将该图转换为 Keras 模型?
我的意图只是结合(对我而言)这两个世界中最好的。
我真的很喜欢用于原型设计和新实验的 Keras 模型 API,即使用很棒的 multi_gpu_model(model, gpus=4) 进行多 GPU 训练、保存/加载权重或带有 oneliners 的整个模型、所有便利功能比如.fit()、.predict()等等。
但是,我更喜欢在原生 TensorFlow 中定义我的模型。 TF 中的上下文管理器非常棒,在我看来,用它们实现 GAN 之类的东西要容易得多:
with tf.variable_scope("Generator"):
# define some layers
with tf.variable_scope("Discriminator"):
# define some layers
# model losses
G_train_op = ...AdamOptimizer(...)
.minimize(gloss,
var_list=tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES,
scope="Generator")
D_train_op = ...AdamOptimizer(...)
.minimize(dloss,
var_list=tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES,
scope="Discriminator")
另一个好处是用这种方式构建图表。在 TensorBoard 中调试复杂的原生 Keras 模型是地狱,因为它们根本没有结构化。通过在原生 TF 中大量使用变量范围,您可以“解开”图形并查看复杂模型的结构化版本以进行调试。
通过利用它,我可以直接设置自定义损失函数,并且不必在每次训练迭代中冻结任何东西,因为 TF 只会更新正确范围内的权重,这(至少在我看来)比 Keras 容易得多循环遍历所有现有层并设置.trainable = False的解决方案。
TL;DR:
长话短说:我喜欢直接访问 TF 中的所有内容,但大多数时候,一个简单的 Keras 模型就足以用于训练、推理……以后。模型 API 在 Keras 中更加简单方便。
因此,我更愿意在原生 TF 中建立一个图,并将其转换为 Keras 进行训练、评估等。有没有办法做到这一点?
【问题讨论】:
-
我不这么认为。看起来这将在 TensorFlow 中包装功能。我正在寻找一种在原生 TensorFlow 中实现 NN 的解决方案,然后将生成的图转换为 Keras 模型,以便我可以使用 TF 语法构建一些复杂的图,但有一个易于使用的 Keras 模型用于运行时。跨度>
-
一篇可能相关的帖子,介绍您将来可以使用 TensorFlow 和 Keras API 的不同方式:What are Symbolic and Imperative APIs in TensorFlow 2.0?
标签: tensorflow keras deep-learning