Потеря кераса зависит от того, как передается информация

Я довольно новичок в 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-х измерения? Как это относится к этой информации?

Я чувствую, что должен понять это, прежде чем приступить к выполнению собственных сложных функций потери, любая информация, которую вы мне предоставите, будет принята с благодарностью.

Ура,

Майкл

0 ответов

Другие вопросы по тегам