Я выполняю сигмовидную функцию активации для каждой ячейки в сетке.
мой 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