อาร์กิวเมนต์คำหลักที่ไม่คาดคิด 'ragged' ใน Keras


11

พยายามเรียกใช้โมเดล keras ที่ผ่านการฝึกอบรมด้วยรหัสไพ ธ อนต่อไปนี้:

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


โปรดเพิ่มการติดตามสแต็กข้อผิดพลาดแบบเต็มของคุณพร้อมกับส่วนของรหัสที่คุณได้รับข้อผิดพลาด
Vivek Mehta

@VivekMehta ฉันได้เพิ่มรหัสเต็มและการติดตามข้อผิดพลาดฉันคิดว่านี่คือสิ่งที่คุณถาม? ไม่แน่ใจใช่ไหม
zxsq

"/home/pi/Documents/converted_keras/keras_model.h5"นี่เป็นเส้นทางแบบเต็มหรือไม่? ลองให้เส้นทางที่แน่นอน
DuDoff

@daudnadeem ใช่นั่นเป็นเส้นทางที่สมบูรณ์แบบสำหรับมัน
zxsq

ขอขอบคุณที่เพิ่มรหัสแบบเต็มและการติดตามสแต็ก ดูเหมือนว่าบางสิ่งใน generic_utils กำลังถูกเรียกด้วย __init __ (ragged = 'some') แต่ไม่แน่ใจว่าทำไมถึงเกิดขึ้น
rajah9

คำตอบ:


21

ดังนั้นฉันจึงลองลิงค์ด้านบนซึ่งคุณได้พูดถึงเครื่องที่สามารถใช้งานได้
เนื่องจากปรากฏว่าโมเดลที่คุณส่งออกมานั้นtensorflow.kerasไม่ใช่จากkerasAPI โดยตรง ทั้งสองนี้แตกต่างกัน ดังนั้นในขณะที่กำลังโหลดมันอาจจะใช้เทนเซอร์tf.raggedที่อาจเข้ากันไม่ได้กับ keras API

ให้ความสนใจกับปัญหาของคุณ:

อย่านำเข้า keras โดยตรงเนื่องจากโมเดลของคุณได้รับการบันทึกด้วย API ระดับสูงของ Tensorflow เปลี่ยนการนำเข้าทั้งหมดของคุณเป็นtensorflow.keras

เปลี่ยน:

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 ซิงค์กับtf.keras API ตั้งแต่ TensorFlow 2.0 อย่างไรก็ตามโปรดทราบว่ามันไม่รองรับฟีเจอร์ TensorFlow 2.0 ส่วนใหญ่โดยเฉพาะในการประมวลผลกระตือรือร้น หากคุณจำเป็นต้องมีคุณสมบัติเหล่านี้ใช้tf.keras นี่เป็นรุ่นสุดท้ายที่สำคัญของ Keras แบบหลายแบ็กเอนด์ ในอนาคตเราขอแนะนำให้ผู้ใช้พิจารณาเปลี่ยนรหัสKeras เป็น tf.kerasใน TensorFlow 2.0


นี่เป็นการแก้ไขปัญหาของฉัน ขอบคุณมาก :)
Manthan_Admane
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.