Machine learning Keras:历史记录不可访问,因为丢失或准确性

Machine learning Keras:历史记录不可访问,因为丢失或准确性,machine-learning,keras,neural-network,Machine Learning,Keras,Neural Network,我正在Keras和Tensorflow后端培训一名CNN mod1=gmodel.fit(图像、序列标签、, 批次尺寸=100, 时代=2, verbose=1, 验证\数据=(测试\图像、测试\标签) 在每一个时代,我都能在输出中看到打印的准确性和损失(直到这里一切似乎都正常) 1/10纪元 1203/1203[===========================================================================================

我正在Keras和Tensorflow后端培训一名CNN

mod1=gmodel.fit(图像、序列标签、,
批次尺寸=100,
时代=2,
verbose=1,
验证\数据=(测试\图像、测试\标签)
在每一个时代,我都能在输出中看到打印的准确性和损失(直到这里一切似乎都正常)

1/10纪元
1203/1203[=================================================================================================================================-190s-损耗:0.7600-附件:0.5628
-val_损失:0.5592-val_acc:0.6933
纪元2/10
1203/1203[=====================================================================]187s-损耗:0.5490-附件:0.6933
-val_损失:0.4589-val_acc:0.7930
纪元3/10
....
最后,我想绘制验证损失图,以便在以前的项目中,我通过

mod1.历史记录['val_loss']
但是我得到一个错误,好像
.history()
是空的

TypeError回溯(最近一次调用)
在()
---->1模式历史()
TypeError:“历史记录”对象不可调用
编辑(在下面的回答之后):当我尝试访问损失时,例如:

---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在()
---->1模块1.历史记录[“价值损失”]
TypeError:“历史记录”对象不可下标
我以前没有发现类似的问题,所以我不知道会发生什么或者如何调试


非常感谢您的指点或想法。

尽管您说您调用了
mod1.history['val_loss']
,但您的错误消息讲述了一个不同的故事-很可能,正如Daniel Moller所评论的,您实际上使用了类似于
mod1.history()
(即带有括号)的东西。下面是我得到的(Python 3.5):

mod1.history()
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在()
---->1模块1.历史()
TypeError:“dict”对象不可调用
mod1.history
不是用
()
调用的函数,而是Python字典:

mod1.history
#结果:
{'acc':[0.82374999998,
0.94294999999999995,
0.95861666666666667,
...],
“损失”:[0.6255526172161098,
0.18810810926556587,
0.13734668906728426,
...],
“val_损失”:[12.05395287322998,
11.584557554626464,
10.949809835815429,
...]}
mod1.历史记录['val_loss']
#结果:
[12.05395287322998,
11.584557554626464,
10.949809835815429,
...]
请使用model.fit语句中的验证数据作为测试数据,然后将出现唯一的“model.history.history”

参考:

安装模型后,它将返回一个历史对象,您不能像
历史['loss']那样调用()
或直接为其下标

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

model.history.history.keys()
->将为您提供
['acc','loss','val\u acc','val\u loss']

若您在编译过程中监控了损失并提到了度量的准确性

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

但是,如果您拟合了一个模型,并将历史对象分配给一个局部变量,例如
history=model.fit(X,Y)
,那么访问模式将是

history.history['acc']
history.history['val_acc']
这里我们不需要提及
模型
对象,因为
历史
对象现在保存在局部变量中


另外,不要忘记添加验证数据或使用fit的validation split参数来访问验证度量。

“History”对象不可调用。很明显,您不应该使用
()
。括号中“调用”一个函数。1)在发布答案后编辑你的问题时,最好注明是(“编辑”),这样受访者就不会看起来像白痴2)当有人回答了你最初描述的问题时,向上投票是一种很好的礼貌3)我实际上展示了
mod1.history的情况['val_loss']
如下;只需尝试
mod1.history
type(mod1.history)
-如果你没有找到合适的字典,你的部分代码中还有一些错误没有显示在这里(即使现在,你也会同时显示
modl
('l')和
mod1
('1')-其中一个一定是打字错误)…谢谢你指出mod1.history()无论如何都不起作用。不过,我真正的目标是mod1.history['val_loss']给了我一个“不可订阅的”错误。我不是Keras专家,但我以前访问过损失和准确性,我很困惑为什么这次我不能这么做。@user3177938这不是您最初报告的错误!我想,也许是错误的,因为我在mod1上得到了错误。历史['val_loss']这是因为历史上没有字典。所以,这就是为什么我尝试使用mod1.history()@patti_jane解决什么问题?问题是一团糟。如果你面对一个看起来类似的问题,我建议你用一个可复制的方法来打开一个新问题example@desertnaut我在说“历史不可订阅”错误,但我意识到我调用的是“gmodel”的历史记录,而不是“mod1”-->mod1=gmodel.fit()。
history.history['acc']
history.history['val_acc']