Что касается первой ошибки, проблема заключается в том, что приложение фляги пытается загрузить полную модель (т.е. с конфигурацией):
model = load_model(MODEL_PATH)
, тогда как после тренировки вы сохраняете только веса:
cnn.save_weights('cnn.h5')
Попробуйте вместо этого использовать cnn.save('cnn.h5')
.
Во втором случае определение вашей модели не соответствует обученной модели.Действительно, это совершенно другая модель, в которой вообще нет слоев свертки.Соответствующее определение модели будет:
def build_model():
model = Sequential()
model.add(Conv2D(filters=32,
kernel_size=(2,2),
strides=(1,1),
padding='same',
input_shape=(IMG_SIZE,IMG_SIZE,NB_CHANNELS),
data_format='channels_last'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2),
strides=2))
model.add(Dropout(0.4))
model.add(Conv2D(filters=64,
kernel_size=(2,2),
strides=(1,1),
padding='valid'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2),
strides=2))
model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
return model