使用flow_from_directory时出现异常的损失和指标值

我在尝试使用以下自定义损失函数和指标在keras中训练一个用于图像分割的UNet模型:

def dice_coef(y_true, y_pred):
    '''
    参数: y_true -- 对应RGB图像的标记掩码
          y_pred -- RGB图像的预测掩码
    返回: dice_coeff -- 一个在0到1之间衡量精确度和召回率的指标。越接近1越好。
    引用(MIT许可证): https://github.com/jocicmarko/
                            ultrasound-nerve-segmentation/blob/
                            master/train.py
    '''
    y_true_f = K.flatten(y_true)
    y_pred_f = K.flatten(y_pred)
    intersection = K.sum(y_true_f * y_pred_f)
    smooth = 1.0
    return (2.0*intersection+smooth)/(K.sum(y_true_f)+K.sum(y_pred_f)+smooth)

def dice_coef_loss(y_true, y_pred):
    '''
    参数: y_true -- 对应RGB图像的标记掩码
          y_pred -- RGB图像的预测掩码
    返回: 1 - dice_coeff -- dice系数的否定,在0到1之间。越接近0越好。
    引用(MIT许可证): https://github.com/jocicmarko/
                            ultrasound-nerve-segmentation/blob/
                            master/train.py
    '''
    return 1-dice_coef(y_true, y_pred)

当在RAM中加载一部分图像进行训练时,一切正常。然而,当使用flow_from_directoryfit_generator从整个数据集逐步加载图像批次时,我得到了负损失和大于1的dice系数。以下是生成器的代码:


回答:

感谢@今天的见解,我意识到图像和掩码都被加载为值范围从0到255的数组。所以我添加了一个预处理函数来对它们进行归一化,这解决了我的问题:

image_datagen = ImageDataGenerator(preprocessing_function=lambda x: x/255)
mask_datagen = ImageDataGenerator(preprocessing_function=lambda x: x/255)

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注