Ошибка при прогнозировании изображения с помощью модели 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)

Другие вопросы по тегам