Numpy массив изображений неправильного размера Python и 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))

Таким образом, по какой-то причине массив изображений является только двухмерным, тогда как он должен быть четырехмерным. Как я могу конвертировать myarray чтобы он мог работать с экстрактором функций?

1 ответ

Решение

Прежде всего, убедитесь, что все изображения в 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.

Другие вопросы по тегам