在tensorflow代码中使用keras层

Mer*_*896 12 python keras tensorflow

假设我有一个简单的神经网络,其输入层和在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)
Run Code Online (Sandbox Code Playgroud)

我遗漏了网络定义的任何其他部分features.

如果我想在此卷积层之后添加LSTM层,我将必须使卷积层TimeDistributed(以keras的语言),然后将TimeDistributed层的输出放入LSTM.

Tensorflow提供对tf.keras.layers中 keras层的访问.我可以直接在tensorflow代码中使用keras层吗?如果是这样,怎么样?我是否也可以使用tf.keras.layers.lstm来实现LSTM层?

所以一般来说:纯粹的张量流代码和keras代码的混合是否可能,我可以使用tf.keras.layers吗?

col*_*tor 12

是的,这是可能的.

导入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)
Run Code Online (Sandbox Code Playgroud)

现在,在您的模型定义中,您可以混合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)
Run Code Online (Sandbox Code Playgroud)

这个答案来自Francois Chollet 的Keras博客文章.