Ошибка при повторном получении значения » decode_predictions` ожидает пакет прогнозов

#python #machine-learning #keras #conv-neural-network #pre-trained-model

Вопрос:

У меня есть следующий код, который пытается выполнить предсказания для части модели resnet. Однако я извлекаю ошибку.

 def layer_input_shape(Model, layer_index):
  input_shape = np.array(Model.layers[layer_index - 1].output_shape)
  input_shape = np.ndarray.tolist(np.delete(input_shape, 0))
  return input_shape

def resnet50_Model(Model, trainable=True):
  input_shape = layer_input_shape(Model, 1)
  input = tf.keras.layers.Input(shape=input_shape)
  first_layer = Model.layers[0]
  first_layer.trainable = trainable
  out = first_layer(input)
  for i in range(1, 12):
    layer_i = Model.layers[i]
    layer_i.trainable = trainable
    out = layer_i(out)
  out = Conv2D(filters=2, kernel_size=2, strides=(2,2), activation='relu')(out)
  out = Flatten()(out)
  out = Dense(units=2,activation='softmax')(out)
  result_model = tf.keras.models.Model(inputs=[input], outputs=out)
  return result_model

  from tensorflow.keras.applications.resnet50 import preprocess_input, decode_predictions
  img='/content/elephant.jpg'
  img = image.load_img(img, target_size=(224, 224))
  x = image.img_to_array(img)
  x = np.expand_dims(x, axis=0)
  x = preprocess_input(x)
  preds = resnet_skip_model.predict(x)
  print('Predicted:', decode_predictions(preds, top=3)[0])
 

Получение приведенной ниже ошибки:

 ValueError: `decode_predictions` expects a batch of predictions (i.e. a 2D array of shape (samples, 
1000)). Found array with shape: (1, 3)
 

Ответ №1:

Я добавил два выходных плотных слоя, поэтому я могу предсказать только два класса, и когда я вызываю decode, он ожидает 1000 выходных данных последнего плотного слоя, поэтому изменил единицы измерения с двух на 1000

  out = Dense(units=1000,activation='softmax')(out)