Ошибка при прогнозировании изображения с помощью модели keras .hdf5
Я пытаюсь предсказать изображение с помощью сиамской нейронной сети, у меня есть модель с форматом.hdf5, сначала я пытаюсь загрузить изображение, которое я хочу предсказать, затем загружаю модель, и последний вызов.predict, чтобы предсказать изображение, которое я хочу знать. это код, который я пробую
img = cv2.imread('/Users/tania/Desktop/TEST/Pa/Pu/Pu - Copy (3).PNG')
siamese_model1.load_weights("/Users/tania/Desktop/weights/siamese_n1.hdf5")
siamese_model1.predict(img)
и я нашел эту ошибку
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-65-789026f30db8> in <module>
1 img = cv2.imread('/Users/tania/Desktop/TEST/Pa/Pu/Pu - Copy (3).PNG')
2 siamese_model1.load_weights("/Users/tania/Desktop/weights/siamese_n1.hdf5")
----> 3 siamese_model1.predict(img)
/opt/miniconda3/envs/tensorflow/lib/python3.7/site-packages/keras/engine/training.py in predict(self, x, batch_size, verbose, steps, callbacks, max_queue_size, workers, use_multiprocessing)
1439
1440 # Case 2: Symbolic tensors or Numpy array-like.
-> 1441 x, _, _ = self._standardize_user_data(x)
1442 if self.stateful:
1443 if x[0].shape[0] > batch_size and x[0].shape[0] % batch_size != 0:
/opt/miniconda3/envs/tensorflow/lib/python3.7/site-packages/keras/engine/training.py in _standardize_user_data(self, x, y, sample_weight, class_weight, check_array_lengths, batch_size)
577 feed_input_shapes,
578 check_batch_axis=False, # Don't enforce the batch size.
--> 579 exception_prefix='input')
580
581 if y is not None:
/opt/miniconda3/envs/tensorflow/lib/python3.7/site-packages/keras/engine/training_utils.py in standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix)
107 'Expected to see ' + str(len(names)) + ' array(s), '
108 'but instead got the following list of ' +
--> 109 str(len(data)) + ' arrays: ' + str(data)[:200] + '...')
110 elif len(names) > 1:
111 raise ValueError(
ValueError: Error when checking model input: the list of Numpy arrays that you are passing to your model is not the size the model expected. Expected to see 2 array(s), but instead got the following list of 1 arrays: [array([[[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
...,
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]],
[[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
...,
...
как я могу это решить? или есть способ решить это?
сводка модели
Model: "model_2"
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
input_1 (InputLayer) (None, 105, 105, 1) 0
__________________________________________________________________________________________________
input_2 (InputLayer) (None, 105, 105, 1) 0
__________________________________________________________________________________________________
model_1 (Model) (None, 4096) 38947648 input_1[0][0]
input_2[0][0]
__________________________________________________________________________________________________
lambda_1 (Lambda) (None, 4096) 0 model_1[1][0]
model_1[2][0]
__________________________________________________________________________________________________
dense_2 (Dense) (None, 1) 4097 lambda_1[0][0]
==================================================================================================
Total params: 38,951,745
Trainable params: 38,951,745
Non-trainable params: 0
__________________________________________________________________________________________________
и сиамцы вроде этого
# Siamese Network
def build_network(conv_model):
# Build two networks
input_shape = (105, 105, 1)
input1 = Input(input_shape)
input2 = Input(input_shape)
model = conv_model(input_shape)
model_output_left = model(input1)
model_output_right = model(input2)
def l1_distance(x):
return K.abs(x[0] - x[1])
def l1_distance_shape(x):
print(x)
return x[0]
merged_model = keras.layers.Lambda(l1_distance)([model_output_left, model_output_right])
#merged_model = merge([model_output_left, model_output_right], mode=l1_distance, output_shape=l1_distance_shape)
output = Dense(1, activation='sigmoid')(merged_model)
siamese_model = Model([input1, input2], output)
return siamese_model
1 ответ
Я проверил, что форма вашего ввода не соответствует требованиям модели. Перепроверьте ввод вашей модели, запустив следующий код:img.shape
. Убедитесь, что форма вашего изображения(105,105,1)
который совместим с вводом модели.
Кроме того, поскольку siamese_model.predict()
принять ввод как пакет, форма ввода (105,105,1)
не совместим. Таким образом, убедитесь, что вы изменили свое изображение на форму(1,105,105,1)
(что эквивалентно использованию размера пакета прогнозирования 1).
TL;DR запустите следующий код:img = img.reshape(1,105,105,1)