Почему мой последовательный слой несовместим со слоем в CNN?

#python #machine-learning #keras #neural-network #conv-neural-network

Вопрос:

Я построил и обучил свою модель CNN и хочу протестировать ее с помощью своего тестового файла. Я написал сценарий, который принимает входное изображение из указанного пути к каталогу. Однако, когда я запускаю код:

     img_width, img_height = 128, 128
test_data_dir = '/content/drive/MyDrive/Satdat/testing/'
def get_features():
    datagen = ImageDataGenerator(rescale=1. / 255)
    model = Model(inputs=inputs, outputs=outputs)
    generator = datagen.flow_from_directory(
        test_data_dir,
        target_size=(img_width, img_height),
        batch_size=1,
        class_mode='binary',
        shuffle=False)
    features = model.predict(
        generator, 990)
    return features
def get_score():
    features = get_features()    
    model = Sequential()
    model.add(Conv2D(16, (5, 5), strides=(3,3), activation='relu'))
    model.add(ZeroPadding2D(padding=(1,1)))
    model.add(Conv2D(32, (5, 5), strides=(3,3), activation='relu'))
    model.add(MaxPooling2D((2, 2)))
    model.add(Conv2D(64, (3, 3), strides=(1,1), activation='relu'))
    model.add(Conv2D(64, (3, 3), strides=(1,1), activation='relu'))
    model.add(Flatten())
    model.add(Dense(32, activation='relu'))
    model.add(Dropout(0.2))
    model.add(Dense(1, activation='sigmoid'))   
    model.load_weights('cnn.py')
    score = model.predict(features)
    print(score)
get_score()
 

эта ошибка всплывает:

 Found 990 images belonging to 1 classes.
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-42-cc8d93eefb66> in <module>()
     39     print(score)
     40 
---> 41 get_score()

    10 frames
/usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/func_graph.py in wrapper(*args, **kwargs)
    992           except Exception as e:  # pylint:disable=broad-except
    993             if hasattr(e, "ag_error_metadata"):
--> 994               raise e.ag_error_metadata.to_exception(e)
    995             else:
    996               raise

ValueError: in user code:

    /usr/local/lib/python3.7/dist-packages/keras/engine/training.py:1586 predict_function  *
    return step_function(self, iterator)
    /usr/local/lib/python3.7/dist-packages/keras/engine/training.py:1576 step_function  **
    outputs = model.distribute_strategy.run(run_step, args=(data,))
    /usr/local/lib/python3.7/dist-packages/tensorflow/python/distribute/distribute_lib.py:1286 run
        return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
    /usr/local/lib/python3.7/dist-packages/tensorflow/python/distribute/distribute_lib.py:2849     call_for_each_replica
        return self._call_for_each_replica(fn, args, kwargs)
    /usr/local/lib/python3.7/dist-packages/tensorflow/python/distribute/distribute_lib.py:3632     _call_for_each_replica
        return fn(*args, **kwargs)
    /usr/local/lib/python3.7/dist-packages/keras/engine/training.py:1569 run_step  **
        outputs = model.predict_step(data)
    /usr/local/lib/python3.7/dist-packages/keras/engine/training.py:1537 predict_step
        return self(x, training=False)
    /usr/local/lib/python3.7/dist-packages/keras/engine/base_layer.py:1020 __call__
        input_spec.assert_input_compatibility(self.input_spec, inputs, self.name)
    /usr/local/lib/python3.7/dist-packages/keras/engine/input_spec.py:234     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, 1)
 

Что я делаю не так или я просто что-то упускаю? Кроме того, я попробовал то же самое с model.predict_classes() и model.predict_generator (), но появляется та же ошибка.

Комментарии:

1. features это просто массив с предсказаниями модели, который состоит из значений от 0 до 1. Как бы вы отдали их снова в модель?