Неожиданный аргумент ключевого слова 'рваный' в Keras

11

Попытка запустить обученную модель keras с помощью следующего кода 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()

Когда я запускаю его с python3, я получаю следующую ошибку: TypeError: __init__() got an unexpected keyword argument 'ragged'

Что является причиной ошибки, и как мне ее обойти?

Версии: Keras v2.3.1 tenorflow v1.13.1

Изменить, чтобы добавить:

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

zxsq
источник
Пожалуйста, добавьте свою полную трассировку стека ошибок, а также часть кода, где вы получаете ошибку.
Вивек Мехта
@ VivekMehta Я добавил полный код и трассировку ошибок, я думаю, это то, что вы просили? Не уверен, извините.
zxsq
"/home/pi/Documents/converted_keras/keras_model.h5"это полный путь? Попробуйте дать ему абсолютный путь.
DuDoff
@daudnadeem Да, это абсолютный путь к этому.
zxsq
Спасибо за добавление полного кода и трассировки стека. Похоже, что-то в generic_utils вызывается с __init __ (ragged = 'кое-что'), но не уверен, почему это произойдет.
Раджах9

Ответы:

21

Итак, я попробовал ссылку, над которой вы упомянули обучаемую машину.
Оказывается, вы экспортировали модель, tensorflow.kerasа не напрямую из kerasAPI. Эти два разные. Поэтому при загрузке он может использовать тензоры tf.ragged, которые могут быть несовместимы с API-интерфейсом keras.

Решение вашей проблемы:

не импортируйте керары напрямую, поскольку ваша модель сохраняется с высокоуровневым API-интерфейсом кераса Tensorflow. Измените весь ваш импорт на tensorflow.keras

Change:

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

к этому:

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

Это решит вашу проблему.

РЕДАКТИРОВАТЬ:
Весь ваш импорт, либо должны быть из Kerasили tensorflow.keras. Несмотря на то, что API-интерфейс один и тот же, мало что отличается, что создает проблемы такого рода. Также для tensorflowбэкэнда tf.kerasпредпочтительнее, потому что Keras 2.3.0 является последним основным выпуском, который будет поддерживать бэкэнды, кроме тензорного потока.

В этом выпуске API синхронизируется с API tf.keras начиная с версии TensorFlow 2.0. Однако обратите внимание, что он не поддерживает большинство функций TensorFlow 2.0, в частности, активное выполнение. Если вам нужны эти функции, используйте tf.keras . Это также последний крупный релиз мульти-бэкэнд-кераса. В дальнейшем мы рекомендуем пользователям рассмотреть возможность переключения своего кода Keras на tf.keras в TensorFlow 2.0.

Вивек Мехта
источник
Это исправило мою проблему. Большое вам спасибо :)
Manthan_Admane