【发布时间】:2021-03-07 20:38:41
【问题描述】:
我正在使用 TensorFlow 2 和 Keras 训练 3D CNN (U-Net)。我对得到的损失曲线感到非常困惑:
图例:bs=batch_size, eager=在急切模式下执行
模型开始学习得很好,然后在第一个 epoch 的中间它突然停止并且只返回空的分割(模型的预测输出)。在模型训练时,我通过将图像/预测保存到磁盘来进行检查。从 ~15k 开始(红色曲线,~5k 绿色),只有空白输出(全为零,始终如一)。图像和真实的分割(掩码)看起来还不错,即使在模型行为发生变化之后也是如此。
损失函数是加权交叉熵,我单独查了一下:
def weighted_cross_entropy(weight_alpha=0.9):
def _loss(y_true, y_pred):
y_true = K.cast(y_true, y_pred.dtype)
weights = y_true * (weight_alpha/(1.-weight_alpha)) + 1.
bce = K.binary_crossentropy(y_true, y_pred, from_logits=False)
weighted_loss = K.mean(bce * weights)
return weighted_loss
return _loss
优化器是tf.keras.optimizers.Adam(learning_rate=1e-4)。
数据集来自tfrecords,是一个tf.Dataset:
ds = tf.data.TFRecordDataset(tfrecords)
ds = ds.map(load_image_train, num_parallel_calls=tf.data.experimental.AUTOTUNE)
ds = ds.shuffle(100)
ds = ds.batch(batch_size)
有什么想法吗?
【问题讨论】:
标签: tensorflow keras tensorboard loss-function