Argomento inaspettato della parola chiave "sfilacciato" in Keras


11

Tentativo di eseguire un modello di keras addestrato con il seguente codice 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()

Quando lo eseguo con python3, ottengo il seguente errore: TypeError: __init__() got an unexpected keyword argument 'ragged'

Cosa causa l'errore e come aggirarlo?

Versioni: Keras v2.3.1 tensorflow v1.13.1

Modifica per aggiungere:

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'

collegamento al file h5 (google drive)


Aggiungi la traccia completa dello stack degli errori, insieme a parte del codice in cui stai riscontrando errori.
Vivek Mehta,

@VivekMehta Ho aggiunto il codice completo e la traccia dell'errore, penso che questo sia quello che hai chiesto? Non sono sicuro, scusa.
zxsq,

"/home/pi/Documents/converted_keras/keras_model.h5"è questo il percorso completo? Prova a dargli il percorso assoluto.
DuDoff,

@daudnadeem Sì, questo è il percorso assoluto.
zxsq,

Grazie per aver aggiunto il codice completo e la traccia dello stack. Sembra che qualcosa in generic_utils venga chiamato con un __init __ (ragged = 'qualcosa') ma non sono sicuro del perché ciò accada.
rajah9,

Risposte:


21

Quindi ho provato il link sopra il quale hai menzionato la macchina da tè
Come risulta che il modello che hai esportato proviene da tensorflow.kerase non direttamente kerasdall'API. Questi due sono diversi. Quindi durante il caricamento potrebbe essere in uso tensori tf.ragged che potrebbero non essere compatibili con l'API di keras.

Soulution al tuo problema:

non importare keras direttamente in quanto il modello viene salvato con API di alto livello keras di Tensorflow. Cambia tutte le tue importazioni in tensorflow.keras

Cambia:

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

a questo:

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

Risolverà il tuo problema.

EDIT:
tutte le tue importazioni, o dovrebbero provenire da Keraso tensorflow.keras. Pur essendo la stessa API, poche cose sono diverse e ciò crea questo tipo di problemi. Anche per il tensorflowbackend tf.kerasè preferito, perché Keras 2.3.0 è l'ultima versione principale che supporterà backend diversi da tensorflow.

Questa versione porta l'API in sincronia con l' API tf.keras a partire da TensorFlow 2.0. Tuttavia, nota che non supporta la maggior parte delle funzionalità di TensorFlow 2.0, in particolare l'esecuzione desiderosa. Se hai bisogno di queste funzionalità, usa tf.keras . Questa è anche l'ultima importante versione di Keras multi-backend. In futuro, raccomandiamo agli utenti di considerare di cambiare il loro codice Keras in tf.keras in TensorFlow 2.0.


Questo risolto il mio problema. Grazie mille :)
Manthan_Admane,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.