我使用 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 中提供的其他模块
