Saya mencoba menggunakan model terlatih berbasis Keras 2 incepctionV3 untuk memprediksi gambar untuk tujuan pengujian. Model asli saya berfungsi dengan baik, lalu saya mencoba membuat model dengan input_shape yang ditentukan (299.299,3)

base_model = InceptionV3(weights='imagenet', include_top=False, input_shape=(299,299,3)) 

Proses pelatihan terlihat baik-baik saja tetapi ketika saya mencoba menggunakannya untuk memprediksi gambar, itu menyebabkan kesalahan ini.

ValueError: Kesalahan saat memeriksa: input_1 yang diharapkan memiliki bentuk (Tidak ada, 299, 299, 3) tetapi mendapat array dengan bentuk (1, 229, 229, 3)

    import sys
    import argparse
    import numpy as np
    from PIL import Image
    from io import BytesIO

    from keras.preprocessing import image
    from keras.models import load_model
    from keras.applications.inception_v3 import preprocess_input


    target_size = (229, 229) #fixed size for InceptionV3 architecture


    def predict(model, img, target_size):
      """Run model prediction on image
      Args:
        model: keras model
        img: PIL format image
        target_size: (w,h) tuple
      Returns:
        list of predicted labels and their probabilities
      """
      if img.size != target_size:
        img = img.resize(target_size)

      x = image.img_to_array(img)
      print(x.shape)
      print("model input",model.inputs)
      print("model output",model.outputs)
      x = np.expand_dims(x, axis=0)
      #x = x[None,:,:,:]
      print(x.shape)
      x = preprocess_input(x)

      print(x.shape)
      preds = model.predict(x)
      print('Predicted:',preds)
      return preds[0]

Berikut hasil print outnya

(229, 229, 3)  
('model input', [<tf.Tensor 'input_1:0' shape=(?, 299, 299, 3) dtype=float32>])  
('model output', [<tf.Tensor 'dense_2/Softmax:0' shape=(?, 5) dtype=float32>]) 
(1, 229, 229, 3) 
(1, 229, 229, 3)

(1,299,299,3) berarti 1 gambar dalam 299 X 299 dengan 3 saluran. Apa arti input yang diharapkan dari model terlatih saya (Tidak Ada,299,299,3) dalam kasus ini? Bagaimana saya bisa membuat (Tidak Ada,299,299,3) dari (299,299,3)?

0
Kuroro 11 Agustus 2017, 14:36

2 jawaban

Jawaban Terbaik

Di sini masalahnya adalah ukuran gambar, atur ukuran yang diperlukan ke 299, 299

target_size = (299, 299) #fixed size for InceptionV3 architecture
2
Ishant Mrinal 11 Agustus 2017, 11:38

Kamu harus menggunakan

preds = model.predict(x, batch_size=1)

Batch_size=32 secara default. Dan Anda hanya memiliki satu gambar untuk diprediksi. (None,299,299,3) artinya dalam hal ini model.predict mengharapkan array dengan bentuk (n,299,299,3) dengan n > batch_size untuk memprosesnya batch demi batch dan mengembalikan (n, outputs_dim) array dimensi prediksi.

1
mih.net 11 Agustus 2017, 20:04