Tensorflow CNN模型的模型。评估和模型。预测之间的准确性之间存在巨大差异

时间:2020-06-24 14:02:32

标签: python tensorflow machine-learning keras deep-learning

我将ImageDataGenerator(validation_split).flow_from_directory(子集)用于我的训练和验证集。因此,训练和验证数据将获得自己的生成器。

训练完数据后,我在验证生成器上运行model.evaluate()并获得了约75%的准确性。但是,当我在同一验证生成器上运行model.predict()时,准确性下降到1%。

该模型是根据分类交叉熵损失和准确性度量标准编译的多类CNN,应将其默认为分类准确性。 #编辑:仍改为分类准确性。

# Compile

learning_rate = tf.keras.optimizers.schedules.PolynomialDecay(initial_learning_rate=initial_lr,
                                                              decay_steps=steps,
                                                              end_learning_rate=end_lr)

model.compile(optimizer=tf.keras.optimizers.RMSprop(learning_rate),
              loss='categorical_crossentropy',
              metrics=['categorical_accuracy'])

# Validation set evaluation

val_loss, val_accuracy = model.evaluate(val_generator,
                                        steps=int(val_size/bs)+1)
print('Accuracy: {}'.format(val_accuracy))

# Validation set predict

y_val = val_generator.classes

pred = model.predict(val_generator,
                     verbose=1
                     steps=int(val_size/bs)+1)

accuracy_TTA = np.mean(np.equal(y_val, np.argmax(pred, axis=-1)))
print('Accuracy: {}'.format(accuracy_TTA))

1 个答案:

答案 0 :(得分:1)

来自model.evaluate和model.predict的准确性值各不相同的问题似乎可以通过创建具有相同种子的ImageDataGenerator()的单独实例来解决。

此外,有时在训练KeyInterrupts或加载检查点期间,应重新初始化生成器实例,因为可能会出现问题。

相关问题