如何在神经网络中进行“半”合并?

时间:2019-07-11 07:09:09

标签: tensorflow keras deep-learning

我想在我的网络中进行最大池化,像这样:

enter image description here

我的网络是一维的(您可以认为上面的示例是一个包含6个单词的句子,而每个单词都有3个嵌入)我不知道特征的长度(并非每个句子都具有相同的长度),所以我可以t在tf.layers.MaxPooling1D(https://www.tensorflow.org/api_docs/python/tf/layers/MaxPooling1D)中设置pool_size

我只想合并每半个特征(或半个句子),是否有任何函数或方法可以做到这一点?

1 个答案:

答案 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在字轴中添加一个元素以使其均匀。