Я делаю сеть CNN, которая имеет N слоев conv
и M слоев conv-transpose
. Проходя эти N + M слоев CNN, цель состоит в том, чтобы преобразовать каждое изображение (height, width, 3 color channel)
в (height, width, nClasses)
, сохраняя при этом произвольную высоту и ширину изображения.
Допустим, в наборе данных содержится 6000 изображений, каждое из которых имеет разную высоту и ширину, поэтому вывод y_pred
подобен списку с произвольным размером для каждого изображения: [img1_out, img2_out, ... , img6000_out]
. Все image_out
имеют каналы "nClass", но каждый имеет свою собственную оригинальную / произвольную высоту и ширину, что означает, что форма y_pred
похожа на (6000, None, None, nClasses)
, где None
и None
являются заполнителями для height
и width
, которые не имеют фиксированных значений.
Теперь я хочу вычислить потери L2 между этими y_pred
и y_true
, тогда как y_true
- это данные Основной Истины с тем же измерением, что и y_pred
: (6000, None, None, nClasses)
.
def l2_loss(y_true, y_pred):
loss = 0
n = y_true.shape[0]
for j in range(n):
loss = loss + np.sum((y_true - y_pred[i, :, :, :])**2)
return loss/num_joints
и я хотел бы перевести это на бэкэнд-функции Keras, но не уверен (1) возможно ли иметь произвольные размеры в тензорах?
(2) как перевести for-loop
в моду broadcast
, как в бэкэнд-функциях Keras, когда форма не зафиксирована.
Спасибо за любые предложения!