我正在编程一个神经网络(CNN),我在那里提供图像作为网络的输入。 我想把图像Ccovert变成灰度,将图像的深度从3减少到1。
我使用OpenCV函数进行转换如下。
X = []
for name in cars:
img = cv2.imread(name,cv2.IMREAD_GRAYSCALE)
X.append(img)
for name in non_cars:
img = cv2.imread(name,cv2.IMREAD_GRAYSCALE)
X.append(img)
已创建X,其中包含用于培训目的的数据。
每个图像是64乘64乘3 转换为灰度后,我应该得到64乘64比1。
打印出我的阵列X的形状
print(X_train.shape[0], 'train samples')
Output - X_train shape: (15984, 64, 64)
15984是图像数量。 我期待输出为(15984,64,64,1)
我的神经网络给了我这个错误:
ValueError:无法为Tensor'image_input:0'提供形状值(64,64,64),其形状为'(?,?,?,3)'
请指导我帮助。
答案 0 :(得分:1)
当你在那里加载图像作为灰度时,如果检查形状将是(64,64),当你添加和堆叠这些图像时,你将最终得到(15984,64,64)。使用(64,64)的图像表示可以被视为64×64像素的一个通道的矩阵。如果您需要添加缺少的通道轴,可以使用:
img = img[:,:,np.newaxis]
然后你会得到像(64,64,1)那样的形状。
注意:您可以在X_train
上执行相同的操作。有关详情,请查看numpy.expand_dims。