You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

重新训练前删除TensorFlow模型及解决导出目录已存在报错

嘿,这个问题我之前踩过坑,给你几个实用的解决方案:

解决「Export directory already exists」错误

这个报错的核心是TensorFlow默认不允许覆盖已存在的模型导出目录,你可以通过手动删除目录或者训练时自动覆盖两种方式解决:

1. 手动删除已存在的临时目录

你找不到/tmp/saved_models/1/是因为/tmp是系统的临时目录,不同系统的访问方式不一样:

  • Linux/macOS/WSL环境:直接打开终端,执行这条命令强制删除整个目录:

    rm -rf /tmp/saved_models/1/
    

    -rf参数是递归删除目录下所有内容,且无需确认)

  • Windows原生环境

    • 方法一:打开文件管理器,在地址栏输入%TEMP%,回车后就能进入系统临时文件夹,找到saved_models/1/目录删掉即可。
    • 方法二:用PowerShell执行命令删除:
      Remove-Item -Recurse -Force "$env:TEMP\saved_models\1\"
      

如果是WSL环境下的/tmp,想用Windows文件管理器访问的话,可以在地址栏输入\\wsl$\<你的发行版名称>\tmp(比如\\wsl$\Ubuntu\tmp),就能找到对应的目录。

2. 训练时自动覆盖目录,无需手动删除

不用每次手动删目录,直接在代码或训练命令里设置覆盖参数就行:

  • 如果你用Keras保存模型
    调用model.save()tf.keras.models.save_model()时,加上overwrite=True参数:

    model.save('/tmp/saved_models/1/', overwrite=True)
    
  • 如果你用TensorFlow原生API保存SavedModel
    可以先判断目录是否存在,存在就删除,再保存模型:

    import os
    import shutil
    
    export_dir = '/tmp/saved_models/1/'
    # 如果目录存在,先删除
    if os.path.exists(export_dir):
        shutil.rmtree(export_dir)
    # 再保存模型
    tf.saved_model.save(your_model, export_dir)
    
  • 如果你用官方的重新训练脚本(比如retrain.py)
    看看脚本的参数列表,一般会有类似--overwrite--force的参数,加上这个参数就能自动覆盖现有目录,不用手动删除。

重新训练前删除TensorFlow模型的通用方法

根据你保存的模型格式不同,删除方式略有区别:

1. 删除SavedModel格式的模型

SavedModel是一个包含多个文件的目录,直接删除整个目录即可:

import shutil
shutil.rmtree('/path/to/your/saved_model_dir/')

或者用系统命令(比如Linux的rm -rf,Windows的Remove-Item)删除。

2. 删除Checkpoint(ckpt)格式的模型

训练时生成的.ckpt.data.ckpt.index.ckpt.meta以及checkpoint文件,你可以:

  • 直接删除整个checkpoints目录;
  • 或者用代码批量删除这些文件:
    import glob
    import os
    
    ckpt_dir = '/path/to/your/checkpoints/'
    # 匹配所有ckpt相关文件
    ckpt_files = glob.glob(os.path.join(ckpt_dir, '*.ckpt*'))
    ckpt_files.append(os.path.join(ckpt_dir, 'checkpoint'))
    
    for file_path in ckpt_files:
        if os.path.exists(file_path):
            os.remove(file_path)
    

3. 删除HDF5(.h5)格式的模型

如果是单个.h5文件,直接删除这个文件就行:

import os
os.remove('/path/to/your/model.h5')

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

火山引擎 最新活动