Hir*_*oji 5 python custom-object keras tensorflow valueerror
我想在另一个应用程序中使用Keras 手写识别示例中描述的训练模型,并尝试使用以下内容加载模型;
from keras.models import load_model
from tensorflow import keras
model = keras.models.load_model("test4_20211113.h5", custom_objects={'CTCLayer': CTCLayer})
Run Code Online (Sandbox Code Playgroud)
我收到“ValueError:未知层:Custom>CTCLayer。请确保将此对象传递给参数custom_objects。”
我添加了 custom_objects 参数,并通过在本文“ ValueError:未知层:CapsuleLayer ”之后添加 **kwargs 来修改 CTCLayer 类。
class CTCLayer(keras.layers.Layer):
def __init__(self, name=None, **kwargs):
self.name = name
super().__init__(**kwargs)
self.loss_fn = keras.backend.ctc_batch_cost
def call(self, y_true, y_pred):
batch_len = tf.cast(tf.shape(y_true)[0], dtype="int64")
input_length = tf.cast(tf.shape(y_pred)[1], dtype="int64")
label_length = tf.cast(tf.shape(y_true)[1], dtype="int64")
input_length = input_length * \
tf.ones(shape=(batch_len, 1), dtype="int64")
label_length = label_length * \
tf.ones(shape=(batch_len, 1), dtype="int64")
loss = self.loss_fn(y_true, y_pred, input_length, label_length)
self.add_loss(loss)
# At test time, just return the computed predictions.
return y_pred
Run Code Online (Sandbox Code Playgroud)
我是 Python 和 Keras 的初学者,如果您让我知道如何解决这个问题,我将不胜感激。
为了加载,需要首先保存模型(很可能在之后model.fit):
model.fit(args)
model.save(pathToYourFile, save_format="h5")
Run Code Online (Sandbox Code Playgroud)
然后就可以用keras.models.load_model方法加载模型了。通常这不是问题。但是如果您开发自定义层,则需要将对它/它们的特定引用传递到custom_objects属性中,如下所示
keras.models.load_model(pathToModel, custom_objects={
'CTCLayer': CTCLayer
})
Run Code Online (Sandbox Code Playgroud)
我的环境:
| 归档时间: |
|
| 查看次数: |
1833 次 |
| 最近记录: |