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

更换电脑后Transformer训练在首个Epoch末尾触发progbar.py TypeError

Transformer翻译模型训练报错排查

问题情况

更换新笔记本后,自研的简易Transformer翻译模型在首个Epoch训练结束时直接报错。代码使用model.fit()并自行覆写了train_step()方法,核心调用代码如下:

h = model.fit(
    ds.ds_tra,
    epochs=epochs,
    validation_data=ds.ds_val
)

具体报错日志

15/15 ━━━━━━━━━━━━━━━━━━━━ 0s 2s/step - masked_acc: 0.2338 - loss: 7.9628Traceback (most recent call last):
  File "C:\_P\dev\ai\AI1\tfe\translators\seq2seq_11\seq2seq_tst_train1.py", line 113, in <module>
    h = model.fit(
        ^^^^^^^^^^
  File "C:\Users\u2gil\AppData\Local\Programs\Python\Python311\Lib\site-packages\keras\src\utils\traceback_utils.py", line 122, in error_handler
    raise e.with_traceback(filtered_tb) from None
  File "C:\Users\u2gil\AppData\Local\Programs\Python\Python311\Lib\site-packages\keras\src\utils\progbar.py", line 92, in update
    self._values[k] = [v * value_base, value_base]
                       ~~^~~~~~~~~~~~
TypeError: unsupported operand type(s) for *: 'dict' and 'int'

环境对比

  • 旧电脑:Windows 10,代码可正常运行
  • 新电脑:Windows 11、Core Ultra 7处理器、Python 3.11.9、Keras 3.6.0、Numpy 1.26.4、TensorFlow 2.17.0

解决办法

这个报错是因为Keras 3.x对train_step()的返回值格式要求比旧版本更严格。旧版Keras可能允许返回嵌套字典,但新版本中train_step()必须返回纯标量值的字典,不能存在字典嵌套的情况。

检查你自行实现的train_step()方法:

  • 确保返回的每个指标(如loss、masked_acc)都是单个数值类型的Tensor,不能是字典
  • 举个例子,如果之前写的是return {"masked_acc": {"val": acc_result}},改成直接返回return {"masked_acc": acc_result}
  • 另外,注意Keras 3与TensorFlow 2.17的适配,所有指标计算需符合Keras 3的API规范

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 00:45:16