【Pytorch】2.TensorBoard的运用

什么是TensorBoard

是一个可视化和理解深度爵溪模型的工具。它可以通过显示模型结构、训练过程中的指标和图形化展示训练的效果来帮助用户更好地理解和调试他们的模型

TensorBoard的使用

安装tensorboard环境
在终端使用

conda install tensorboard

通过anaconda安装
导入类SummaryWriter

from torch.utils.tensorboard import SummaryWriter

我们可以查看SummaryWriter的源码
在这里插入图片描述
对他的介绍是
将条目直接写入log_dir中的事件文件,以供TensorBoard使用。
然后我们可以看到他的使用方法
在这里插入图片描述
我们就可以通过指定单个参数,来将生成的事件与文件存储到指定的文件夹下

writer = SummaryWriter("logs")  # 单参数传递,说明将我们的事件和文件存储到logs的文件夹下

其中主要使用到了两种方法

  • add_image()
  • add_scalar()

add_scalar() 添加标量

我们查看源码
在这里插入图片描述
在这里插入图片描述
我们可以编写一个例子演示一下

for i in range(100):
    writer.add_scalar("y=2x", 2*i, i) #生成图像

运行结束后会生成logs的文件夹
在这里插入图片描述
然后再项目终端使用

# tensorboard --logdir=文件夹名

tensorboard --logdir=logs

打开生成的事件与文件
在这里插入图片描述
就可以在对应的端口上观察相应的可视化界面了
在这里插入图片描述

add_image() 添加图片

我们先看一下源码
在这里插入图片描述
注意我们的img_tensor的类型,就不能用我们Image.open()打开的类型了
因为打开的类型为

from PIL import Image
img = Image.open(img_path)
print(type(img))
<class 'PIL.JpegImagePlugin.JpegImageFile'>		# 不符合上面文件的规范

这时候我们可以使用numpy包中的array方法,将Image.open打开的图片类型转化为numpy类型,具体操作为

img_path = "dataset/hymenoptera_data/train/ants/0013035.jpg"
img_PIL = Image.open(img_path)
img_np = np.array(img_PIL)  # 将其他数据结构转化为numpy类型

然后我们就可以导入测试了,但是注意一个问题
通过这种方式转化为numpy类型的数据与add_image方法默认的数据形式不相同,默认形式为CHW,而numpy类型时HWC
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

writer.add_image("test", img_np, 1, dataformats='HWC')  # 添加图片
# 最后需要指定格式

程序成功运行,通过终端输入指令

tensorboard --logdir=logs

成功运行
在这里插入图片描述

