我正在尝试执行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”
答案 0 :(得分:0)
基于this example,我解决了这个问题。实际上,我通过添加.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)