文章目录
- local variable 'val_loss' referenced before assignment
- CUDA out of memory 怎么解决?
- [Errno 32] Broken pipe
- AttributeError: ‘NoneType‘ object has no attribute dim
- Target size (torch.Size([4, 1, 256, 256])) must be the same as input size (torch.Size([4, 1, 248, 248])
- python报错‘xxx’ object has no attribute ‘xxx’
- No module named 'lmdb' 的解决办法
local variable ‘val_loss’ referenced before assignment
第一种是变量没有赋值
def test():
print(a)
这里a没有赋值,应该改成如下形式
def test():
a = 1
print(a)
第二种是全局变量没有声明
a = 1
def test():
print(a)
在这里a是全局变量,在定义函数中需要进行变量声明,该为如下形式
a = 1
def test():
global a # 声明引用的是全局变量
print(a)
参考博客:local variable referenced before assignment 原因及解决办法
CUDA out of memory 怎么解决?
RuntimeError: CUDA out of memory. Tried to allocate 20.00 MiB (GPU 0; 6.00 GiB total capacity; 192.37 MiB already allocated; 11.46 MiB free; 204.00 MiB reserved in total by PyTorch)
- 减小输入的尺寸;
- 减少输入的batch size;
- 将网络结构改小;
- 使用新版pytorch的fp16半精度训练,net.half()就行,理论上可以减少一半显存;
- 以上的方法混用,对精度有所影响,谨慎使用
- 不计算梯度
使用with torch.no_grad():
给出一篇博主写的博客:pytorch运行错误:CUDA out of memory - 释放内存
在报错代码前加上以下代码,释放无关内存:
if hasattr(torch.cuda, 'empty_cache'):
torch.cuda.empty_cache()
参考博客:解决:RuntimeError: CUDA out of memory. Tried to allocate 2.00 MiB
pytorch: 四种方法解决RuntimeError: CUDA out of memory. Tried to allocate … MiB
[Errno 32] Broken pipe
源自博文:BrokenPipeError: [Errno 32] Broken pipe 基于pytorch的训练 num_worker参数理解
BrokenPipeError: [Errno 32] Broken pipe 解决
在这里插入图片描述
原因:
在训练过程中,设置的num_workers过大
在这里插入图片描述
修改为 num_workers=0 即可。
num_worker参数理解
下面作者讲的很详细,大致就是设置参数大的话,例如参数为10,就可以有10个线程来加载batch到内存。当然参数设置过大,而自己内存不够的情况下,就会出现线程管道破裂,即broken pipe ,所以一般默然设置为0.
当然:如果num_worker设为0,意味着每一轮迭代时,dataloader不再有自主加载数据到RAM这一步骤(因为没有worker了),而是在RAM中找batch,找不到时再加载相应的batch。缺点当然是速度更慢。
具体参考以下链接。
参考:pytorch中num_workers详解
AttributeError: ‘NoneType‘ object has no attribute dim
参考博客:AttributeError: ‘NoneType‘ object has no attribute ‘dim BN层
Target size (torch.Size([4, 1, 256, 256])) must be the same as input size (torch.Size([4, 1, 248, 248])
原因:output,mask的尺寸不匹配
python报错‘xxx’ object has no attribute ‘xxx’
参考博客:python报错‘StandardScaler’ object has no attribute ‘transfrom’
No module named ‘lmdb’ 的解决办法
conda install -c conda-forge python-lmdb