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'
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.