Тензорное взвешенное среднее снижение - PullRequest
0 голосов
/ 01 апреля 2020

Используя тензор x и весовые коэффициенты w в качестве входных данных:

w = [1, 1, 0]
x = tf.constant(
    [[[1., 2.],
      [5., 3.],
      [6., 4.]],

     [[5., 7.],
      [10., 8.],
      [11., 9.]]]
)


Как кто-то может вывести взвешенный тензор less_mean y?

y = tf.constant(
    [[w[0]*[1., 2.],
      w[1]*[5., 3.],
      w[2]*[6., 4.]],

     [w[0]*[5., 7.],
      w[1]*[10., 8.],
      w[2]*[11., 9.]]]
)

Ожидаемый результат равен ( среднее значение рассчитывается путем деления суммы на сумму 1 в весах):

y = tf.constant(
    [[3., 2.5]],

     [[7.5, 7.5]]
)

1 Ответ

2 голосов
/ 01 апреля 2020

Проверьте этот код, он дает ответ, который вы хотите, решение было использовать map_fn несколько раз.

w = tf.constant([1.0, 1.0, 0.0])
x = tf.constant(
    [[[1., 2.],
      [5., 3.],
      [6., 4.]],

     [[5., 7.],
      [10., 8.],
      [11., 9.]]]
)

def apply_weight(x, w): 
    return tf.map_fn(mult, x)

def mult(a):
    transposed_a = tf.transpose(a)
    return tf.map_fn(mult_pars, transposed_a)

def mult_pars(b): 
    return tf.reduce_sum(w * b) / tf.reduce_sum(w)

print(apply_weight(x,w))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...