💓 博客主页:瑕疵的CSDN主页
📝 Gitee主页:瑕疵的gitee主页
⏩ 文章专栏:《热点资讯》
被Keras模型保存路径坑了整晚,终于摸清了门道
目录
昨晚写完模型,想存个checkpoint,结果Keras直接报错:FileNotFoundError: [Errno 2] No such file or directory: 'C:modelsmodel.h5'
我盯着屏幕瞪了半小时——路径明明写的是'C:\models\model.h5',怎么变成C:modelsmodel.h5了?
核心根源:Windows路径用反斜杠\,但Python字符串里\是转义字符(比如\n是换行)。写'C:\models'时,\m被解析成转义序列,路径直接崩了。
更坑的是,Linux下用正斜杠/没问题,但硬编码路径跨平台必翻车。
错误示范(我踩过三次的坑):
# 错误!硬编码路径,\被转义,路径失效model.save('C:\models\model.h5')# 实际路径变成 'C:modelsmodel.h5',目录根本不存在跑起来直接报错,我差点把键盘砸了。
正确姿势(用os.path.join自动处理路径,跨平台通用):
importos# 先确保保存目录存在(避免No such directory)os.makedirs('models',exist_ok=True)# exist_ok=True避免目录已存在报错# 用os.path.join拼接路径,自动处理分隔符(Windows用\,Linux用/)save_path=os.path.join('models','model.h5')# 路径安全:'models/model.h5'或'models\model.h5'model.save(save_path)# 保存成功,不再报错或者用pathlib(更现代,推荐):
frompathlibimportPathsave_dir=Path('models')save_dir.mkdir(exist_ok=True)# 创建目录,避免权限问题# 用/拼接路径,自动适配系统save_path=save_dir/'model.h5'# 路径:models/model.h5(Linux)或models\model.h5(Windows)model.save(str(save_path))# Keras需要字符串,所以转成str我测试过,用pathlib的写法在Windows和Linux上都稳如老狗。
之前还试过用原始字符串r'C:\models\model.h5',但路径分隔符问题没解决,还是得手动处理目录。
避坑总结(血泪经验):
- 别碰硬编码路径!永远用
os.path.join或pathlib拼接。 - 保存前建目录:
os.makedirs('dir', exist_ok=True),避免目录不存在。 - 打印路径确认:
print("Saving to:", save_path),跑之前先看路径对不对。 - 跨平台优先:别写死
C:\\,用os.sep或pathlib自动适配。
这次终于不用再被路径错误折磨了。下次再遇到类似问题,直接看这行代码——比看文档快十倍。