在 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 中的预训练 InceptionResNetV2 模型的不同层中找到激活的形状 - Tensorflow 2.0