Nieoczekiwany argument słowa kluczowego „obdarty” w Keras


11

Próba uruchomienia wyszkolonego modelu keras z następującym kodem 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()

Po uruchomieniu go z python3 pojawia się następujący błąd: TypeError: __init__() got an unexpected keyword argument 'ragged'

Co powoduje błąd i jak go obejść?

Wersje: Keras v2.3.1 tensorflow v1.13.1

Edytuj, aby dodać:

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'

link do pliku h5 (dysk google)


Dodaj pełny zapis stosu błędów wraz z częścią kodu, w którym pojawia się błąd.
Vivek Mehta

@VivekMehta Dodałem pełny kod i ślad błędu, myślę, że o to prosiłeś? Przepraszam, nie jestem tego pewien.
zxsq

"/home/pi/Documents/converted_keras/keras_model.h5"czy to pełna ścieżka? Spróbuj podać absolutną ścieżkę.
DuDoff,

@daudnadeem Tak, to absolutna ścieżka do tego.
zxsq

Dziękujemy za dodanie pełnego kodu i śledzenia stosu. Wygląda na to, że coś w generic_utils jest wywoływane z __init __ (obdarty = „coś”), ale nie jestem pewien, dlaczego tak się stanie.
rajah9

Odpowiedzi:


21

Wypróbowałem więc link powyżej, o którym wspominałeś maszynę do nauki
. Okazuje się, że model, który wyeksportowałeś, pochodzi tensorflow.kerasz kerasAPI, a nie bezpośrednio z niego . Te dwa są różne. Podczas ładowania może używać tensorów tf.ragged, które mogą nie być kompatybilne z API keras.

Istota problemu:

nie importuj keras bezpośrednio, ponieważ Twój model jest zapisywany za pomocą interfejsu API kens wysokiego poziomu Tensorflow. Zmień cały import na tensorflow.keras

Zmień:

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

do tego:

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

To rozwiąże twój problem.

EDYCJA:
Cały twój import powinien pochodzić z Keraslub tensorflow.keras. Chociaż jest to samo API, kilka rzeczy jest różnych, co stwarza tego rodzaju problemy. Preferowany jest także tensorflowbackend tf.keras, ponieważ Keras 2.3.0 to ostatnia ważna wersja, która będzie obsługiwać backendy inne niż tensorflow.

Ta wersja przynosi API w synchronizacji z tf.keras API jak z TensorFlow 2.0. Należy jednak pamiętać, że nie obsługuje większości funkcji TensorFlow 2.0, w szczególności szybszego wykonywania. Jeśli potrzebujesz tych funkcji, użyj tf.keras . Jest to także ostatnia ważna wersja Keras z wieloma backendami. Idąc dalej, zalecamy użytkownikom rozważenie zamiany kodu Keras na tf.keras w TensorFlow 2.0.


To naprawiło mój problem. Dziękuję bardzo :)
Manthan_Admane
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.