Unerwartetes Schlüsselwortargument in Keras "zerlumpt"

11

Versuch, ein trainiertes Keras-Modell mit dem folgenden Python-Code auszuführen:

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()

Wenn ich es mit python3 ausführe, wird folgende Fehlermeldung angezeigt: TypeError: __init__() got an unexpected keyword argument 'ragged'

Was verursacht den Fehler und wie komme ich darum herum?

Versionen: Keras v2.3.1 Tensorflow v1.13.1

Bearbeiten, um hinzuzufügen:

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'

h5-Dateilink (Google Drive)

zxsq
quelle
Bitte fügen Sie Ihren vollständigen Fehlerstapel-Trace zusammen mit einem Teil des Codes hinzu, in dem Fehler auftreten.
Vivek Mehta
@VivekMehta Ich habe den vollständigen Code und die Fehlerverfolgung hinzugefügt. Ich denke, das ist es, wonach Sie gefragt haben. Nicht so sicher, sorry.
zxsq
"/home/pi/Documents/converted_keras/keras_model.h5"Ist das der volle Weg? Versuchen Sie, ihm den absoluten Weg zu geben.
DuDoff
@daudnadeem Ja, das ist der absolute Weg dorthin.
zxsq
Vielen Dank, dass Sie den vollständigen Code und die Stapelverfolgung hinzugefügt haben. Es sieht so aus, als würde etwas in generic_utils mit einem __init __ (ragged = 'Something') aufgerufen, aber nicht sicher, warum das passieren würde.
Rajah9

Antworten:

21

Also habe ich den Link ausprobiert, über dem Sie die lehrbare Maschine erwähnt haben.
Wie sich herausstellt, stammt das von Ihnen exportierte Modell von tensorflow.kerasund nicht direkt von der kerasAPI. Diese beiden sind unterschiedlich. Während des Ladens werden möglicherweise tf.ragged- Tensoren verwendet, die möglicherweise nicht mit der Keras-API kompatibel sind.

Soulution zu Ihrem Problem:

Importieren Sie Keras nicht direkt, da Ihr Modell mit Tensorflows Keras High Level API gespeichert wird. Ändern Sie alle Ihre Importe in tensorflow.keras

Ändern:

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

dazu:

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

Es wird Ihr Problem lösen.

BEARBEITEN:
Alle Ihre Importe sollten entweder von Kerasoder stammen tensorflow.keras. Obwohl es sich um dieselbe API handelt, unterscheiden sich einige Dinge, was zu solchen Problemen führt. Auch für das tensorflowBackend tf.keraswird bevorzugt, da Keras 2.3.0 die letzte Hauptversion ist, die andere Backends als Tensorflow unterstützt.

Diese Version bringt die API ab TensorFlow 2.0 mit der tf.keras- API synchron . Beachten Sie jedoch, dass die meisten TensorFlow 2.0-Funktionen nicht unterstützt werden, insbesondere die eifrige Ausführung. Wenn Sie diese Funktionen benötigen, verwenden Sie tf.keras . Dies ist auch die letzte Hauptversion von Multi-Backend-Keras. In Zukunft empfehlen wir Benutzern, ihren Keras-Code in TensorFlow 2.0 auf tf.keras umzustellen .

Vivek Mehta
quelle
Dies hat mein Problem behoben. Vielen Dank :)
Manthan_Admane