2017-07-08 151 views
5

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

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 Functional API尝试了其他一些东西,但至今没有运气。

+0

做得好。我建议移动编辑部分的答案(在SO中回答自己的问题没有任何错误)并接受它。 – desertnaut

+0

@desertnaut会做! –

回答

5

得到它的工作。为了将来的参考,这是你需要实现它的方式。由于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))