Keras配置TensorBoard回调报NotFoundError路径不存在错误
错误产生原因
- TensorFlow 内置的文件写入逻辑不会自动递归创建多层不存在的父目录:代码中拼接得到的带时间戳的日志子目录、上层logs目录、模型权重保存目录如果没有提前创建,写入事件文件/权重文件时会直接抛出路径不存在的错误,这是触发本次报错的核心原因。
- Windows 路径斜杠混用:代码中
log_dir_path末尾手动添加了正斜杠/,和Windows原生路径的反斜杠\混用时,在部分旧版本TensorFlow环境下会出现路径解析偏差,最终拼接得到的路径和真实目录结构不匹配。 - 路径存在无效层级:代码中写的根路径包含重复的
Desktop层级(C:\Users\Administrator\Desktop\Desktop\...),如果该路径在本地真实不存在,哪怕其余配置正确也会触发路径查找失败。 - 存在隐藏兼容问题:当前
ModelCheckpoint的filepath直接指向文件夹路径,开启save_weights_only=True时,部分Keras版本要求filepath必须指向具体的权重文件名模板,传入纯文件夹路径也可能触发写入异常。
修复方案
按以下步骤调整代码即可解决问题:
- 所有用于写入文件的目录,在初始化回调前调用
os.makedirs(..., exist_ok=True)递归创建,exist_ok=True参数可以避免目录已存在时抛出重复创建的错误。 - 统一Windows路径的斜杠格式,不要手动在路径字符串末尾添加斜杠,所有路径拼接操作全部交给
os.path.join处理,避免斜杠混用导致的解析错误。 - 修正路径中重复的
Desktop无效层级,确保根路径指向本地真实存在的项目目录。 - 给
ModelCheckpoint的保存路径增加权重文件名模板,支持通过占位符记录epoch、验证集损失等信息,同时兼容不同Keras版本的写入要求。
修正后的完整可运行代码如下:
import os import datetime import tensorflow as tf from tensorflow.keras.callbacks import ReduceLROnPlateau, EarlyStopping, ModelCheckpoint, TensorBoard # 配置项目根路径,移除重复的Desktop层级,不要手动在路径末尾添加斜杠 project_root = r'C:\Users\Administrator\Desktop\Work\Data Science\Practice\Machine Learning\Deep Learning\Custom Deep Learning\Deep Learning with Computer vision\Basics\Covid 19 Project' # 配置模型权重保存目录,提前递归创建目录 checkpoint_dir = os.path.join(project_root, 'Model', 'Model best checkpoint') os.makedirs(checkpoint_dir, exist_ok=True) # 权重保存路径增加文件名模板 checkpoint_best_path = os.path.join(checkpoint_dir, 'best_weights_epoch{epoch:02d}_valLoss{val_loss:.3f}.h5') # 配置TensorBoard日志目录,提前递归创建目录 log_root = os.path.join(project_root, 'Data', 'logs') log_dir = os.path.join(log_root, datetime.datetime.now().strftime("%Y%m%d-%H%M%S")) os.makedirs(log_dir, exist_ok=True) # 初始化回调函数 early_stopping = EarlyStopping(patience=5, monitor='val_loss', mode='min') learning_rate_reduction = ReduceLROnPlateau(patience=4, monitor='val_loss', factor=0.1) check_bestpoint = ModelCheckpoint( filepath=checkpoint_best_path, save_weights_only=True, save_freq='epoch', monitor='val_loss', save_best_only=True, verbose=1 ) tensorboard_callback = TensorBoard(log_dir=log_dir, histogram_freq=1) callbacks = [early_stopping, learning_rate_reduction, check_bestpoint, tensorboard_callback]
校验提示:启动训练前可以先打印
checkpoint_dir和log_dir两个路径,在资源管理器中手动打开确认路径可正常访问,可进一步避免路径配置错误。
内容的提问来源于stack exchange,提问作者Nana qweku Yeboah
相关产品推荐
相关产品推荐

