初学pytorch踩坑

部署运行你感兴趣的模型镜像

简介

最近又开始使用 Pytorch 进行训练了,但是遇见了不少问题,主要问题集中在 loss 不收敛上,本章节就此问题进行探讨,由于是一遍码代码一遍写文章,本文最后不一定会给出解答,但会记录我寻找答案的经历和过程。


1. 经典的 Cross Entropy 问题

注意,许多初学者这么使用交叉熵 loss

F.softmax(y)

F.cross_entropy(y, label)

Wrong × 错误的

在别的深度库里这么使用可能正确,但在 torch 中使用是极大的错误,因为在这里 cross_entropy = softmax + log + corss_entropy(一般意义的交叉熵)。所以如果使用交叉熵时注意不要使用 softmax 了,我在犯了如上错误的时候出现 loss 不收敛的问题。

2. 学习率 Learning rate 设定

学习率过大

学习率过大是很严重的问题,我在使用均方误差时设置了过大的学习率,导致甚至无法将一个矩阵通过学习网络拟合目标矩阵。由此可窥见,学习率设置过大,等同于直接寄了

3. 学会查看梯度和结果

在训练网络中发现了结果一直不变的问题,就去输出看看网络参数:

for p in model.parameters():
    print(p.grad.data)

4. 数据集大小的问题

这个问题我还在探究中,目前我将一个大数据集(约60+G)挖了一小部分(2G左右)进行训练,暂时不知道会不会导致结果直接不收敛的问题。

正在探究中ing......

5. 梯度消失/梯度爆炸

上图,千万别以为这种情况是正常滴,大大滴错误(前一半的grad为0,后一半的grad正常)

 这种情况其实就叫梯度消失,它是影响我们 loss 下降的敌人。还有一种情况相反的状况,梯度不为0,而是nan,这种是梯度爆炸。遇到这种情况,一般 loss 表现为不下降或者直接是 loss=nan了。

总结一下从网上找到的解决方法

5.1 Learning rate 过大

前面提过,这个略过,反正设为 0.001 或者 0.0001 就行

5.2 Batch size 过大

没错,batch size 也可能会对拟合结果造成影响,可以适当调低 batch size

5.3 初始化权重的问题

有人提到,可能是初始化权重更新错误导致,在模型中加入Xavier初始化

for layer in self.modules():
    if isinstance(layer, nn.Linear):
        nn.init.xavier_normal_(layer.weight)
        nn.init.constant_(layer.bias, 0)

5.4 梯度归一化

nn.BatchNorm1d(input_num)

使用 BatchNorm1d 进行归一化,在梯度消失的每层都进行帝都诡异

5.5 数据和label确实出现了问题

这个是我感觉最难找出来的问题了,但实际上很多情况下,这个问题又很容易出现。特别是在数据集和测试集是自己生成、合成的情况下,特别容易出现这种问题。

推荐先排除 5.1 - 5.4,都试试,最后再来看是不是发生了此类问题

6. 一些建模上的问题

!注意!:Batch Norm 和 Layer Norm 应放在激活函数和输出结果之间,BatchNorm适合图像,LayerNorm适合音频和NLP

!!有些模型中需要用的mean或者sum,注意不要放在softmax之后了,不然会出现概率都相同的情况。

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

### MMDetection 安装常见问题及解决方案 #### 1. **依赖库版本冲突** 在安装 `mmdetection` 的过程中,可能会遇到依赖库版本兼容的问题。例如,在执行命令 `pip install -r requirements.txt` 后可能出现错误提示。 - 可能原因:某些依赖库的版本可能与其他已安装的 Python 库存在冲突。 - 解决方案:建议创建一个新的虚拟环境来隔离依赖项[^1]。可以使用以下命令创建并激活虚拟环境: ```bash python -m venv mmdet_env source mmdet_env/bin/activate ``` 接着重新运行安装命令以确保所有依赖都被正确安装。 --- #### 2. **CUDA 和 PyTorch 版本匹配** 如果系统中的 CUDA 或 PyTorch 版本与 `mmdetection` 所需的版本符,则可能导致无法正常编译或运行模型。 - 可能原因:`mmdetection` 需要特定版本的 PyTorch 来支持其功能,而同版本的 PyTorch 对应同的 CUDA 支持。 - 解决方案:确认当前系统的 CUDA 版本,并按照官方文档推荐的方式安装合适的 PyTorch 版本。可以通过以下命令检查 CUDA 和 PyTorch 是否适配: ```python import torch print(torch.cuda.is_available()) print(torch.__version__) ``` 必要时卸载现有 PyTorch 并通过指定 URL 进行重装,例如: ```bash pip uninstall torch torchvision torchaudio pip install torch==1.9.0+cu111 torchvision==0.10.0+cu111 torchaudio===0.9.0 -f https://download.pytorch.org/whl/torch_stable.html ``` --- #### 3. **预训练模型加载失败** 当尝试加载预训练模型时,可能会因为网络连接稳定或其他原因导致下载中断或者路径配置错误。 - 可能原因:`load_from` 参数指向的远程地址可访问,或者是本地文件路径设置当。 - 解决方案:可以选择手动下载所需的 `.pth` 文件到本地目录,并修改配置文件中的 `load_from` 字段为其绝对路径[^2]。例如: ```yaml load_from: '/path/to/local_model.pth' ``` 另外,也可以切换至国内镜像站点加速下载过程,比如清华 TUNA 提供的服务。 --- #### 4. **无锚框 (Anchor-Free) 方法的支持** 部分用户希望实现更先进的目标检测算法,如基于无锚框的设计。然而,默认情况下并非所有的模型均采用此类技术路线。 - 可能原因:传统的目标检测框架多基于有锚框机制构建,因此需要特别关注哪些具体模型实现了 Anchor-Free 思想。 - 解决方案:查阅最新版 `mmdetection` 文档寻找支持该特性的模块列表[^3]。通常包括但限于 FCOS、CenterNet 等系列模型。调整实验所使用的 config 文件以启用这些特性。 --- #### 5. **目标检测的实际意义及其应用领域** 对于初学者而言理解为何引入目标检测以及它的实际用途非常重要。 - 背景说明:目标检测作为计算机视觉的核心任务之一广泛应用于诸如自动驾驶汽车感知周围障碍物位置大小类别;安防摄像头实时分析异常行为事件触发报警信号等领域[^4]。 - 实践指导:结合个人兴趣方向挑选合适的数据集开展研究探索活动,逐步熟悉整个工作流程直至能够独立完成定制化开发需求为止。 --- ### 示例代码片段展示如何验证安装成功与否 下面给出一段简单的测试脚本来判断是否顺利完成全部准备工作: ```python from mmdet.apis import init_detector, inference_detector import mmcv # 加载模型 config_file = 'configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py' checkpoint_file = 'checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth' model = init_detector(config_file, checkpoint_file, device='cuda:0') # 推理图片 img = 'test.jpg' result = inference_detector(model, img) # 显示结果 mmcv.imshow_det_bboxes(img, result, model.CLASSES, score_thr=0.5) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值