У меня есть тензор in
формы (batch_size, feature, steps) и я хочу получить выходной тензор out
той же формы путем среднего объединения по измерению по времени (шагам) с размером окна 2k+1
, то есть:
out[b,f,t] = 1/(2k+1) sum_{t'=t-k,...,t+k} in[b,f,t']
Для временных шагов, в которых нет k
предшествующих и последующих временных шагов, я хочу рассчитать среднее значение только для существующих временных шагов.
Однако последовательности в тензоре имеют переменную длину и дополняются нулями соответственно, длины последовательностей хранятся в другом тензоре (и я могу, например, создать маску с ними).
- Я знаю, что могу использовать
out = tf.nn.avg_pool1d(in, ksize=2k+1, strides=1, padding="SAME", data_format="NCW")
, который выполняет мою описанную операцию объединения, однако он не понимает, что мои последовательности заполнены нулями, и не позволяет мне передать маску с длинами последовательностей. - Там также
tf.keras.layers.GlobalAveragePooling1D
, но этот слой всегда объединяет всю последовательность и не позволяет мне указать размер окна.
Как выполнить такое операция с маскировкой и размером окна ?