Я выполняю функцию активации сигмовидной формы для каждой ячейки в Grid.
мой y_true является тензорным с [ColIndex, RowIndex, Outcome], что означает, что для каждого обучающего экземпляра у меня есть ровно 1 ячейка с выходным значением.
Я хочу рассчитать потери при обучении только для 1-й ячейки в y_true, то есть мне нужно проиндексировать выходные данные сетки в эту 1-ю ячейку и вычислить логарифмические потери, и использовать эту 1 потеря клеток при обучении.
Я искал решения, но не нашел его. В настоящее время мне удалось создать потерю, которую модель тренирует, но потери почти всегда равны 0, и я получите странные результаты.
моя потеря функция:
Код: Выделить всё
def custom_target_location_loss(y_true, y_pred):
# Extract column indices, row indices, and values
col_indices = tf.cast(y_true[:,0], tf.int32) # Column indices
row_indices = tf.cast(y_true[:,1], tf.int32) # Row indices
values = tf.cast(y_true[:, 2], tf.float32) # Binary labels (0 or 1)
batch_size = tf.shape(y_pred)[0]
batch_indices = tf.range(batch_size)
channel_indices = tf.zeros_like(batch_indices, dtype=tf.int32)
indices = tf.stack([batch_indices,row_indices, col_indices,channel_indices], axis=1)
y_pred_cell = tf.gather_nd(y_pred, indices)
loss = tf.keras.losses.binary_crossentropy(values, y_pred_cell)
# Return the mean loss across the batch
return tf.reduce_mean(loss)
Подробнее здесь: https://stackoverflow.com/questions/793 ... s-function