背景
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)