gpt4 book ai didi

TensorFlow Graph 到 Keras 模型?

转载 作者:行者123 更新时间:2023-12-03 16:32:51 25 4
gpt4 key购买 nike

是否可以在原生 TensorFlow 中定义一个图,然后将该图转换为 Keras 模型?


我的目的只是将(对我来说)两个世界中最好的结合起来。

我真的很喜欢用于原型(prototype)设计和新实验的 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 模型是 hell ,因为它们根本没有结构化。通过在 native TF 中大量使用变量范围,您可以“解开”图形并查看复杂模型的非常结构化的版本以进行调试。

通过利用这个,我可以直接设置自定义损失函数,并且不必在每次训练迭代中卡住任何内容,因为 TF 只会更新正确范围内的权重,这(至少在我看来)比 Keras 容易得多解决方案是循环遍历所有现有层并设置 .trainable = False

TL;博士:

长话短说:我喜欢直接访问 TF 中的所有内容,但大多数时候,一个简单的 Keras 模型就足以用于训练、推理……稍后。 Keras 中的模型 API 更加简单和方便。

因此,我更愿意在原生 TF 中建立一个图,并将其转换为 Keras 进行训练、评估等。有什么办法可以做到这一点吗?

最佳答案

我认为不可能为任何 TF 图创建一个通用的自动转换器,它会产生一组有意义的层,并具有正确的命名等。只是因为图比一系列 Keras 层更灵活.

但是,您可以使用 Lambda layer 包装您的模型。在函数内构建模型,用 Lambda 包装它,然后将其放入 Keras 中:

def model_fn(x):
layer_1 = tf.layers.dense(x, 100)
layer_2 = tf.layers.dense(layer_1, 100)
out_layer = tf.layers.dense(layer_2, num_classes)
return out_layer

model.add(Lambda(model_fn))

当您使用 multi_gpu_model 时,有时会发生这种情况。 :您提出了三层:输入、模型和输出。

Keras 护教学

但是,TensorFlow 和 Keras 之间的集成可以更加紧密和有意义。请参阅this tutorial用于用例。

例如,变量作用域的使用方式与 TensorFlow 中非常相似:

x = tf.placeholder(tf.float32, shape=(None, 20, 64))
with tf.name_scope('block1'):
y = LSTM(32, name='mylstm')(x)

手动设备放置相同:

with tf.device('/gpu:0'):
x = tf.placeholder(tf.float32, shape=(None, 20, 64))
y = LSTM(32)(x) # all ops / variables in the LSTM layer will live on GPU:0

此处讨论自定义损失:Keras: clean implementation for multiple outputs and custom loss functions?

这是我在 Keras 中定义的模型在 Tensorboard 中的样子: Tensorboard

因此,Keras 确实只是 TensorFlow 的简化前端,因此您可以非常灵活地混合它们。我建议您检查 Keras model zoo 的源代码获取巧妙的解决方案和模式,使您可以使用 Keras 的干净 API 构建复杂的模型。

关于TensorFlow Graph 到 Keras 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54122211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com