Потеря кераса зависит от того, как передается информация
Я довольно новичок в keras и DL и пытаюсь создать функцию потерь, но у меня есть вопросы о том, как данные из моей сети передаются через y_pred и y_true функции потерь.
Например, у моей сети есть 3 разных выхода, вот один:
SEC5 = merge( [SEC1_up, SEC2_up, SEC3_up, SEC4_up], mode='concat', concat_axis=1 )
SEC5 = Convolution2D( 2,1,1, subsample=(1, 1), border_mode='same', activation="sigmoid" )( SEC5 )
SEC5 теперь является двухканальным тензором, который предсказывает ребра в одном канале и не ребра в другом.
Моя модель создана со следующей строкой:
model = Model( input=inputs, output=[Final, ILLP2, SEC1, SEC2, SEC3, SEC4, SEC5] )
Где я выполняю двоичную кросс-энтропию в Final, квадратные потери в ILLP2, а затем настраиваемые потери для каждого из уровней SEC. При создании нестандартной потери я столкнулся с тем, чего не понимаю. Как несколько канальных слоев (например, SEC5) передаются в функцию потерь? Это особенно важно для потери краев, так как мне нужно вычислить количество ребер в слое ребер и количество не ребер в слое без ребер.
Чего я не понимаю, так это фактической переменной в функции потерь (y_true и y_pred), когда я делаю это:
print 'y_true data'
print y_true.ndim
print y_true.type
print 'y_pred data'
print y_pred.ndim
print y_pred.type
Я получаю следующие значения:
y_true data
2
TensorType(float32, matrix)
y_pred data
2
TensorType(float32, matrix)
И это то, где я действительно запутался во всем. Насколько я понимаю, тензорные типы матрицы могут быть только 2-х мерными, но у меня по сути есть 3-х измерения? Как это относится к этой информации?
Я чувствую, что должен понять это, прежде чем приступить к выполнению собственных сложных функций потери, любая информация, которую вы мне предоставите, будет принята с благодарностью.
Ура,
Майкл