Хорошо ли, чтобы точность валидации не менялась в эпоху? - PullRequest
0 голосов
/ 08 апреля 2020

Мои эпохи приведены ниже. Моя точность проверки была жонглированием между 0,8571 и 0,8119 в предыдущих прогонах, в то время как большую часть времени я получал 0,8571. Я сомневаюсь, что это нормально, так как это было с первой эпохи. Я работаю над набором данных IMFDB и внедрил обучение с использованием модели re snet. Я также сделал увеличение данных с помощью ImageDataGenerator. Я также пытался использовать различные оптимизаторы.

Эпохи:

Epoch 1/30
336/336 [==============================] - 111s 330ms/step - loss: 0.3437 - accuracy: 0.8635 - val_loss: 0.3734 - val_accuracy: 0.8571
Epoch 2/30
336/336 [==============================] - 121s 361ms/step - loss: 0.3408 - accuracy: 0.8647 - val_loss: 0.3731 - val_accuracy: 0.8571
Epoch 3/30
336/336 [==============================] - 121s 360ms/step - loss: 0.3390 - accuracy: 0.8655 - val_loss: 0.3773 - val_accuracy: 0.8571
Epoch 4/30
336/336 [==============================] - 120s 356ms/step - loss: 0.3371 - accuracy: 0.8668 - val_loss: 0.3726 - val_accuracy: 0.8571
Epoch 5/30
336/336 [==============================] - 125s 373ms/step - loss: 0.3357 - accuracy: 0.8669 - val_loss: 0.3720 - val_accuracy: 0.8571
Epoch 6/30
336/336 [==============================] - 118s 352ms/step - loss: 0.3334 - accuracy: 0.8677 - val_loss: 0.3803 - val_accuracy: 0.8571
Epoch 7/30
336/336 [==============================] - 120s 356ms/step - loss: 0.3329 - accuracy: 0.8674 - val_loss: 0.3735 - val_accuracy: 0.8571
Epoch 8/30
109/336 [========>.....................] - ETA: 1:09 - loss: 0.3309 - accuracy: 0.8690

Моя модель:

model = tf.keras.applications.ResNet50(weights='imagenet', include_top=False, input_shape=(64, 64, 3))


for layer in model.layers[:-4]:
    layer.trainable=False
for layer in model.layers[-4:]:
    layer.trainable=True

av1 = layers.GlobalMaxPooling2D()(model.output)
fc1 = Dense(512, activation='relu')(av1)
drp0=Dropout(0.3)(fc1)
fc2 = Dense(256, activation='relu')(drp0)
drp1=Dropout(0.35)(fc2)
fc3 = Dense(128, activation='relu')(drp1)
drp2=Dropout(0.4)(fc3)
bat_norm=layers.BatchNormalization()(drp2)
fc4 = Dense(68, activation='relu')(bat_norm)
drp3=Dropout(0.25)(fc4)
fc5 = Dense(34, activation='relu')(drp3)
out = Dense(7, activation='softmax')(fc5)
tl_model = Model(inputs=model.input,outputs=out)

from tensorflow.keras.preprocessing.image import ImageDataGenerator

train_datagen = ImageDataGenerator(
        rescale=1./255,
        shear_range=0.2,
        zoom_range=0.2,
        horizontal_flip=True)

test_datagen = ImageDataGenerator(rescale=1./255)

training_set = train_datagen.flow_from_directory(
        'train_test_dataset/Train',
        target_size=(64, 64),    
        batch_size=64,
        class_mode='categorical')

test_set = test_datagen.flow_from_directory(
        'train_test_dataset/Test',
        target_size=(64, 64),
        batch_size=64,
        class_mode='categorical')

tl_model.compile(optimizer = opt.Adam(lr=0.001), loss=tf.keras.losses.BinaryCrossentropy(), metrics = ['accuracy'])

tl_model.fit_generator(training_set, steps_per_epoch=len(training_set), epochs=30, validation_data=test_set, validation_steps=len(test_set))
...