首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保存带有自定义函数的keras模型并将其加载到新笔记本时出错

保存带有自定义函数的keras模型并将其加载到新笔记本时出错
EN

Stack Overflow用户
提问于 2022-08-01 18:00:37
回答 2查看 242关注 0票数 1

我试着保存和加载我的角膜模型。它可以加载在同一个工作簿,但当我在一个新的笔记本加载模型时出错。该模型具有文本化层和“标准化”参数的自定义标准化。首先,我注册自定义函数:

代码语言:javascript
复制
@tf.keras.utils.register_keras_serializable()
def custom_standardization(input_data):
   text = tf.strings.lower(input_data)
   ...
   ...
   return text 

然后我定义了文本化层:

代码语言:javascript
复制
vectorize_layer = tf.keras.layers.TextVectorization(
                standardize=custom_standardization,
                max_tokens = 1000,
                output_mode ="int",
                output_sequence_length = 30)

接下来,我构建模型:

代码语言:javascript
复制
model_FFN = tf.keras.Sequential ([
    vectorize_layer,
    tf.keras.layers.Embedding(
        input_dim = len(vectorize_layer.get_vocabulary()),
        output_dim = 16,
        mask_zero=True),
    GlobalAveragePooling1D(),
    Dense(1)
])

在拟合了模型之后,我保存了它:

代码语言:javascript
复制
model_FFN.compile (
            optimizer = tf.keras.optimizers.Adam(learning_rate=learning_rate),
            loss =loss,
            metrics=metrics)

history = model_FFN.fit(train_ds_raw,epochs =epoch,validation_data=val_ds_raw)

modelFileName = 'models/saved_model'
model_FFN.save(modelFileName)

但是,当我试图在新笔记本中加载保存的模型时,会收到以下错误:

代码语言:javascript
复制
modelFileName = 'models/saved_model'
loaded_model = keras.models.load_model(modelFileName)

错误: ValueError:图层TextVectorization的standardize参数的未知值。如果还原模型且standardize是自定义可调用的,请确保可调用已注册为自定义对象。详情请参见对象。允许的值是:None、一个Callable或下列值之一:(‘and_and_lower_标点符号’、'lower‘、'strip_punctuation')。接收: Custom>custom_standardization

谁能看看有什么问题吗?谢谢!

EN

回答 2

Stack Overflow用户

发布于 2022-08-08 14:35:50

首先,我认为您在顺序模型中的vectorize_layer之前缺少了一个输入层。其次,要解决错误,必须在加载模型之前重新定义custom_standardization函数,以避免RuntimeError:无法恢复类TextVectorization层。下面是我找到这个解决方法的链接:

1

2

票数 0
EN

Stack Overflow用户

发布于 2022-08-01 19:00:37

根据GitHub问题的说法,我认为这仍然是一个没有解决方案的问题。

我怀疑TextVectorization不是完全可序列化的,这就是问题所在。因此,即使函数custom_standardization被注册并作为参数传递给层TextVectorization,但仍然需要在代码库中运行模型。这有点矛盾。

如果您查看问题内部,您可以看到有人提出了一个“解决办法”,但这涉及到复制新笔记本内的custom_standardization功能。如果你不介意的话,这应该能行。否则,我想您可以不时地查看仍然对Keras团队开放的新发行

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73197800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档