Ожидается, что conv2d_19_input будет иметь ошибку 4 измерений в CNN через Python

У меня проблема с решением измерения в методе предсказания CNN. Прежде чем определять данные для обучения и тестирования на основе изображения, я представил модель CNN. После того, как процесс был завершен, я подогнал модель. Когда я предсказываю значение с помощью модели, здесь возникает ошибка.

Как я могу это исправить?

Вот мои блоки кода, показанные ниже.

Мои библиотеки Keras

from keras.models import Sequential
from keras.layers import Convolution2D
from keras.layers import MaxPooling2D
from keras.layers import Flatten
from keras.layers import Dense
from keras.preprocessing.image import ImageDataGenerator

Вот моя модель CNN

classifier = Sequential()
classifier.add(Convolution2D(filters = 32, 
                             kernel_size=(3,3), 
                             data_format= "channels_last", 
                             input_shape=(64, 64, 3), 
                             activation="relu")
              )

classifier.add(MaxPooling2D(pool_size = (2,2)))

classifier.add(Convolution2D(32, (3, 3), activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))

classifier.add(Convolution2D(32, (3, 3), activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))

classifier.add(Flatten())

classifier.add(Dense(units = 128, activation = 'relu'))
classifier.add(Dense(units = 1, activation = 'sigmoid'))

classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])

Подгонка CNN к изображениям

train_datagen = ImageDataGenerator(
        rescale=1./255,
        shear_range=0.2,
        zoom_range=0.2,
        horizontal_flip=True)
test_datagen = ImageDataGenerator(rescale=1./255)

training_set = train_datagen.flow_from_directory(train_path, 
                                                 target_size=(64, 64), 
                                                 batch_size=32, 
                                                 class_mode='binary')

test_set = test_datagen.flow_from_directory(
        test_path,
        target_size=(64, 64),
        batch_size=32,
        class_mode='binary')

Подходящая модель

classifier.fit_generator(
        training_set,
        steps_per_epoch=50,
        epochs=30,
        validation_data=test_set,
        validation_steps=200)

Предсказание

S = 64

directory = os.listdir(test_forged_path)
print(directory[3])

print("Path : ", test_forged_path + "/" + directory[3])

imgForged = cv2.imread(test_forged_path + "/" + directory[3])
plt.imshow(imgForged)

pred = classifier.predict(imgForged) # ERROR
print("Probability of Forged Signature : ", "%.2f".format(pred))

Ошибка:

ValueError: Error when checking input: expected conv2d_19_input to have 4 dimensions, but got array with shape (270, 660, 3)

1 ответ

Решение

В predictВ вашем вводе отсутствует размер партии. Измените свой прогноз следующим образом:

import numpy as np <--- import numpy

S = 64

directory = os.listdir(test_forged_path)
print(directory[3])

print("Path : ", test_forged_path + "/" + directory[3])

imgForged = cv2.imread(test_forged_path + "/" + directory[3])
plt.imshow(imgForged)

pred = classifier.predict(np.expand_dims(imgForged,0)) # <-- add new axis to the front, shape will be (1, 270, 660, 3)
print("Probability of Forged Signature : ", "%.2f".format(pred))
Другие вопросы по тегам