将Keras的1D图像阵列重塑为4D

时间:2020-05-04 03:31:39

标签: python arrays keras reshape

使用keras构建CNN比较笔迹时,我需要传递4D数组。但是,我的图像阵列只有一维,其中每个条目都是(250,250,3)图像。

print(x_train[0].shape)
>> (250,250,3)
print(x_train.shape)
>> (543, 1)

我收到以下错误:“预期conv2d_1_input具有4个维,但数组的形状为(543,1)”(请注意,该大小非常小,因为在构建数据库之前,我试图使网络工作)。

我已经看到了几个带有建议修复的线程,可以将我的数组转换为(n_length,250,250,3)的形式-我认为。但是他们似乎都不适合我。我天真地尝试用

重塑数组
x_train.reshape(len(x_train),250,250,3)

这显然会引发错误。如有任何建议,将不胜感激。

2 个答案:

答案 0 :(得分:0)

x_train.reshape(len(x_train),250,250,3)-如果所有图像都具有相同的尺寸,则肯定可以正常工作。

您可以尝试固定其尺寸并删除任何损坏的图像。

import cv2
x_train2 = []
for img in x_train:
    if len(img.shape) == 3:
        x_train2.append(cv2.resize(img, (250,250,3)))

x_train = np.array(x_train2).reshape(len(x_train2),250,250,3)

答案 1 :(得分:0)

您可以做的是先创建一个空的numpy数组,然后使用 for 循环复制x_train数据。

new_x = np.empty((len(x_train),250,250,3))

for i in range(len(x_train)):
    new_x[i] = x_train[i]