tf.reduce_sum(lastconv,axis=2) / tf.reduce_sum(tf.cast(tf.greater(lastconv, 0), tf.float32), axis=2) 可以替代平均池化吗?

我正在处理眼动轨迹数据和卷积神经网络。我被要求使用 tf.reduce_max(lastconv, axis=2) 来替代最大池化层,并使用 tf.reduce_sum(lastconv,axis=2) / tf.reduce_sum(tf.cast(tf.greater(lastconv, 0), tf.float32), axis=2) 来替代平均池化层。

我有一些问题没有得到清晰的解答。如果您能帮我理解,将不胜感激。

  1. reduce_max 函数的内部计算与传统的最大池化层是否相同?两者的输出在维度上不同,为什么会这样?我不太理解其中的原因?
  2. 为什么我们不能直接使用 tf.reduce_mean 函数来进行平均池化,就像使用 tf.reduce_max 来进行最大池化一样?
  3. tf.reduce_sum(lastconv,axis=2) / tf.reduce_sum(tf.cast(tf.greater(lastconv, 0), tf.float32), axis=2) 这个表达式在计算上是如何作为平均池化的?它与 tf.reduce_mean 有什么不同?

我相信您能看出我对 reduce_max/min/mean/sum 如何处理输入张量,以及模型从这些函数中学到什么不太理解。

关于数据:数据的形状是 (24,4,15,2,87236),其中24是受试者,4是温度变化,15是试验次数,2×87236是连续的眼动数据(2是因为有x轴和y轴)。我使用的是留一法交叉验证,其中在22个受试者上训练,并在每个受试者上测试和验证。

在创建训练、验证和测试集后,输入到模型中的最终数据形状分别是 (22,60[4×15],2,87236) , (1,60,2,87236) 和 (1,60,2,87236)。

我希望我提供了足够的信息来帮助您理解我所面临的困境。提前感谢您的帮助。


回答:

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 的原因。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注