pytorch CNN新手问题汇总

背景

CNN弃坑了好久,最近上了4060显卡,于是尝试复健玩玩,不跑跑cnn对不起这全新女骑士啦(但愿是全新吧,悲!)。之前入门过tenseoflow一段时间,现在基本忘光了,最近听说pythorch用起来比tensorflow要更简单一些,于是尝尝鲜。

问题一:TypeError: can’t convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.

发生在你的网络在GPU上训练,但是出于某些原因,你需要从tensor转换回numpy array来进一步计算

predict=torch.max(test_out,1)[1].data.numpy()

比如进行上述操作时,就报这个错。根据网上的一些说法,原因时.numpy()操作是在cpu上完成的,而这时候你的tensor在GPU,然后因为设备不同导致报错。
正确操作应该:

predict=torch.max(test_out.cpu(),1)[1].data.numpy()

问题二:RuntimeError: Input type(torch.cuda.FloatTensor) and weight type(torch.FloatTensor) should be the same

发生在用GPU训练时,输入数据没有指定到GPU上。参考这篇文章,一般用

device=torch.device('cuda' if torch.cuda.is_available() else 'cpu')
data=data.to(device)

来解决。
描述一下我报这个错的原因,是我用了DataLoader,然后在训练时:

for epo in range(epoch):
    for step,(b_x,b_y) in enumerate(train_loader):
           .......................

这里的b_x和b_y在pycharm上居然提示没有.to()这个方法,导致我以为DataLoader能自动把数据送上GPU,然而实践发现,其实b_x,b_y其实有.to()方法,只是pycharm的语法检查误导我。

问题三:ValueError: optimizer got an empty parameter list

参考这篇文章。一般是网络初始化出现了问题,即:
CNN(nn.model)这个类的__init__函数有问题。

如__init__函数写错,少了_或init拼写错,又或者函数的tab缩进错误,导致__init__函数包下了它不应该包的代码。
又如super函数漏了或拼写错。

问题四:TypeError: expected TensorOptions(dtype=float, device=cpu, layout=Strided, requires_grad=false (default), pinned_memory=false (default), memory_format=(nullopt)) (got TensorOptions(dtype=unsigned char, device=cuda:0, layout=Strided, requires_grad=false (default), pinned_memory=false (default), memory_format=(nullopt)))

我遇到这个问题是尝试将torch.uint8,直接用torch.FloatTensor()转成torch.float32
同类问题:FloatTensor和LongTensor的转换。我也是参考这个改好的。
其实感觉就是pythorch里不同类型的tensor不能直接转换,必须先通过data.numpy()转成ndarray,再转换为目标tensor类型。

问题五:cv2.error: OpenCV(4.9.0) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\demosaicing.cpp:1701: error: (-215:Assertion failed) scn == 1 && dcn == 1 in function ‘cv::demosaicing’

我是参考这篇文章解决的
这个是opencv的cv2.cvtColor函数报错,我的目的是想将图像从RGB转成灰度图。错误的原因是将参数:

cv2.COLOR_BGR2GRAY

错误地写成了这个参数:

cv2.COLOR_BAYER_BGR2GRAY

只要将参数改过来即可不报错。我写错的原因可能是pycharm代码补全时不小心选错了。
因此正确写法为:

cv2.cvtColor(blurredSrc, cv2.COLOR_BGR2GRAY)

先总结这么多,后续问题待补充

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值