You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Keras模型训练报错:unhashable type: 'list'问题求助

问题与解决办法

问题详情

之前可正常运行的代码如今出现报错,不添加回调函数时一切正常。

相关代码

checkpoint = ModelCheckpoint('best_model.hdf5' , monitor = ['val_accuracy'] , verbose = 1  , mode = 'max', save_best_only=True)
earlystop = EarlyStopping(monitor='val_accuracy', patience=3, restore_best_weights=True)
callbacks = [checkpoint, earlystop]

...

history = model.fit(train_generator, 
          steps_per_epoch = len(train_generator),
          validation_data=val_generator, 
          validation_steps = len(val_generator),
          epochs=EPOCHS,
          callbacks=checkpoint)

报错信息

TypeError                                 Traceback (most recent call last)
<ipython-input-39-805f1a83aa3c> in <module>
      4           validation_steps = len(val_generator),
      5           epochs=EPOCHS,
----> 6           callbacks=checkpoint)

1 frames
/usr/local/lib/python3.7/dist-packages/keras/utils/traceback_utils.py in error_handler(*args, **kwargs)
     65     except Exception as e:  # pylint: disable=broad-except
     66       filtered_tb = _process_traceback_frames(e.__traceback__)
---> 67       raise e.with_traceback(filtered_tb) from None
     68     finally:
     69       del filtered_tb

/usr/local/lib/python3.7/dist-packages/keras/callbacks.py in _save_model(self, epoch, batch, logs)
   1426       try:
   1427         if self.save_best_only:
-> 1428           current = logs.get(self.monitor)
   1429           if current is None:
   1430             logging.warning('Can save best model only with %s available, '

TypeError: unhashable type: 'list'

原因分析

  • 监控参数类型错误:ModelCheckpoint的monitor参数被传入了列表['val_accuracy'],但该参数要求传入字符串类型的指标名称。logs是字典结构,字典的键必须是可哈希类型(如字符串),用列表当键会触发unhashable type: 'list'错误。
  • 回调参数格式错误:model.fit的callbacks参数要求传入回调对象的列表,但代码中直接传了单个checkpoint对象,不符合参数要求。

解决办法

修正两处错误即可:

  1. 将ModelCheckpoint的monitor参数改为字符串'val_accuracy'
  2. model.fit的callbacks传入定义好的callbacks列表(若仅需单个回调,可传[checkpoint])

修正后的代码示例:

# 修正monitor参数为字符串
checkpoint = ModelCheckpoint('best_model.hdf5' , monitor='val_accuracy' , verbose=1 , mode='max', save_best_only=True)
earlystop = EarlyStopping(monitor='val_accuracy', patience=3, restore_best_weights=True)
callbacks = [checkpoint, earlystop]

...

# 传入回调列表
history = model.fit(train_generator, 
          steps_per_epoch = len(train_generator),
          validation_data=val_generator, 
          validation_steps = len(val_generator),
          epochs=EPOCHS,
          callbacks=callbacks)

内容的提问来源于stack exchange,提问作者Sergei Frolov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 11:15:30