【问题标题】:Convert Subclassed Speech Recognition Model to Tensorflow.js将子类语音识别模型转换为 Tensorflow.js
【发布时间】:2021-09-12 06:49:08
【问题描述】:

我有一个子类语音识别模型 (link),我想用它在我的 node.js 服务器上进行推断。我正在尝试使用 tfjs 对其进行转换,但由于它是子类模型,我收到以下错误:

NotImplementedError: Saving the model to HDF5 format requires the model to be a Functional model or a Sequential model. It does not work for subclassed models, because such models are defined via the body of a Python method, which isn't safely serializable. Consider saving to the Tensorflow SavedModel format (by setting save_format="tf") or using `save_weights`.

我正在关注official tutorial,这不包括这种情况。令人惊讶的是,除了closed issue,我在网上找不到太多信息。

关于如何将子类模型转换为tensorflowjs 的任何想法?

【问题讨论】:

  • 不要这样保存你的模型:model.save("model.h5")。保存为 SavedModel 格式,如下所示:model.save("target_directory").
  • 我将 .pb 模型提供给 tensorflowjs_converter。如果我们谈论的是 python 代码,我尝试了上面链接教程中提到的tensorflowjs.converters.save_keras_model(model, out)
  • 请在您的问题中添加您保存模型的代码以及加载和转换模型的位置。找出您传递了哪些变量或可能有什么问题有点困难。
  • 我只是按照上面问题中链接的官方教程进行操作

标签: tensorflow keras speech-recognition tensorflow.js tensorflowjs-converter


【解决方案1】:

您应该使用另一个选项model.save("my_model_dir"),而不是使用教程中的model.save_weights(),您可以在此处查看confirmation

保存模型目录后,您需要使用 Tensorflowjs 转换器对其进行转换

$ tensorflowjs_converter \
    --input_format=tf_saved_model \
    my_model_dir \ # input_path 
    converted_model # output_path

【讨论】:

  • 嗨,很遗憾,这不是我要问的。我需要将 Keras 模型转换为 Tensorflow.js,而不仅仅是保存模型(编辑问题以使其更清晰)
  • 感谢您抽出宝贵时间。但是,这并没有真正改变任何东西。我试过了,它抛出了与上面解释的相同的错误。问题是我的模型(Qnet15,上面链接)是自定义模型,因此会引发该错误。在 Keras 中加载模型然后再次保存并没有什么不同。还是您的回答中有什么我不明白的地方?
  • @Bendemann 你传入的是目录而不是model.pb
【解决方案2】:

好的,所以我专门尝试转换语音识别模型(上面的链接),似乎tfjs(包括mozilla's deepspeech)目前不支持大多数此类模型。

它会专门抛出这个错误:

ValueError: Unsupported Ops in the model before optimization
AudioSpectrogram

在这种情况下使用的命令:

tensorflowjs_converter path/to/qnet15/ path/to/qnet15/converted/ --input_format=tf_saved_model --output_format=tfjs_graph_model

但是,可以通过在上述命令中添加 --skip_op_check 标志来消除此错误。在一系列警告之后,它将生成预期的model.json 及其相应的权重二进制文件。

但是,如果你尝试推理@node,也会出现同样的错误:

Promise {
  <rejected> TypeError: Unknown op 'AudioSpectrogram'. File an issue at https://github.com/tensorflow/tfjs/issues so we can add it, or register a custom execution with tf.registerOp()

模型基本没用。几年前,此功能就有一个open issue

【讨论】:

    猜你喜欢
    • 2023-01-09
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多