почему val_loss чрезвычайно увеличивается? но точность train и val достаточно хороша, и train_loss тоже уменьшается? - PullRequest
0 голосов
/ 02 ноября 2019

У меня есть модель Resnet 34 в Colab, которая учится на 8000 образцов для поезда и 2000 для проверки (7 классов), и у него есть выходные слои:

x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dropout(0.7)(x)
predictions = Dense(num_classes, activation= 'softmax')(x)
model = Model(inputs = base_model.input, outputs = predictions)   

разделение данных:

from google.colab import drive
drive.mount('/content/drive')
img_width, img_height = 160, 160
train_data_dir =( "/content/drive/My Drive/Skin_cancer_all/skin_cancer")


train_datagen = ImageDataGenerator(rescale=1./255,
    validation_split=0.2) # set validation split

train_generator = train_datagen.flow_from_directory(
    train_data_dir,
    target_size=(img_width, img_height),
    batch_size=8,  
    subset='training') # set as training data

validation_generator = train_datagen.flow_from_directory(
    train_data_dir, # same directory as training data
    target_size=(img_width, img_height),
    batch_size=8,
    subset='validation') # set as validation data

я использовал fit_Generator:

nb_epochs = 4
nb_train_samples = 8015
nb_validation_samples = 2000

model.compile(loss='categorical_crossentropy',
     optimizer='rmsprop',      
              metrics=['accuracy'])
    # but it used to start model.


history=model.fit_generator(train_generator,
                    steps_per_epoch=nb_train_samples,
                    epochs=nb_epochs
                        , validation_data=validation_generator
                        , validation_steps=nb_validation_samples)

я получаю из 4 эпох

Epoch 1/4
8014/8015 [============================>.] - ETA: 0s - loss: 1.2813 - acc: 0.6681Epoch 1/4
8015/8015 [==============================] - 4406s 550ms/step - loss: 1.2812 - acc: 0.6681 - val_loss: 2.0039 - val_acc: 0.6750
Epoch 2/4
8014/8015 [============================>.] - ETA: 0s - loss: 1.1651 - acc: 0.6749Epoch 1/4
8015/8015 [==============================] - 1872s 234ms/step - loss: 1.1651 - acc: 0.6749 - val_loss: 10.8641 - val_acc: 0.6720
Epoch 3/4
8014/8015 [============================>.] - ETA: 0s - loss: 1.0921 - acc: 0.6818Epoch 1/4
8015/8015 [==============================] - 1881s 235ms/step - loss: 1.0921 - acc: 0.6818 - val_loss: 87.3402 - val_acc: 0.6920
Epoch 4/4
8014/8015 [============================>.] - ETA: 0s - loss: 1.0539 - acc: 0.6947Epoch 1/4
8015/8015 [==============================] - 1898s 237ms/step - loss: 1.0538 - acc: 0.6947 - val_loss: 126.0995 - val_acc: 0.7140

не все выглядит хорошо, но моя val_loss становится слишком высокой, и я думаю, что это нечто большее, чем чрезмерноеуместно, если это мой набор данных, который был разделен на 2000 val и 8000 train, проблема была бы другой проблемой, потому что я никогда не видел этот val_loss раньше, и все же я тренирую тот же набор данных с другой моделью (resnet-50) раньше ине достиг такого же высокого значения val_loss (максимальное значение в resnet 50, которое я видел, было 5 после некоторых эпох)

, и я вижу, что до этого эффект over-fit val_acc все же улучшался, и потери в поездах также продолжают уменьшаться

Я просто хочу объяснение этому поведению! и что, если все в порядке, но val_loss и val_acc являются фиксированными эпохами броска?

...