Skip to main content
 首页 » 编程设计

python之如何获取 Keras 内置神经网络的 Tensorflow 代码版本

2024年08月19日31emanlee

我使用 Keras 已经有一周左右的时间了。我知道 Keras 可以使用 TensorFlow 或 Theano 作为后端。就我而言,我使用的是 TensorFlow。

所以我想知道:有没有办法在 Keras 中编写神经网络,然后在 TensorFlow 中打印出等效版本?

MVE

例如假设我写

    #create seq model 
    model = Sequential() 
    # add layers 
    model.add(Dense(100, input_dim = (10,), activation = 'relu')) 
    model.add(Dense(1, activation = 'linear')) 
    # compile model 
    model.compile(optimizer = 'adam', loss = 'mse') 
    # fit 
    model.fit(Xtrain, ytrain, epochs = 100, batch_size = 32) 
    # predict 
    ypred = model.predict(Xtest, batch_size = 32) 
    # evaluate 
    result = model.evaluate(Xtest) 

这段代码可能是错误的,因为我刚刚开始,但我想你明白了。

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

请您参考如下方法:

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

正如 Keras 作者在 this thread 中所述,

When you are using the TensorFlow backend, your Keras code is actually building a TF graph. You can just grab this graph.

Keras only uses one graph and one session.

但是,他链接到 a tutorial whose details are now outdated .但基本概念没有改变。

我们只需要:

  • 获取 TensorFlow session
  • 从 TensorFlow session 导出计算图

用 Keras 做

keras_to_tensorflow存储库包含一个简短示例,说明如何从 Keras 导出模型以便在 iPython 笔记本中的 TensorFlow 中使用。这基本上是使用 TensorFlow。这不是一个写得很清楚的例子,但是把它作为一种资源扔在那里。

用 TensorFlow 做

事实证明,我们实际上可以从 TensorFlow 本身获取 Keras 使用的 TensorFlow session ,使用 tf.contrib.keras.backend.get_session()功能。做起来非常简单 - 只需导入和调用。这将返回 TensorFlow session 。

获得 TensorFlow session 变量后,您可以使用 SavedModelBuilder 保存计算图 (guide + example to using SavedModelBuilder in the TensorFlow docs)。如果您想知道 SavedModelBuilder 是如何工作的以及它实际为您提供了什么,SavedModelBuilder Readme in the Github repo是一个很好的指南。

附言- 如果您计划大量结合使用 TensorFlow + Keras,请查看 tf.contrib.keras 中提供的其他模块