我想在我的网络中进行最大池化,像这样:
我的网络是一维的(您可以认为上面的示例是一个包含6个单词的句子,而每个单词都有3个嵌入)我不知道特征的长度(并非每个句子都具有相同的长度),所以我可以t在tf.layers.MaxPooling1D(https://www.tensorflow.org/api_docs/python/tf/layers/MaxPooling1D)中设置pool_size
我只想合并每半个特征(或半个句子),是否有任何函数或方法可以做到这一点?
答案 0 :(得分:0)
(注意:我先前的回答有一个错误,可能会导致不正确的共享窗口。这个应该没问题。)
这是用“低级”张量流编写的一种可能方式。您可能需要将其包装在keras层中(或仅使用Lambda
)以将其集成到模型中。
x = ... # input, shape batch x n_words x features
x = tf.reshape(x, [batch, 2, n_words//2, features]) # need to get these dimensions, can get them from tf.shape(x) as well
x = tf.reduce_max(x, axis=2)
这将实现最大池化;例如,您还可以使用reduce_mean
进行平均池化。
这有一个局限性,即如果n_words
为奇数,它将不起作用。在这种情况下,您可能必须检查它是否存在,并使用tf.pad
在字轴中添加一个元素以使其均匀。