В основном я хочу соответствовать параметрам нормального распределения. Таким образом, у меня есть выходной слой с размером два (среднее и стандартное отклонение). Затем у меня есть пользовательская функция потерь, подобная этой:
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?