4

我正在尝试执行 ak-max pooling以选择top-k具有 shape 的密集元素(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'

4

1 回答 1

5

基于这个例子,我解决了这个问题。事实上,我通过添加.values从 中获取张量值来解决问题tf.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)
于 2019-01-31T10:42:18.783 回答