Numpy数组图像错误维度Python和Keras

时间:2018-05-10 06:38:41

标签: python arrays numpy keras resnet

我正在构建一个图像分类器,并尝试使用keras计算数据集的功能,但我的数组维度不是正确的格式。我正在

ValueError: Error when checking : expected input_1 to have 4 dimensions, but got array with shape (324398, 1)

我的代码是:

import glob
from keras.applications.resnet50 import ResNet50

def extract_resnet(X):  
    # X : images numpy array
    resnet_model = ResNet50(input_shape=(image_h, image_w, 3), 
    weights='imagenet', include_top=False)  # Since top layer is the fc layer used for predictions
    features_array = resnet_model.predict(X)
    return features_array
filelist = glob.glob('dataset/*.jpg')
myarray = np.array([np.array(Image.open(fname)) for fname in filelist])
print(extract_resnet(myarray))

所以看起来由于某种原因,图像数组只有二维才应该是4维。如何转换myarray以便它能够使用特征提取器?

1 个答案:

答案 0 :(得分:2)

首先,确保dataset目录中的所有图片都具有相同的尺寸(image_h, image_w, 3)

print([np.array(Image.open(fname)).shape for fname in filelist])

如果不是,您将无法制作小批量,因此您只需要选择合适图像的子集。如果大小合适,则可以手动重新整形阵列:

myarray = myarray.reshape([-1, image_h, image_w, 3])

...完全符合ResNet规范。