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

Keras训练报错ValueError: No variables to save,求问题原因与解决方法

解决Keras训练时出现的"ValueError: No variables to save"问题

我之前踩过完全一样的坑!看你的报错堆栈就能直接定位问题——问题出在TensorBoard回调的embeddings_freq参数设置上。你把它写成了字符串'batch',这是不符合参数要求的用法。

为什么会触发这个错误?

Keras的TensorBoard回调里,embeddings_freq要求传入整数,用来指定每隔多少个epoch保存一次嵌入向量数据。当你传入字符串'batch'时,回调内部的逻辑会混乱:它尝试创建TensorFlow的Saver对象来保存嵌入变量,但因为参数格式错误,找不到任何可被保存的有效变量,最终就抛出了No variables to save的异常。

怎么解决?

有两种处理方式,根据你的需求选:

  • 如果需要记录嵌入数据:把embeddings_freq改成整数,比如1表示每个epoch都保存,5表示每5个epoch保存一次
  • 如果不需要记录嵌入数据:直接删掉embeddings_freq参数就行,它的默认值是0,也就是不保存嵌入数据

修改后的代码示例

# 方案1:保留嵌入记录,修正参数为整数
tensorboard_callback = TensorBoard(log_dir=log_path, write_graph=True, embeddings_freq=1)
# 方案2:不需要嵌入记录的话,直接写成这样
# tensorboard_callback = TensorBoard(log_dir=log_path, write_graph=True)

es_min_valLoss = EarlyStopping(monitor='val_loss', patience=15, mode='min')
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
train_history=model.fit(x=trainData, y=trainLabels, validation_split=validation_split, 
                        epochs=epochs, batch_size=batch_size, verbose=2, 
                        callbacks=[tensorboard_callback, es_min_valLoss])

补充说明

如果你确实需要按批次来记录嵌入数据,Keras原生的TensorBoard回调是不支持这个功能的,你可能需要自己写一个自定义回调来实现,但绝大多数场景下,按epoch频率记录就足够满足需求了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:31:15