因为最近在搞毕设,借用交友网站上的yolov5开源代码训练自己的数据集时,第一个epoch就显示各个loss=nan。
而后,近乎绝望的我找到一个玩计算机视觉玩得不错的UP主,一次调试100元, 我欣然同意了,花钱消灾!
今天上午9点约好,他控制我;在20分钟内,他新建了一个虚拟环境,把pytorch由原先的1.9版本重装成1.8版本(仍是GPU类型),接着把其他依赖库安装完后,叫我run一下代码。
非常顺利!截止到我现在写博客总结,已经训练了13轮了,还没有出现loss为nan的情况。
这位大牛告诉我:可能是因为Pytorch在1.9版本中更新了自己的API(特别是涉及到计算方法的部分),损失函数计算模式有所更改,所以用新环境计算出的结果很可能出现NAN的情况。
参考GITHUB地址:GitHub - ultralytics/yolov5: YOLOv5 in PyTorch
虽然下面这些情形,我还没遇到,但还是总结一下吧!免得到时候出现NAN,手忙脚乱不知道怎么办。
如果你跟我一样是使用开源的代码进行训练的,那么强烈建议你新建一个环境,这个环境根据对方提供的environment.yml文件或者requirement.txt文件进行配置。
特别是base部分的依赖库,尽量保持完全一样。
比如我上面用到的YOLOv5,作者给的requirement.txt文件如下:Base部分,应该是最重要的,特别是numpy、torch、OpenCV这几种涉及到算法、计算方式的第三方库。
# pip install -r requirements.txt
# Base ----------------------------------------
matplotlib>=3.2.2
numpy>=1.18.5
opencv-python>=4.1.2
Pillow>=7.1.2
PyYAML>=5.3.1
requests>=2.23.0
scipy>=1.4.1
torch>=1.7.0
torchvision>=0.8.1
tqdm>=4.41.0
# Logging -------------------------------------
tensorboard>=2.4.1
# wandb
# Plotting ------------------------------------
pandas>=1.1.4
seaborn>=0.11.0
# Export --------------------------------------
# coremltools>=4.1 # CoreML export
# onnx>=1.9.0 # ONNX export
# onnx-simplifier>=0.3.6 # ONNX simplifier
# scikit-learn==0.19.2 # CoreML quantization
# tensorflow>=2.4.1 # TFLite export
# tensorflowjs>=3.9.0 # TF.js export
# openvino-dev # OpenVINO export
# Extras --------------------------------------
# albumentations>=1.0.3
# Cython # for pycocotools https://github.com/cocodataset/cocoapi/issues/172
# pycocotools>=2.0 # COCO mAP
# roboflow
thop # FLOPs computation
一般是配置问题,比如我在背景部分分享的环境配置问题,当然还有数据集配置问题(eg:label越界、label缺失)。
这种情况下。
如果是环境配置问题,就要重装环境、在朋友电脑上的环境运行一遍。
如果是数据集配置问题,可以尝试换几个模型对同样的数据集进行测试,结果没出错才说明不是数据集的问题。
这种情况下,先建议做以下几点简易的尝试:
下面的内容,收集于网络。
训练网络loss出现Nan解决办法 - 知乎
训练深度学习网络时候,出现Nan是什么原因,怎么才能避免? - 知乎