训练Keras深度学习模型时异常的损失进展

时间:2018-06-23 17:57:45

标签: python tensorflow keras deep-learning

我正在尝试为图像分割任务训练深度学习模型。我正在使用的模型类似于U-Net架构,并转换归一化(介于0,1之间)浮点值的3-D矩阵,以输出表示每个体素是否属于当前分段的二进制概率掩码。该模型是使用keras构建的,如下所示:

inputs = Input(shape=patch_shape)

noise = GaussianNoise(2.0)(inputs) 
conv2 = Conv3D(32, (3, 3, 3), padding="same", activation="relu",data_format="channels_first")(noise)
conv2 = Conv3D(32, (3, 3, 3), padding="same", activation="relu",data_format="channels_first")(conv2)
pool2 = MaxPooling3D(pool_size=(2, 2, 2),data_format="channels_first")(conv2)

conv3 = Conv3D(64, (3, 3, 3), padding="same", activation="relu",data_format="channels_first")(pool2)
conv3 = Conv3D(64, (3, 3, 3), padding="same", activation="relu",data_format="channels_first")(conv3)
pool3 = MaxPooling3D(pool_size=(2, 2, 2),data_format="channels_first")(conv3)

conv4 = Conv3D(128, (3, 3, 3), padding="same", activation="relu",data_format="channels_first")(pool3)
conv4 = Conv3D(128, (3, 3, 3), padding="same", activation="relu",data_format="channels_first")(conv4)

up5 = UpSampling3D(size=(2, 2, 2), data_format="channels_first")(conv4)
up5 = concatenate([up5, conv3],axis=1)
conv5 = Conv3D(64, (3, 3, 3), padding="same", activation="relu",data_format="channels_first")(up5)
conv5 = Conv3D(64, (3, 3, 3), padding="same", activation="relu",data_format="channels_first")(conv5)

up6 = UpSampling3D(size=(2, 2, 2), data_format="channels_first")(conv5)
up6 = concatenate([up6, conv2],axis=1)
conv6 = Conv3D(32, (3, 3, 3), padding="same", activation="relu",data_format="channels_first")(up6)
conv6 = Conv3D(32, (3, 3, 3), padding="same", activation="relu",data_format="channels_first")(conv6)

conv8 = Conv3D(num_y_channel, (3, 3, 3), padding="same", activation='sigmoid',data_format="channels_first")(conv6)
model = Model(input=inputs, output=conv8)

我使用的自定义损失函数指定为:

def dice_coef_loss(y_true, y_pred):
y_true_f = K.flatten(y_true)
y_pred_f = K.flatten(y_pred)
intersection = K.sum(y_true_f * y_pred_f)
return -(2. * intersection) / (K.sum(y_true_f) + K.sum(y_pred_f))

输入补丁大小为40x40x32。我认为这项任务应该相对简单。但是,在训练期间,我得到以下意外行为: Odd loss progression

如果以前有人处理过这种行为,将不胜感激。我一直在检查输入内容等,但没有成功。

0 个答案:

没有答案