如何获取在Keras中构建的神经网络的TensorFlow代码版本?

我已经使用Keras工作了一周左右。我知道Keras可以使用TensorFlow或Theano作为后端。在我的情况下,我使用的是TensorFlow。

所以我在想:有没有一种方法可以用Keras编写一个神经网络,然后打印出TensorFlow中的等效版本?

最小可行示例

例如,假设我编写了以下代码:

    # 创建序列模型
    model = Sequential()
    # 添加层
    model.add(Dense(100, input_dim = (10,), activation = 'relu'))
    model.add(Dense(1, activation = 'linear'))
    # 编译模型
    model.compile(optimizer = 'adam', loss = 'mse')
    # 拟合
    model.fit(Xtrain, ytrain, epochs = 100, batch_size = 32)
    # 预测
    ypred = model.predict(Xtest, batch_size = 32)
    # 评估
    result = model.evaluate(Xtest)

这段代码可能有错误,因为我刚开始,但我认为你明白我的意思。

我想做的是编写这段代码,运行它(或者甚至不运行),然后有一个函数或其他东西可以生成Keras用来执行所有这些计算的TensorFlow代码。


回答:

首先,让我们澄清一下问题中的一些语言。TensorFlow(和Theano)使用计算图来执行张量计算。所以,当你问是否有办法在TensorFlow中“打印出等效版本”,或者“生成TensorFlow代码”时,你真正问的是,如何从Keras模型中导出TensorFlow图?

正如Keras作者在这个线程中所说,

当你使用TensorFlow后端时,你的Keras代码实际上是在构建一个TF图。你可以直接获取这个图。

Keras只使用一个图和一个会话。

然而,他链接到一个现在已经过时的教程。但基本概念没有改变。

我们只需要做以下几件事:

  • 获取TensorFlow会话
  • 从TensorFlow会话中导出计算图

使用Keras实现

keras_to_tensorflow存储库包含了一个在iPython笔记本中如何从Keras导出模型以在TensorFlow中使用的简短示例。这基本上是使用TensorFlow。这不是一个写得清楚的示例,但作为资源抛出来。

使用TensorFlow实现

事实证明,我们实际上可以从TensorFlow本身获取Keras正在使用的TensorFlow会话,使用tf.contrib.keras.backend.get_session()函数。这做起来非常简单 – 只需导入并调用。这将返回TensorFlow会话。

一旦你有了TensorFlow会话变量,你可以使用SavedModelBuilder来保存你的计算图(TensorFlow文档中使用SavedModelBuilder的指南和示例)。如果你想知道SavedModelBuilder是如何工作的,它实际上给你什么,Github仓库中的SavedModelBuilder自述文件是一个很好的指南。

P.S. – 如果你计划大量使用TensorFlow + Keras的组合,可以看看tf.contrib.keras中可用的其他模块

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注