I am training a convolutional neural network which predicts one label. I want to ignore loss resulted from some predictions during training. I wrote a custom binary cross entropy loss function for this. I want to ignore the loss when y_true=999.
def custom_loss_mask(y_true, y_pred):
y_true = tf.cast(y_true, dtype=y_pred.dtype)
idx_ = (y_true!=999)
idx = tf.cast(idx_, dtype=y_pred.dtype)
loss = tf.keras.losses.binary_crossentropy(y_true*idx, y_pred*idx)
return loss
I tested out the model for 10 epochs but the loss function does not seem to be working ie., the val_loss is not changing over the epochs and I am getting a 0.5 AUC (Area under ROC curve).
Epoch 1/10
26/26 [==============================] - 11s 179ms/step - loss: 1.3587 - accuracy: 0.9106 - val_loss: 1.2569 - val_accuracy: 0.9185
Epoch 2/10
26/26 [==============================] - 4s 159ms/step - loss: 1.2572 - accuracy: 0.9185 - val_loss: 1.2569 - val_accuracy: 0.9185
Epoch 3/10
26/26 [==============================] - 4s 158ms/step - loss: 1.2572 - accuracy: 0.9185 - val_loss: 1.2569 - val_accuracy: 0.9185
Epoch 4/10
26/26 [==============================] - 4s 158ms/step - loss: 1.2572 - accuracy: 0.9185 - val_loss: 1.2569 - val_accuracy: 0.9185
Epoch 5/10
26/26 [==============================] - 4s 158ms/step - loss: 1.2572 - accuracy: 0.9185 - val_loss: 1.2569 - val_accuracy: 0.9185
Epoch 6/10
26/26 [==============================] - 4s 158ms/step - loss: 1.2572 - accuracy: 0.9185 - val_loss: 1.2569 - val_accuracy: 0.9185
Epoch 7/10
26/26 [==============================] - 4s 159ms/step - loss: 1.2572 - accuracy: 0.9185 - val_loss: 1.2569 - val_accuracy: 0.9185
Epoch 8/10
26/26 [==============================] - 4s 159ms/step - loss: 1.2572 - accuracy: 0.9185 - val_loss: 1.2569 - val_accuracy: 0.9185
Epoch 9/10
26/26 [==============================] - 4s 160ms/step - loss: 1.2572 - accuracy: 0.9185 - val_loss: 1.2569 - val_accuracy: 0.9185
Epoch 10/10
26/26 [==============================] - 4s 159ms/step - loss: 1.2572 - accuracy: 0.9185 - val_loss: 1.2569 - val_accuracy: 0.9185
testing
**********Testing model**********
training AUC : 0.5
testing AUC : 0.5
Some more information on the experiment, I am using an Adam optimizer with 1e-4 learning rate. I am using a data generator for training the model and I a training my model with model.fit_generator().
Does anyone see any mistakes regarding this?
If yes, what might be the possible fix?