简体   繁体   English

Keras评估生成器准确率高,但每个类的准确率低

[英]Keras evaluate_generator accuracy high, but accuracy of each class is low

I am using Keras ImageDataGenerator to load and train a model on 101-food-dataset.我正在使用 Keras ImageDataGenerator在 101-food-dataset 上加载和训练模型。 I am using the same split for validation and test .我使用相同的拆分进行验证测试 I also use sklearn.metrics.confusion_matrix to calculate accuracy for each class.我还使用sklearn.metrics.confusion_matrix来计算每个类的准确度。

After training, when I use evaluate_generator , I get high accuracy.训练后,当我使用evaluate_generator 时,我获得了很高的准确性。 But the accuracy of individual classes is very low.但是个别类的准确率很低。 What mistake am I making?我犯了什么错误?

train_generator = train_datagen.flow_from_directory(
  train_data_dir,
  target_size=(img_height, img_width),
  batch_size=batch_size,
  class_mode='categorical',
  subset='training')

validation_generator = train_datagen.flow_from_directory(
  train_data_dir,
  target_size=(img_height, img_width),
  batch_size=batch_size,
  class_mode='categorical',
  subset='validation')

history = model.fit_generator(train_generator,
                steps_per_epoch = train_generator.samples // batch_size,
                validation_data=validation_generator,
                validation_steps=validation_generator.samples // batch_size,
                epochs=epochs,
                verbose=1,
                callbacks=[csv_logger, checkpointer])

loss, acc = model.evaluate_generator(validation_generator, steps=3, verbose=0)
print('loss: ', loss, 'accuracy: ', acc) # loss:  0.4534463981787364 accuracy:  0.8333333

y_pred = model.predict_generator(validation_generator)
y_pred = np.array([np.argmax(x) for x in y_pred])
y_test = validation_generator.classes

cm = confusion_matrix(y_test, y_pred)
cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
cm.diagonal()
acc_each_class = cm.diagonal()

print('accuracy of each class: \n')
for i in range(len(labels)):
  print(labels[i], ' : ', acc_each_class[i])
print('\n')

'''
accuracy of each class: 

cannoli  :  0.085
dumplings  :  0.065
edamame  :  0.1
falafel  :  0.125
french_fries  :  0.12
grilled_cheese_sandwich  :  0.13
hot_dog  :  0.075
seaweed_salad  :  0.085
tacos  :  0.105
takoyaki  :  0.135
'''

I investigated your issue I think this is due to that you have more than one worker opening the files numerous of times, to fix this issue make sure to set :我调查了您的问题,我认为这是由于您有多个工作人员多次打开文件,要解决此问题,请确保设置:

shuffle = false洗牌 = 假

pickle_safe = True pickle_safe = 真

workers = 1工人 = 1

or only evaluate your model via evaluate_generator or predict_generator :或仅通过evaluate_generator 或predict_generator 评估您的模型:

validation_generator2 = test_datagen.flow_from_directory(
    validation_data_dir,
    target_size=(img_height, img_width),
    batch_size=batch_size,
    class_mode='binary', shuffle=False)

score = model.evaluate_generator(validation_generator, nb_validation_samples/batch_size, workers=12)

scores = model.predict_generator(validation_generator2, nb_validation_samples/batch_size, workers=12)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 为什么 Keras 中 fit_generator 的精度、evaluate_generator 的精度和自定义精度不同? - Why are accuracy of fit_generator, accuracy of evaluate_generator and custom accuracy different in Keras? Keras评估_生成器准确率和scikit学习accuracy_score不一致 - Keras evaluate_generator accuracy and scikit learn accuracy_score inconsistent Keras:如何评估模型准确性(evaluate_generator 与 predict_generator)? - Keras: how to evaluate model accuracy (evaluate_generator vs. predict_generator)? 为什么fit_generator的准确性与Keras中的valuate_generator的准确性不同? - Why is accuracy from fit_generator different to that from evaluate_generator in Keras? keras -valuate_generator在相同的训练数据下产生不同的准确率 - keras - evaluate_generator yielding different accuracy rates with same training data 使用evaluate_generator可获得0%的准确率,但在使用相同数据进行培训时,准确率为75% - 具体情况如何? - 0% accuracy with evaluate_generator but 75% accuracy during training with same data - what is going on? Keras的回调Evaluation_generator - Callback for Keras evaluate_generator Tensorflow Keras - 训练时精度高,预测时精度低 - Tensorflow Keras - High accuracy during training, low accuracy during prediction 训练精度高,验证精度低 CNN二元分类 keras - High training accuracy, low validation accuracy CNN binary classification keras Keras model.evaluate_generator结果几乎是真实精度的两倍? - Keras model.evaluate_generator results nearly twice real accuracy?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM