变长序列上的窗口平均汇集率

问题描述 投票:0回答:1

我有一个张量 in 的形状(batch_size, features, steps),并希望得到一个输出张量。out 通过在时间维度(步长)上平均汇集相同形状的数据,窗口大小为 2k+1,即。

out[b,f,t] = 1/(2k+1) sum_{t'=t-k,...,t+k} in[b,f,t']

对于时间步骤,其中没有 k 前后的时间步长,我只想计算现有时间步长的平均值。

然而,张量中的序列长度是可变的,并且相应地用零填充,我将序列长度存储在另一个张量中(例如,可以用它们创建一个掩码)。

我怎样才能执行这个操作呢?带遮罩和一个窗口大小?

python tensorflow moving-average pooling
1个回答
0
投票

据我所知,TensorFlow中没有这样的操作。但是,可以使用两种无遮蔽的池化操作的组合,这里用伪代码来写。

  1. 这里用伪代码写道: seq_mask顺序掩码 形状 (batch_size, time)
  2. in_pooled 张量 in 与不加掩饰的平均池
  3. seq_mask_pooled 是张量 seq_mask 在相同的池子大小的情况下,不加掩饰的平均池子。
  4. 获得张量 out 如下: 每一个元素 out,其中序列掩码为 0也应是 0. 其他元素都是通过除以 in_pooled 通过 seq_mask_pooled 元素方面(并不是说 seq_mask_pooled 从来没有 0 如果是 seq_mask 不是)。)

张量 out 例如,可以用以下方法计算 tf.math.divide_no_nan.

© www.soinside.com 2019 - 2024. All rights reserved.