在 Keras 中使用 TensorFlow 层

Posted

技术标签:

【中文标题】在 Keras 中使用 TensorFlow 层【英文标题】:Using Tensorflow Layers in Keras 【发布时间】:2017-12-12 23:21:45 【问题描述】:

我一直在尝试使用池化层 tf.nn.fractional_max_pool 在 Keras 中构建顺序模型。我知道我可以尝试在 Keras 中制作自己的自定义图层,但我正在尝试查看是否可以在 Tensorflow 中使用该图层。对于以下代码sn -p:

p_ratio=[1.0, 1.44, 1.44, 1.0]

model = Sequential()
model.add(ZeroPadding2D((2,2), input_shape=(1, 48, 48)))
model.add(Conv2D(320, (3, 3), activation=PReLU()))
model.add(ZeroPadding2D((1,1)))
model.add(Conv2D(320, (3, 3), activation=PReLU()))
model.add(InputLayer(input_tensor=tf.nn.fractional_max_pool(model.layers[3].output, p_ratio)))

我知道error。我用Input 而不是InputLayer 和Keras 功能API 尝试了其他一些东西,但到目前为止还没有运气。

【问题讨论】:

干得好。我建议将 EDIT 部分移到答案中(在 SO 中回答您自己的问题并没有错)并接受它。 @desertnaut 可以! 【参考方案1】:

让它工作。为了将来参考,这就是您需要实现它的方式。由于 tf.nn.fractional_max_pool 返回 3 个张量,因此您只需获取第一个:

model.add(InputLayer(input_tensor=tf.nn.fractional_max_pool(model.layers[3].output, p_ratio)[0]))

或者使用 Lambda 层:

def frac_max_pool(x):
    return tf.nn.fractional_max_pool(x,p_ratio)[0]

模型实现为:

model.add(Lambda(frac_max_pool))

【讨论】:

你知道用函数式 API 做这件事的方法吗?

以上是关于在 Keras 中使用 TensorFlow 层的主要内容,如果未能解决你的问题,请参考以下文章

如何在Tensorflow 2.x Keras自定义层中使用多个输入?

具有 padding='SAME' 的 Tensorflow/Keras Conv2D 层表现异常

如何向Keras的层喂入数据

使用tensorflow和Keras的初级教程

如何在 Keras 中的预训练 InceptionResNetV2 模型的不同层中找到激活的形状 - Tensorflow 2.0

Keras 输入层和 TensorFlow 占位符之间的区别