Keras:历史无法获得损失或准确性

时间:2017-12-04 12:48:49

标签: keras

我正在使用Tensorflow后端在Keras培训CNN,

mod1=gmodel.fit(images, train_labels,
      batch_size=100,
      epochs=2,
      verbose=1,
      validation_data=(test_images, test_labels))

并且在每个时代我都可以看到在输出中打印出的准确性和损失(直到这里一切似乎都好)。

Epoch 1/10
1203/1203 [==============================] - 190s - loss: 0.7600 - acc: 0.5628 
- val_loss: 0.5592 - val_acc: 0.6933
Epoch 2/10
1203/1203 [==============================] - 187s - loss: 0.5490 - acc: 0.6933 
- val_loss: 0.4589 - val_acc: 0.7930
Epoch 3/10
....

最后,我想绘制验证损失,以便在之前的项目中通过

访问验证丢失
mod1.history['val_loss']

但我收到错误,好像.history()为空。

TypeError                                 Traceback (most recent call last)
<ipython-input-23-ecdd306e9232> in <module>()
----> 1 modl.history()
TypeError: 'History' object is not callable

编辑(在回答下面):当我尝试访问损失时,例如:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-34-06fcc6efb374> in <module>()
----> 1 mod1.history['val_loss']

TypeError: 'History' object is not subscriptable

之前我没有找到类似这个问题的东西,所以我对可能发生的事情或如何调试感到迷茫。

非常感谢任何指针或想法。

3 个答案:

答案 0 :(得分:1)

虽然您说您已拨打mod1.history['val_loss'],但您的错误消息却讲述了另一个故事 - 最有可能的是,正如Daniel Moller已经评论过的那样,您实际上使用了类似mod1.history()的内容(即带括号) 。这是我得到的(Python 3.5):

mod1.history()
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-20-67bafe3187cc> in <module>()
----> 1 mod1.history()

TypeError: 'dict' object is not callable

mod1.history不是用()调用的函数,而是Python字典:

mod1.history
# result:
{'acc': [0.82374999999999998,
  0.94294999999999995,
  0.95861666666666667,
  ...],
 'loss': [0.62551526172161098,
  0.18810810926556587,
  0.13734668906728426,
  ...],
 'val_loss': [12.05395287322998,
  11.584557554626464,
  10.949809835815429,
  ...]}

mod1.history['val_loss']
# result:
[12.05395287322998,
 11.584557554626464,
 10.949809835815429,
 ...]

答案 1 :(得分:-1)

model.fit(x_train, y_train,batch_size=128,validation_data=(x_test, y_test))

vy = model.history.history['val_loss']
ty = model.history.history['loss']

请使用model.fit语句中的validation_data作为测试数据,然后出现唯一的“ model.history.history”

参考: https://keras.io/callbacks/

答案 2 :(得分:-1)

拟合模型后,它将返回一个历史对象,您不能call()或直接像history['loss']下标它。

如果您使用model.fit()安装了它,则必须进行以下查询

model.history.history.keys()->将给您['acc','loss','val_acc','val_loss']
如果您在监控过程中监视损失并提到度量标准是准确性。

您可以使用相同的格式访问所有指标,例如:model.history.history['acc']

但是,如果您拟合模型并将历史对象分配给像这样的history = model.fit(X, Y)这样的局部变量,则访问方式将是

history.history['acc']
history.history['val_acc']

这里我们不需要提及model对象,因为history对象现在已保存在局部变量中。

也不要忘记添加验证数据或使用合适的验证拆分参数来访问验证指标。