如何选择keras密集层的前k个元素?

时间:2019-01-31 10:14:19

标签: python-3.x keras-layer max-pooling

我正在尝试执行k-max pooling以便选择top-k形状为(None, 30)的密集元素。我尝试了MaxPooling1D层,但是它不起作用,因为keras池层至少需要2d输入形状。我正在使用以下Lambda层,但出现以下错误:

layer_1.shape
(None, 30)
layer_2 = Lambda(lambda x: tf.nn.top_k(x, k=int(int(x.shape[-1])/2),
                                                sorted=True, 
                                                name="Top_k_final"))(layer_1)
  

错误:文件   “ /usr/local/lib/python3.5/dist-packages/keras/engine/base_layer.py”,   第474行,在致电中       output_shape = self.compute_output_shape(input_shape)文件“ /usr/local/lib/python3.5/dist-packages/keras/layers/core.py”,行   652,在compute_output_shape中       返回K.int_shape(x)文件“ /usr/local/lib/python3.5/dist-packages/keras/backend/tensorflow_backend.py”,   第591行,int_shape       返回元组(x.get_shape()。as_list())AttributeError:“ TopKV2”对象没有属性“ get_shape”

1 个答案:

答案 0 :(得分:0)

基于this example,我解决了这个问题。实际上,我通过添加.valuestf.nn.top_k获得张量值来解决了这个问题,如下所示。但是我不确定我的解决方案是否正确。

layer_2 = Lambda(lambda x: tf.nn.top_k(x, k=int(int(x.shape[-1])/2),
                                                sorted=True, 
                                                name="Top_k_final").values)(layer_1)