我已经用Keras训练了ResNet模型。尝试调试问题时,我发现报告的准确性与我手动计算的准确性不同。
模型使用
进行编译optimizer = keras.optimizers.Adam(lr=0.001)
base_model = ResNet50(weights=None, include_top=False, input_shape=(256,256,3))
x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dropout(0.5)(x)
predictions = Dense(len(classes), activation='softmax')(x)
filepath="model-improvement-{epoch:02d}-{val_acc:.2f}.hdf5"
checkpoint = ModelCheckpoint(filepath, monitor='val_acc', verbose=1, save_best_only=True, mode='max')
tensorboard = TensorBoard(log_dir="logs/{}".format(time()), write_graph=False, update_freq="batch" )
callbacks_list = [checkpoint, tensorboard]
model = Model(inputs=base_model.input, outputs=predictions)
model.compile(optimizer=optimizer, loss='categorical_crossentropy', metrics=['accuracy'])
test_steps_per_epoch = numpy.math.ceil(data_it.samples / data_it.batch_size)
predictions = model.predict_generator(data_it, steps=test_steps_per_epoch)
predicted_classes = numpy.argmax(predictions, axis=1)
print(model.evaluate_generator(data_it, steps=test_steps_per_epoch))
上面给出了
[0.3230868512656041, 0.921268782482911]
当我手动检查时:
true_classes = data_it.classes
print(numpy.mean(true_classes == predicted_classes))
结果是
0.6125515727317461
答案 0 :(得分:1)
发现了问题。 data_generator设置为shuffle = True,因此我的true_classes错误