如何使用keras获得模型的准确性?

时间:2018-06-26 16:34:22

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

在拟合模型(运行了几个小时)之后,我想通过以下代码获得准确性:

train_loss=hist.history['loss']
val_loss=hist.history['val_loss']
train_acc=hist.history['acc']
val_acc=hist.history['val_acc']
xc=range(nb_epoch)

训练过的模型,但出现错误,这是由我使用的不赞成使用的方法引起的。

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-233-081ed5e89aa4> in <module>()
      3 train_loss=hist.history['loss']
      4 val_loss=hist.history['val_loss']
----> 5 train_acc=hist.history['acc']
      6 val_acc=hist.history['val_acc']
      7 xc=range(nb_epoch)

KeyError: 'acc'

在尝试读取精度之前,我用来拟合模型的代码如下:

hist = model.fit(X_train, Y_train, batch_size=batch_size, nb_epoch=nb_epoch,
            verbose=1, validation_data=(X_test, Y_test))


hist = model.fit(X_train, Y_train, batch_size=batch_size, nb_epoch=nb_epoch, 
            verbose=1, validation_split=0.2)

运行时会产生以下输出:

Epoch 1/20
237/237 [==============================] - 104s 440ms/step - loss: 6.2802 - val_loss: 2.4209
    .....
    .....
    .....
Epoch 19/20
    189/189 [==============================] - 91s 480ms/step - loss: 0.0590 - val_loss: 0.2193
    Epoch 20/20
    189/189 [==============================] - 85s 451ms/step - loss: 0.0201 - val_loss: 0.2312

我注意到我正在运行不赞成使用的方法和参数。

那么我如何在不再次适应并再次等待几个小时的情况下读取精度和val_accuracy?我尝试将train_acc=hist.history['acc']替换为train_acc=hist.history['accuracy'],但没有帮助。

4 个答案:

答案 0 :(得分:7)

在编译模型时,您可能没有添加“ acc”作为指标。

model.compile(optimizer=..., loss=..., metrics=['accuracy',...])

您可以从任何数据中获取指标和损失,而无需再次进行以下培训:

model.evaluate(X, Y)

答案 1 :(得分:1)

  1. 在编译模型时添加指标= ['准确性']

  2. 只需获得最后一个时期的精度。 hist.history.get('acc')[-1]

  3. 我实际上要做的是使用GridSearchCV,然后获取best_score_参数以打印最佳指标

答案 2 :(得分:0)

只需在tensorflow==2.0.0中进行尝试。结果如下:

发出如下培训电话:

history = model.fit(train_data, train_labels, epochs=100,
                    validation_data=(test_images, test_labels))

上述通话的最终准确性可以读出如下:

history.history['accuracy']

打印整个字典history.history可让您概览所有包含的值。 您会发现所有的值都在一行中报告,例如:

7570/7570 [==============================] - 42s 6ms/sample - loss: 1.1612 - accuracy: 0.5715 - val_loss: 0.5541 - val_accuracy: 0.8300
可以从该字典中读出

为了完整起见,我按如下方式创建了模型:

model.compile(optimizer=tf.optimizers.Adam(learning_rate=0.0001,
                                       beta_1=0.9,
                                       beta_2=0.999,
                                       epsilon=1e-07,
                                       amsgrad=False,
                                       name='Adam'
                                       ),
          loss='sparse_categorical_crossentropy',
          metrics=['accuracy']

答案 3 :(得分:0)

通过添加回调以序列化该模型(例如ModelCheckpoint)并从损失最少的历史记录中提取所需的值,有一种方法可以使模型的准确性最高:

best_model_accuracy = history.history['acc'][argmin(history.history['loss'])]