Почему функции потерь keras уменьшают размерность на единицу? - PullRequest
0 голосов
/ 29 апреля 2020

При вычислении потерь между y_true и y_pred функции потерь keras уменьшают размерность на единицу. Например, при обучении сети на парах серых изображений размером 64x64 с размером пакета = 8 форма y_true и y_pred будет (8, 64, 64). Функции потерь в керасе будут создавать тензор потерь с формой (8, 64), усредняющий по последнему измерению Я не понимаю, почему это было бы необходимо, все, что он делает, это усредняет потери по строкам изображения. Разве сети не нужно рассчитывать потери отдельно для каждого выходного значения (и, следовательно, сохранять форму)? Насколько я понимаю, обратное распространение данных учитывает индивидуальные потери каждого выходного значения по сравнению с целевым значением, а затем соответствующим образом обновляет предыдущие веса. Как это можно сделать, просто зная усредненную потерю каждой строки, а не каждого значения в отдельности? Вот фрагмент кода, который показывает поведение, которое я описал:

y_true = K.random_uniform([8,64,64])
y_pred = K.random_uniform([8,64,64])
c= mean_absolute_error(y_true,y_pred)
print(K.eval(tf.shape(c)))  # (8,64)
...