首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用keras获得模型的准确性?

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

Stack Overflow用户
提问于 2018-06-27 00:34:22
回答 3查看 52.9K关注 0票数 20

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

代码语言:javascript
运行
复制
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)

训练好的模型,但得到了一个错误,这是由我使用的过时方法引起的。

代码语言:javascript
运行
复制
---------------------------------------------------------------------------
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'

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

代码语言:javascript
运行
复制
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)

它在运行它时会产生以下输出:

代码语言:javascript
运行
复制
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['accuracy']替换train_acc=hist.history['acc'],但是没有用。

EN

回答 3

Stack Overflow用户

发布于 2018-06-27 00:41:22

在编译模型时,您可能没有添加"acc“作为度量。

代码语言:javascript
运行
复制
model.compile(optimizer=..., loss=..., metrics=['accuracy',...])

您可以使用以下命令从任何数据中获取指标和损失,而无需再次训练:

代码语言:javascript
运行
复制
model.evaluate(X, Y)
票数 23
EN

Stack Overflow用户

发布于 2019-12-03 08:27:58

刚在tensorflow==2.0.0里试过了。结果如下:

给出一个训练电话,比如:

代码语言:javascript
运行
复制
history = model.fit(train_data, train_labels, epochs=100,
                    validation_data=(test_images, test_labels))

上述调用的最终精度可以读出如下:

代码语言:javascript
运行
复制
history.history['accuracy']

打印整个dict history.history可以让您了解所有包含的值。您会发现报告的所有值都在下面这样的行中:

代码语言:javascript
运行
复制
7570/7570 [==============================] - 42s 6ms/sample - loss: 1.1612 - accuracy: 0.5715 - val_loss: 0.5541 - val_accuracy: 0.8300

可以从那本字典中读出。

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

代码语言:javascript
运行
复制
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']
票数 9
EN

Stack Overflow用户

发布于 2020-10-23 15:05:32

有一种方法可以获得最高的模型精度,方法是添加回调来序列化该模型,如ModelCheckpoint,并从具有最低损失的历史记录中提取所需的值:

代码语言:javascript
运行
复制
best_model_accuracy = history.history['acc'][argmin(history.history['loss'])]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51047676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档