tf.reduce_sum(lastconv,axis = 2)/ tf.reduce_sum(tf.cast(tf.greater(lastconv,0),tf.float32),axis = 2)用于代替均值池吗?

时间:2019-12-24 06:13:38

标签: python tensorflow machine-learning deep-learning

我正在处理眼动轨迹数据和卷积神经网络。 系统要求我使用tf.reduce_max(lastconv, axis=2)代替MaxPooling层,并使用tf.reduce_sum(lastconv,axis=2) / tf.reduce_sum(tf.cast(tf.greater(lastconv, 0), tf.float32), axis=2)代替MeanPooling层。

我有以下问题,对此我无法弄清楚。您可以让我理解,太好了。

  1. reduce_max函数的内部计算与常规的MaxPool层是否相同?两者的输出在维数上是不同的,为什么呢?我不太明白为什么?
  2. 为什么我们不能仅将tf.reduce_mean函数用于MeanPooling,就像将tf.reduce_max用于MaxPooling一样?
  3. tf.reduce_sum(lastconv,axis=2) / tf.reduce_sum(tf.cast(tf.greater(lastconv, 0), tf.float32), axis=2)这是如何在MeanPool上进行计算的?tf.reduce_mean有何不同?

我确定您可以告诉我,我不是很安静地了解reduce_max/min/mean/sum在输入张量时正在做什么,并且该模型从这些功能中获得了什么借鉴?

关于数据:数据的形状为(24,4,15,2,87236),其中24个是被摄体,4个温度变化和15个轨迹,2x87236是连续的视线(由于x轴和y-,所以2个轴)。我正在使用LeaveOneOut CV,在其中培训22个主题,并分别测试和验证1个主题。

创建训练,验证和测试集后,模型中的最终输入为(22,60 [4x15],2,87236),(1,60,2,87236)和(1,60, 2,87236)。

希望我能提供有关我所处困境的足够信息,以便您帮助我。预先感谢。

1 个答案:

答案 0 :(得分:0)

reduce_max在整个维度上取最大值,例如如果dim = 1,它将减少

[[1,2,3],
 [2,1,3],
 [1,4,0]]

[3,3,4]
另一方面,

最大池在某个移动窗口中查看最大值,例如,参见https://computersciencewiki.org/index.php/Max-pooling_/_Pooling。这里的主要区别是窗口的形状。在带有reduce_max的情况下,该窗口是张量的整个切片,最大池化是一个指定的矩形。这也会导致不同的维度(要真正理解这一点,您可以看看如果在reduce_max中使用keepdims = True会发生什么。)

您替换均值合并层似乎不采用算术平均值,而是除以正元素的数量(而不是通常的元素数量)。这可能就是为什么您不能使用reduce_mean的原因。