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

11

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

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 de fichier h5 (google drive)

zxsq
la source
Veuillez ajouter votre trace de pile d'erreur complète, ainsi qu'une partie du code où vous obtenez une erreur.
Vivek Mehta
@VivekMehta J'ai ajouté le code complet et la trace d'erreur, je pense que c'est ce que vous avez demandé? Pas sûr, désolé.
zxsq
"/home/pi/Documents/converted_keras/keras_model.h5"est-ce le chemin complet? Essayez de lui donner le chemin absolu.
DuDoff
@daudnadeem Oui, c'est le chemin absolu vers cela.
zxsq
Merci d'avoir ajouté le code complet et la trace de la pile. Il semble que quelque chose dans generic_utils soit appelé avec un __init __ (ragged = 'something') mais ne savez pas pourquoi cela se produirait.
rajah9

Réponses:

21

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

Soulution à 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. Changez toutes vos importations en tensorflow.keras

Changer:

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.

EDIT:
Toutes vos importations doivent provenir de Kerasou tensorflow.keras. Bien qu'étant la même API, peu de choses sont différentes, ce qui crée ce genre de problèmes. Le tensorflowbackend tf.kerasest également préférable, car Keras 2.3.0 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.

Vivek Mehta
la source
Cela a résolu mon problème. Merci beaucoup :)
Manthan_Admane