pytorch深度学习遇到的坑
记录学习过程中遇到的一些问题以及解决方案。
Q1:pytorch自定义损失函数类无法调用
在继承了nn.Module的情况下,并且函数内数学运算均为torch内置函数(运算过程不能够破坏pytorch计算图,否则梯度无法正确反向传播),依旧无法调用:
- 初始化有问题 可以尝试在类构造函数末尾加入return;
- 调用方式错误 在调用构造类对象时,不能直接进行调用,要先构造类对象,然后使用类对象来进行损失的计算;
Q2:Out of memory显存不够
显存的运算和batch size以及图像大小息息相关,显存不够的解决办法:
1.调低batch size
2.将图像进行resize尺寸变小
Q3:训练损失几乎无变化
- 原始数据集数据不好 原始数据集标注对应关系有问题,网络将无法学习对应关系;
- 网络模型过于简单 对于复杂关系的学习,模型过于简单参数过少,无法匹配对应关系,需要换一个更复杂的模型;
- 学习率设置不合理 过大或者过小都会影响网络的学习效果,因此需要调整学习率;
- 数据量很大 若数据集数据量很大,则需要等待一定的时间损失才会下降;
- Batch Size设置不合理 batch size设置过小,计算损失的数据量不够充分;
- 数据集量过小 数据过少,容易出现过拟合。
- 数据从卷积网络中输出未归一化 需要在网络后加入batch normalization
Q4:训练集损失小于验证集
1.正则化过度…To Do