<think> 我们面对的问题是使用PyInstaller打包包含PyTorch的程序时出现的三个主要问题: 1. ModuleNotFoundError: No module named 'tensorboard' 2. Windows或MacOS不支持重定向的警告 3. PyInstaller中关于torch相关模块弃用的警告 ### 问题分析 #### 第一个问题:缺少tensorboard模块 - 原因:PyTorch有时会依赖tensorboard(例如使用torch.utils.tensorboard),但PyInstaller在分析依赖时可能没有自动捕获到。 - 解决方案:显式添加`tensorboard`和`tensorboardX`(如果使用了)作为隐藏导入。 #### 第二个问题:重定向不支持 - 在Windows或MacOS上,可能由于PyInstaller的版本或系统权限问题,导致重定向失败(例如文件重定向、输出重定向)。 - 解决方案:更新PyInstaller到最新版本,并检查打包命令是否使用了可能导致重定向问题的参数(如`--noconsole`)。另外,可以尝试使用`.spec`文件进行高级配置。 #### 第三个问题:torch相关模块弃用警告 - 原因:PyInstaller的hook机制可能会引用一些torch中已经弃用的子模块。 - 解决方案:更新PyInstaller和torch到最新版本,确保兼容性。同时,我们可以通过修改hook文件或显式排除弃用的模块来解决。 ### 解决方案步骤 #### 步骤一:创建`.spec`文件 首先,生成一个`.spec`文件以便进行高级配置: ```bash pyi-makespec --onefile main.py ``` #### 步骤二:修改`.spec`文件 修改生成的`main.spec`文件,添加必要的配置: ```python # 在文件开头添加以下导入 import torch import torchvision import torchaudio import tensorboard # 确保已安装tensorboard模块 # 在Analysis部分进行配置 a = Analysis( ['main.py'], pathex=[], binaries=[], datas=[ # 可以添加数据文件,如模型文件等 ], hiddenimports=[ # 添加隐藏导入的模块 'torch', 'torch._C', 'torch.nn', 'torchvision', 'tensorboard', 'tensorflow', # 有时tensorboard需要tensorflow(即使我们不用,但tensorboard可能依赖) 'tensorboardX', # 如果有其他缺失模块,在此添加 ], hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, # 尝试设置为False以避免重定向问题 win_private_assemblies=False, cipher=None, noarchive=False, ) ``` #### 步骤三:处理弃用警告 在`.spec`文件中,我们可以通过`excludes`参数排除一些弃用的模块(如果不需要)来避免警告。但是,由于我们不确定具体是哪个模块引起的弃用警告,可以先尝试打包,然后根据警告信息排除。 例如,如果警告提到某个模块(如`torch.legacy`)已经弃用,我们可以将其排除: ```python excludes=['torch.legacy'], ``` #### 步骤四:处理重定向问题 对于Windows或MacOS的重定向不支持问题,我们可以尝试以下方法: 1. 更新PyInstaller到最新版本:`pip install --upgrade pyinstaller` 2. 在`.spec`文件中,设置`win_no_prefer_redirects=False`(如上所示) 3. 如果问题仍然存在,尝试在打包命令中加上`--win-private-assemblies`或`--win-no-prefer-redirects`选项(但注意,这些选项在PyInstaller 4.0后有变化) 另外一种思路:重定向问题可能与控制台有关,如果我们不需要控制台窗口,可以尝试使用`--console`或`--noconsole`参数调整。 #### 步骤五:打包 使用修改后的`.spec`文件打包: ```bash pyinstaller main.spec ``` ### 补充说明:tensorboard问题的替代方案 如果上述方法仍然无法解决tensorboard的问题,我们可以尝试在代码中动态导入tensorboard,以触发PyInstaller的自动捕获: ```python # 在main.py的开头添加以下代码 try: import tensorboard import tensorboardX except ImportError: pass ``` ### 验证打包结果 运行打包后的可执行文件,检查是否还会出现`ModuleNotFoundError`以及弃用警告和重定向问题。 ### 相关问题 1. 如何在PyInstaller打包过程中处理动态导入的模块? 2. 如何排除PyInstaller打包过程中不需要的模块以减小体积? 3. 如何解决PyInstaller打包后的程序在Windows系统上的控制台窗口问题? 4. 如何将资源文件(如图片、模型等)正确打包到PyInstaller生成的可执行文件中? 5. PyInstaller打包时如何加密源代码? ### 引用说明 本文参考了PyInstaller处理隐藏导入的一般方法[^2]以及修改.spec文件的高级配置技巧[^3],并针对tensorboard模块缺失的问题提出了解决方案。同时,针对重定向问题,我们参考了PyInstaller官方文档中关于Windows重定向的设置[^4]。 [^2]: 引用[2]中提到:解决模块缺失(ModuleNotFoundError)可以通过在.spec文件的hiddenimports中添加缺失模块。 [^3]: 引用[3]中提到:打包后的文件路径问题可以通过`sys._MEIPASS`定位临时目录解决,以及使用`--hidden-import`手动指定依赖模块。 [^4]: 引用[4]中提到:PyInstaller的基本打包命令以及一些常用参数的使用。 </think> ### 解决 PyInstaller 打包 Torch 时的三大问题 #### 🔧 一、解决 Tensorboard 模块缺失问题 **问题原因**: PyInstaller 无法自动检测 Torch 的间接依赖 `tensorboard`,导致运行时出现 `ModuleNotFoundError`。 **解决方案**: 1. **显式添加隐藏导入**: ```bash pyinstaller --hidden-import tensorboard --hidden-import tensorboardX main.py ``` *或修改 .spec 文件:* ```python a = Analysis( ... hiddenimports=['tensorboard', 'tensorboardX'] # 添加此处[^2] ) ``` 2. **强制包含缺失模块**: ```python # 在 main.py 开头添加 import tensorboard # 即使未使用也要导入 import tensorboard.summary # 深度依赖 ``` --- #### 二、处理重定向不支持警告 **问题现象**: Windows/MacOS 提示 `Redirects are not supported` 错误。 **解决方案**: 1. **禁用文件重定向**: ```python # 在 main.py 中添加 if sys.platform == 'win32': import ctypes ctypes.windll.kernel32.Wow64DisableWow64FsRedirection(None) ``` 2. **使用管理员权限**: ```bash # Windows 以管理员身份运行 runas /user:Administrator "pyinstaller main.py" ``` 3. **修改打包参数**: ```bash pyinstaller --win-private-assemblies main.py ``` --- #### ️ 三、解决 Torch 弃用模块警告 **问题表现**: `DeprecationWarning: Using or importing the ABCs from 'collections' instead of 'collections.abc'` **解决方案**: 1. **更新依赖版本**: ```bash pip install --upgrade torch pyinstaller # 确保最新版[^4] ``` 2. **添加运行时钩子**: 创建 `hook-torch.py`: ```python # 解决弃用警告的核心逻辑 from PyInstaller.utils.hooks import collect_submodules hiddenimports = collect_submodules('torch', filter=lambda x: 'deprecated' not in x) ``` 3. **打包时加载钩子**: ```bash pyinstaller --additional-hooks-dir=. main.py ``` --- ### 📦 完整打包示例(.spec文件) ```python # torch_pack.spec block_cipher = None a = Analysis( ['main.py'], binaries=[ (torch.lib.__path__[0], 'torch/lib') # 包含原生库 ], datas=[ ('model_weights.pth', '.') ], hiddenimports=[ 'tensorboard', 'tensorboardX', 'torch._C._nn', 'torch.overrides' ], # [^2][^3] hookspath=['.'], runtime_hooks=[], excludes=['collections.abc'], # 排除弃用模块 win_no_prefer_redirects=True # 关闭重定向 ) ``` ### ✅ 验证步骤 1. 检查警告是否消失: ```bash ./dist/main --test 2>&1 | grep "DeprecationWarning" ``` 2. 确认 Tensorboard 加载: ```python # 在代码中添加验证 try: from torch.utils.tensorboard import SummaryWriter except ImportError as e: print(f"加载失败: {str(e)}") ``` --- ### 🌟 关键预防措施 1. **虚拟环境打包**: ```bash python -m venv pack_env && source pack_env/bin/activate pip install torch tensorboard pyinstaller ``` 2. **调试模式输出**: ```bash pyinstaller --log-level DEBUG main.py ``` 3. **依赖树检查**: ```bash pipdeptree | grep -E 'torch|tensorboard' ``` --- ### 📚 相关问题 1. 如何解决 PyInstaller 打包后出现的 `libtorch_cuda.so` 缺失错误? 2. 在 macOS 上打包 PyTorch 程序时如何正确处理 Apple Metal 支持? 3. 如何将 TensorBoard 的日志文件正确打包到 PyInstaller 生成的可执行文件中? 4. 使用 `--onefile` 模式打包大体积 Torch 模型时如何优化启动速度? 5. 如何为 PyInstaller 打包的 Torch 程序添加 CUDA 版本自动检测功能? > 解决方案综合运用了隐藏导入机制[^2]、运行时路径处理[^3]和依赖隔离技术[^4],特别针对 Torch 生态的模块加载特性进行了优化调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值