Собственные потери Keras для соответствия нормальным параметрам распределения вызывают `Несовместимые формы`, когда batch_size> 1 - PullRequest
0 голосов
/ 19 марта 2020

В основном я хочу соответствовать параметрам нормального распределения. Таким образом, у меня есть выходной слой с размером два (среднее и стандартное отклонение). Затем у меня есть пользовательская функция потерь, подобная этой:

def mdn_cost(y_t, y_p):
    mu = y_p[:, 0]
    sigma = y_p[:, 1]

    dist = tf.distributions.Normal(loc=mu, scale=sigma)
    return tf.reduce_mean(-dist.log_prob(y_t))

Теперь у меня есть форма ввода и форма вывода (batch_size, 5). Когда я подгоняю модель, используя batch_size, то все работает. Но как только я увеличиваю размер пакета, я получаю исключение для несоответствия формы - то есть для размера пакета 10:

тензор потока. python .framework.errors_impl.InvalidArgumentError: Несовместимые формы: [10,5] против [10] [[{{потеря узла / нормальное_распределение_layer_1_loss / mdn_cost / Normal / log_prob / standardize / sub}}]]

Сначала я подумал, что могу это исправить, предоставив параметр оси для функции tf.reduce_mean, но это не работает. Затем я хотел l oop по каждому образцу в пакете, но кажется, что невозможно получить размер пакета из тензора.

Как я могу заставить это работать с размером пакета> 1?

...