我正在编写一个神经网络(CNN(,其中我提供图像作为网络的输入。我想将图像转换为灰度,以将图像的深度从 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 x 64 x 3转换为灰度后,我应该得到 64 x 64 x 1。
打印出我的数组 X 的形状
print(X_train.shape[0], 'train samples')
Output - X_train shape: (15984, 64, 64)
15984是图像数量。我预计输出为 (15984, 64, 64,1(
我的神经网络给了我这个错误:
值错误:无法为形状为"(?, ?, ?, 3("的张量"image_input:0"提供形状 (64, 64, 64( 的值
请通过帮助指导我。
当您像在那里一样灰度加载图像时,如果您检查形状将是 (64,64(,当您添加和堆叠此图像时,您最终会得到 (15984, 64, 64(。使用(64,64(的图像表示可以看作是一个通道64×64像素的矩阵。如果需要添加缺少的通道轴,可以使用:
img = img[:,:,np.newaxis]
然后你最终会得到类似 (64,64,1( 的形状。
注意:您可以在 X_train
上执行相同的过程。有关此的更多信息,您可以查看numpy.expand_dims。