web-dev-qa-db-fra.com

Argument de mot-clé inattendu «déchiré» dans Keras

Essayer d'exécuter un modèle de kéros formé avec le code python:

from keras.preprocessing.image import img_to_array
from keras.models import load_model

from imutils.video import VideoStream
from threading import Thread
import numpy as np
import imutils
import time
import cv2
import os

MODEL_PATH = "/home/pi/Documents/converted_keras/keras_model.h5"

print("[info] loading model..")
model = load_model(MODEL_PATH)


print("[info] starting vid stream..")
vs = VideoStream(usePiCamera=True).start()
time.sleep(2.0)

while True:
    frame = vs.Read()
    frame = imutils.resize(frame, width=400)

    image = cv2.resize(frame, (28, 28))
    image = image.astype("float") / 255.0
    image = img_to_array(image)
    image = np.expand_dims(image, axis=0)
    (fuel, redBall, whiteBall, none) = model.predict(image)[0]
    label = "none"
    proba = none

    if fuel > none and fuel > redBall and fuel > whiteBall:
        label = "Fuel"
        proba = fuel
    Elif redBall > none and redBall > fuel and redBall > whiteBall:
        label = "Red Ball"
        proba = redBall
    Elif whiteBall > none and whiteBall > redBall and whiteBall > fuel:
        label = "white ball"
        proba = whiteBall
    else:
        label = "none"
        proba = none

    label = "{}:{:.2f%}".format(label, proba * 100)
    frame = cv2.putText(frame, label, (10, 25),
                        cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
    cv2.imshow("Frame", frame)
    key = cv2.waitKey(1) & 0xFF

    if key == ord("q"):
        break

print("[info] cleaning up..")
cv2.destroyAllWindows()
vs.stop()

Lorsque je l'exécute avec python3, j'obtiens l'erreur suivante: TypeError: __init__() got an unexpected keyword argument 'ragged'

Quelle est la cause de l'erreur et comment puis-je la contourner?

Versions: Keras v2.3.1 tensorflow v1.13.1

Modifier pour ajouter:

Traceback (most recent call last):
  File "/home/pi/Documents/converted_keras/keras-script.py", line 18, in <module>
    model = load_model(MODEL_PATH)
  File "/usr/local/lib/python3.7/dist-packages/keras/engine/saving.py", line 492, in load_wrapper
    return load_function(*args, **kwargs)
  File "/usr/local/lib/python3.7/dist-packages/keras/engine/saving.py", line 584, in load_model
    model = _deserialize_model(h5dict, custom_objects, compile)
  File "/usr/local/lib/python3.7/dist-packages/keras/engine/saving.py", line 274, in _deserialize_model
    model = model_from_config(model_config, custom_objects=custom_objects)
  File "/usr/local/lib/python3.7/dist-packages/keras/engine/saving.py", line 627, in model_from_config
    return deserialize(config, custom_objects=custom_objects)
  File "/usr/local/lib/python3.7/dist-packages/keras/layers/__init__.py", line 168, in deserialize
    printable_module_name='layer')
  File "/usr/local/lib/python3.7/dist-packages/keras/utils/generic_utils.py", line 147, in deserialize_keras_object
    list(custom_objects.items())))
  File "/usr/local/lib/python3.7/dist-packages/keras/engine/sequential.py", line 301, in from_config
    custom_objects=custom_objects)
  File "/usr/local/lib/python3.7/dist-packages/keras/layers/__init__.py", line 168, in deserialize
    printable_module_name='layer')
  File "/usr/local/lib/python3.7/dist-packages/keras/utils/generic_utils.py", line 147, in deserialize_keras_object
    list(custom_objects.items())))
  File "/usr/local/lib/python3.7/dist-packages/keras/engine/sequential.py", line 301, in from_config
    custom_objects=custom_objects)
  File "/usr/local/lib/python3.7/dist-packages/keras/layers/__init__.py", line 168, in deserialize
    printable_module_name='layer')
  File "/usr/local/lib/python3.7/dist-packages/keras/utils/generic_utils.py", line 147, in deserialize_keras_object
    list(custom_objects.items())))
  File "/usr/local/lib/python3.7/dist-packages/keras/engine/network.py", line 1056, in from_config
    process_layer(layer_data)
  File "/usr/local/lib/python3.7/dist-packages/keras/engine/network.py", line 1042, in process_layer
    custom_objects=custom_objects)
  File "/usr/local/lib/python3.7/dist-packages/keras/layers/__init__.py", line 168, in deserialize
    printable_module_name='layer')
  File "/usr/local/lib/python3.7/dist-packages/keras/utils/generic_utils.py", line 149, in deserialize_keras_object
    return cls.from_config(config['config'])
  File "/usr/local/lib/python3.7/dist-packages/keras/engine/base_layer.py", line 1179, in from_config
    return cls(**config)
  File "/usr/local/lib/python3.7/dist-packages/keras/legacy/interfaces.py", line 91, in wrapper
    return func(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'ragged'

lien du fichier h5 (google drive)

10
zxsq

J'ai donc essayé le lien ci-dessus que vous avez mentionné machine à enseigner
Comme il s'avère que le modèle que vous avez exporté provient de tensorflow.keras et pas directement depuis keras API. Ces deux sont différents. Ainsi, lors du chargement, il peut utiliser tf.ragged des tenseurs qui pourraient ne pas être compatibles avec l'API keras.

Soulution de votre problème:

N'importez pas les keras directement car votre modèle est enregistré avec l'API de haut niveau des keras de Tensorflow. Remplacez toutes vos importations par tensorflow.keras

Changement:

from keras.preprocessing.image import img_to_array
from keras.models import load_model

pour ça:

from tensorflow.keras.preprocessing.image import img_to_array
from tensorflow.keras.models import load_model

Cela résoudra votre problème.

MODIFIER:
Toutes vos importations doivent provenir de Keras ou tensorflow.keras. Bien qu'étant la même API, peu de choses sont différentes, ce qui crée ce genre de problèmes. Aussi pour tensorflow backend tf.keras est préférable, car Keras 2.3. est la dernière version majeure qui prendra en charge les backends autres que tensorflow.

Cette version synchronise l'API avec l'API tf.keras à partir de TensorFlow 2.0. Notez cependant qu'il ne prend pas en charge la plupart des fonctionnalités de TensorFlow 2.0, en particulier une exécution rapide. Si vous avez besoin de ces fonctionnalités, utilisez tf.keras . Il s'agit également de la dernière version majeure de Keras multi-backend. À l'avenir, nous recommandons aux utilisateurs d'envisager de passer leur code Keras à tf.keras dans TensorFlow 2.0.

12
Vivek Mehta