我正在处理眼动轨迹数据和卷积神经网络。
系统要求我使用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层。
我有以下问题,对此我无法弄清楚。您可以让我理解,太好了。
tf.reduce_mean
函数用于MeanPooling,就像将tf.reduce_max
用于MaxPooling一样?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)。
希望我能提供有关我所处困境的足够信息,以便您帮助我。预先感谢。
答案 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的原因。