pytorch遇到的问题1

  • 问题一

RuntimeError:Given groups=1,weight of size[16,3,3,3],expected input[1,384,384,3] to have 3 channels,but got 384 channels instead.

我写的网络的nn.Conv2d(3,16,3,1,padding=1),要求输入通道为3,输出是16,网络对于四个参数的认识是第一位是batch_size,即是读入图片的数量,这里我输入的是1,第二位是输入的通道数,要求是3,但我读取图片时,默认的是行*列*通道数,所以输入到网络中出错了,需要交换通道数和行列的位置,即使之成为通道数*行*列,具体方法为input=numpy.transpose(numpy,(0,3,1,2))。

注意:网络的输入格式是(batch_size,channels,rows,cols)

  • 问题二

error: OpenCV(4.0.0) C:\projects\opencv-python\opencv\modules\highgui\src\window_w32.cpp:1227: error:

(-215:Assertion failed) src.channels() == 3 in function 'cvShowImage'

解释:这里出错是由于网络输出的大小是(batch_size,channels,rows,cols);但图像显示是要求(rows,cols,channels),和问题一相似,也需要交换位置。

  • 问题三

图片的定义:out3=numpy.zeros([3,384,384],numpy.float),cv显示不了float64的图像,所以可以定义为out3=numpy.zeros([3,384,384],numpy.float32)或out3=numpy.zeros([3,384,384],numpy.uint8)

out3=out3.astype(numpy.uint8)

  • 问题四:

ValueError: only one element tensors can be converted to Python scalars

源码:out=input.item(),这里出错的原因在于input是一个多维的图像数组,这行代码是对所有的数进行一次变换,但是实际上只允许一对一的变换,所以代码可以变为:

for k in range(out2.shape[0]):
    for i in range(out2.shape[1]):
        for j in range(out2.shape[2]):
            out3[i,j]=out2[i,j].item()*255

猜你喜欢

转载自blog.csdn.net/weixin_43989326/article/details/89447867