#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. Как бы вы отдали их снова в модель?