Использование готовой Keras модели нейронной сети
Нейронная сеть по распознаванию изображений.
При использовании готовой, обученной h5 модели возникает такая ошибка:
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/input_spec.py:239 assert_input_compatibility
str(tuple(shape)))
ValueError: Input 0 of layer sequential_6 is incompatible with the layer: : expected min_ndim=4, found ndim=2. Full shape received: (None, 40000)
Вот информация модели моей сети:
Model: "sequential_6"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_24 (Conv2D) (None, 200, 200, 16) 1216
_________________________________________________________________
max_pooling2d_24 (MaxPooling (None, 100, 100, 16) 0
_________________________________________________________________
conv2d_25 (Conv2D) (None, 100, 100, 32) 12832
_________________________________________________________________
max_pooling2d_25 (MaxPooling (None, 50, 50, 32) 0
_________________________________________________________________
conv2d_26 (Conv2D) (None, 50, 50, 64) 51264
_________________________________________________________________
max_pooling2d_26 (MaxPooling (None, 25, 25, 64) 0
_________________________________________________________________
conv2d_27 (Conv2D) (None, 25, 25, 128) 204928
_________________________________________________________________
max_pooling2d_27 (MaxPooling (None, 12, 12, 128) 0
_________________________________________________________________
flatten_6 (Flatten) (None, 18432) 0
_________________________________________________________________
dense_18 (Dense) (None, 1024) 18875392
_________________________________________________________________
dropout_12 (Dropout) (None, 1024) 0
_________________________________________________________________
dense_19 (Dense) (None, 256) 262400
_________________________________________________________________
dropout_13 (Dropout) (None, 256) 0
_________________________________________________________________
dense_20 (Dense) (None, 3) 771
=================================================================
Total params: 19,408,803
Trainable params: 19,408,803
Non-trainable params: 0
Данные которые должны быть поданы на вход: Изображение 200x200 px
Код подачи изображения:
img_path = '9.jpeg'
Image(img_path, width=200, height=200)
img = image.load_img(img_path, target_size=(200, 200), color_mode = "grayscale")
x = image.img_to_array(img)
x = x.reshape(1, 40000)
x = 255 - x
x /= 255
prediction = model.predict(x)
Код создания модели:
# Создаем последовательную модель
model = Sequential()
# Сверточный слой
model.add(Conv2D(16, (5, 5), padding='same',
input_shape=(200, 200, 3), activation='relu'))
# Слой подвыборки
model.add(MaxPooling2D(pool_size=(2, 2)))
# Сверточный слой
model.add(Conv2D(32, (5, 5), activation='relu', padding='same'))
# Слой подвыборки
model.add(MaxPooling2D(pool_size=(2, 2)))
# Сверточный слой
model.add(Conv2D(64, (5, 5), activation='relu', padding='same'))
# Слой подвыборки
model.add(MaxPooling2D(pool_size=(2, 2)))
# Сверточный слой
model.add(Conv2D(128, (5, 5), activation='relu', padding='same'))
# Слой подвыборки
model.add(MaxPooling2D(pool_size=(2, 2)))
# Полносвязная часть нейронной сети для классификации
model.add(Flatten())
model.add(Dense(1024, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.2))
# Выходной слой, 131 нейрон по количеству классов
model.add(Dense(3, activation='softmax') )