假设我有一个简单的神经网络,其输入层和在tensorflow中编程的单个卷积层:
# Input Layer
input_layer = tf.reshape(features["x"], [-1, 28, 28, 1])
# Convolutional Layer #1
conv1 = tf.layers.conv2d(
inputs=input_layer,
filters=32,
kernel_size=[5, 5],
padding="same",
activation=tf.nn.relu)
我遗漏了features
的网络定义的任何其他部分。
如果我想在此卷积层之后添加LSTM层,我将必须使用卷积层TimeDistributed(使用keras语言),然后将TimeDistributed层的输出放入LSTM。
Tensorflow可以访问tf.keras.layers中的keras图层。我可以直接在tensorflow代码中使用keras层吗?如果是这样,怎么样?我是否也可以使用tf.keras.layers.lstm来实现LSTM层?
所以一般来说:纯粹的张量流代码和keras代码的混合是否可能,我可以使用tf.keras.layers吗?
答案 0 :(得分:10)
是的,这是可能的。
导入TensorFlow和Keras并将您的Keras会话链接到TF:
import tensorflow as tf
import keras
from keras import backend as K
tf_sess = tf.Session()
K.set_session(tf_sess)
现在,在您的模型定义中,您可以混合使用TF和Keras图层:
# Input Layer
input_layer = tf.reshape(features["x"], [-1, 28, 28, 1])
# Convolutional Layer #1
conv1 = tf.layers.conv2d(
inputs=input_layer,
filters=32,
kernel_size=[5, 5],
padding="same",
activation=tf.nn.relu)
# Flatten conv output
flat = tf.contrib.layers.flatten(conv1)
# Fully-connected Keras layer
layer2_dense = keras.layers.Dense(128, activation='relu')(flat)
# Fully-connected TF layer (output)
output_preds = tf.layers.dense(layer2_dense, units=10)
这个答案来自Francois Chollet的a Keras blog帖子。