Keras .flow_from_dataframe产生错误的验证损失/授权

时间:2019-05-10 12:47:24

标签: python tensorflow keras training-data

我目前正在Keras中开发用于图像识别的模型,我的图像存储在一个目录中,我得到了包含“真实标签”的数据框。在训练时使用.flow_from_dataframe和fit_generator会导致非常糟糕的验证丢失/准确性(随机)。

起初我想到过拟合,但问题似乎与.flow_from_dataframe方法有关。当我尝试flow_from_directory方法时,验证结果看起来要好得多,并且与Training的准确性非常匹配。因此,我猜该错误是由于验证数据与val_dataset的真实标签不匹配而产生的。

我正确使用了该方法吗?

fname

class_ID

fahrzeug_klasse

Dataframe containing Label information

training_set = train_datagen.flow_from_dataframe(dataframe=train_df, 
                                                 directory=r'C:\Users\aaa\Data\car_im',
                                                 x_col ='fname',
                                                 y_col = 'Marke',
                                                 target_size = (224, 224),
                                                 batch_size = 64,
                                                 color_mode='rgb',
                                                 class_mode = 'categorical')

test_set = test_datagen.flow_from_dataframe(dataframe=test_df, 
                                                 directory=r'C:\Users\aaa\Data\car_im',
                                                 x_col ='fname',
                                                 y_col = 'Marke',
                                                 target_size = (224, 224),
                                                 color_mode='rgb',
                                                 batch_size = 64,
                                                 class_mode = 'categorical',
                                                 shuffle=False)

    Found 9130 images belonging to 16 classes.
    Found 2283 images belonging to 16 classes.

....

transfer_model.fit_generator(training_set,
                         steps_per_epoch = 140,
                         epochs = 10,
                         validation_data = test_set,
                         validation_steps = 4)

Epoch 1/10
140/140 [==============================] - 57s 410ms/step - loss: 1.4191 - categorical_accuracy: 0.5396 - val_loss: 4.9266 - val_categorical_accuracy: 0.0078
Epoch 2/10
140/140 [==============================] - 55s 395ms/step - loss: 1.2635 - categorical_accuracy: 0.5911 - val_loss: 3.6264 - val_categorical_accuracy: 0.1211
Epoch 3/10
140/140 [==============================] - 56s 397ms/step - loss: 1.1892 - categorical_accuracy: 0.6148 - val_loss: 3.9831 - val_categorical_accuracy: 0.1836
Epoch 4/10
140/140 [==============================] - 55s 395ms/step - loss: 1.0753 - categorical_accuracy: 0.6498 - val_loss: 3.7372 - val_categorical_accuracy: 0.0469
Epoch 5/10
140/140 [==============================] - 56s 398ms/step - loss: 1.0013 - categorical_accuracy: 0.6723 - val_loss: 5.8073 - val_categorical_accuracy: 0.0273
Epoch 6/10
140/140 [==============================] - 55s 392ms/step - loss: 0.9312 - categorical_accuracy: 0.6884 - val_loss: 5.8702 - val_categorical_accuracy: 0.0039
Epoch 7/10
 84/140 [=================>............] - ETA: 21s - loss: 0.8100 - categorical_accuracy: 0.7367

0 个答案:

没有答案