Argumento inesperado de palavra-chave 'irregular' em Keras

11

Tentando executar um modelo keras treinado com o seguinte código 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 o executo com python3, recebo o seguinte erro: TypeError: __init__() got an unexpected keyword argument 'ragged'

O que está causando o erro e como resolvê-lo?

Versões: Keras v2.3.1 tensorflow v1.13.1

Edite para adicionar:

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

zxsq
fonte
Adicione seu rastreamento completo da pilha de erros, juntamente com parte do código em que você está recebendo o erro.
Vivek Mehta
@VivekMehta Adicionei o código completo e o rastreamento de erros, acho que foi isso que você pediu? Não tenho certeza, desculpe.
Zxsq 15/11/19
"/home/pi/Documents/converted_keras/keras_model.h5"este é o caminho completo? Tente dar o caminho absoluto.
DuDoff 15/11/19
@daudnadeem Sim, esse é o caminho absoluto para isso.
Zxsq
Obrigado por adicionar o código completo e o rastreamento de pilha. Parece que algo em generic_utils está sendo chamado com um __init __ (ragged = 'something'), mas não sei por que isso aconteceria.
rajah9

Respostas:

21

Então, eu tentei o link acima do qual você mencionou a máquina ensinável.
Como se vê, o modelo exportado é de tensorflow.kerase não diretamente da kerasAPI. Esses dois são diferentes. Portanto, durante o carregamento, ele pode estar usando tensores tf.ragged que podem não ser compatíveis com a API do keras.

Solução para o seu problema:

não importe keras diretamente, pois seu modelo é salvo com a API de alto nível keras da Tensorflow. Altere todas as suas importações para tensorflow.keras

Alterar:

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

para isso:

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

Isso resolverá o seu problema.

EDIT:
Todas as suas importações, devem ser de Kerasou tensorflow.keras. Embora seja a mesma API, poucas coisas são diferentes, o que cria esse tipo de problema. Também é preferível o tensorflowback tf.keras- end , porque o Keras 2.3.0 é a última versão principal, que suportará back-end que não sejam o tensorflow.

Esta versão sincroniza a API com a API tf.keras a partir do TensorFlow 2.0. No entanto, observe que ele não suporta a maioria dos recursos do TensorFlow 2.0, em especial a execução rápida. Se você precisar desses recursos, use tf.keras . Este também é o último grande lançamento do Keras multi-back-end. No futuro, recomendamos que os usuários considerem mudar seu código Keras para tf.keras no TensorFlow 2.0.

Vivek Mehta
fonte
Isso corrigiu meu problema. Muito obrigado :)
Manthan_Admane 28/03