Странный результат потери для пользовательской потери Keras - PullRequest
0 голосов
/ 11 декабря 2018

Я попытался настроить функцию потери очков в Керасе.

Игра в кости - это показатель, значение которого находится в диапазоне от 0 до 1. Я использую 1 кубик в качестве функции потери.Таким образом, результат также должен быть между 0 и 1, но когда я тренирую модель, он больше, чем 1. Это так странно.

Вот функция потери кубика.

def dice_coef(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.0 * intersection + 1.0) / (K.sum(y_true_f) + K.sum(y_pred_f) + 1.0)
def dice_coef_loss(y_true, y_pred):
    return 1-dice_coef(y_true, y_pred)

И часть функции модели.

def UResNet34(input_shape=(1, 512, 512), classes=1, decoder_filters=16, decoder_block_type='upsampling',
                   encoder_weights=None, input_tensor=None, activation='sigmoid', **kwargs):

    backbone = ResnetBuilder.build_resnet_34(input_shape=input_shape,input_tensor=input_tensor)

    skip_connections = list([97,54,25])  # for resnet 34
    model = build_unet(backbone, classes, decoder_filters,
                   skip_connections, block_type=decoder_block_type,
                   activation=activation, **kwargs)
    model.name = 'u-resnet34'
    sgd = SGD(lr=0.01, decay=0.0005, momentum=0.9, nesterov=False)
    model.compile(optimizer=sgd, loss=dice_coef_loss, metrics=[dice_coef])
    return model

Я ссылаюсь на модель с здесь .

и обучаем модель по коду

model = UResNet34()
cp = ModelCheckpoint(model_h5_path, monitor='val_loss', save_best_only=True, 
save_weights_only=True, verbose=0, mode='auto')
history = model.fit(
    x_train, yy_train,
    validation_data=(x_test, yy_test), 
    epochs=epochs,
    batch_size=batch_size,
    verbose=1,
    callbacks=[cp])

Процесс обучения.

Train on 520 samples, validate on 55 samples
Epoch 1/2000
520/520 [==============================] - 27s 52ms/step - loss: 2.6956 - dice_coef: 0.0075 - val_loss: 2.7011 - val_dice_coef: 0.0012
Epoch 2/2000
520/520 [==============================] - 15s 28ms/step - loss: 2.6933 - dice_coef: 0.0082 - val_loss: 2.6993 - val_dice_coef: 0.0014
Epoch 3/2000
520/520 [==============================] - 15s 28ms/step - loss: 2.6907 - dice_coef: 0.0091 - val_loss: 2.6972 - val_dice_coef: 0.0017
Epoch 4/2000
520/520 [==============================] - 15s 28ms/step - loss: 2.6864 - dice_coef: 0.0117 - val_loss: 2.6951 - val_dice_coef: 0.0021
Epoch 5/2000
520/520 [==============================] - 15s 28ms/step - loss: 2.6829 - dice_coef: 0.0136 - val_loss: 2.6934 - val_dice_coef: 0.0022

Потеря и val_loss странные.Что-то не так с функцией потерь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...