【问题标题】:Import Python Keras model with weights into Tensorflow.js将带有权重的 Python Keras 模型导入 Tensorflow.js
【发布时间】:2019-07-06 15:31:31
【问题描述】:

我有一些神经网络,用于使用 TensorFlow 中包含的 Keras 包在 Python 3.7 中开发的图像分类,我想导出层和权重模型以将其导入使用 Tensorflow.js 的 Node.js 应用程序中.

我将神经网络保存为 h5 格式,其中包含两个单独的文件,一个用于层模型,另一个用于权重模型。尝试按照 Tensorflow 提出的本教程(https://www.tensorflow.org/js/tutorials/conversion/import_keras)进行操作,但它不起作用。

from tensorflow.python.keras.models import load_model
import numpy as np
import tensorflowjs as tf
import json

cnn_name = '1'

layers = './model/' + cnn_name + '/model.h5'
weights = './model/' + cnn_name + '/weights.h5'
cnn = load_model(layers)
cnn.load_weights(weights)

tf.converters.save_keras_model(cnn, './model/' + cnn_name + 'json/')

with open('./model/' + cnn_name + 'json/weights.json', 'w') as f:
    json.dump(tf.converters.keras_h5_conversion.h5_weights_to_tfjs_format(weights), f, cls=NumpyEncoder)

在节点中,我可以使用函数 tf.loadLayersModel 加载层文件并启动模型,但我无法加载权重文件。我想我必须使用返回loadLayersModel函数的模型的loadWeights方法,但是你必须传递一个权重清单,我不知道如何获取它。

【问题讨论】:

    标签: node.js python-3.x keras neural-network tensorflow.js


    【解决方案1】:

    tf.loadLayersModel 加载拓扑(model.json)和权重文件。权重文件的名称在 model.json 文件中。但是,如果要加载的权重文件在不同的文件夹中,则可以使用作为参数传递的选项的属性weightPathPrefix。它将如下所示:

    tf.loadLayersModel(url, {weightPathPrefix: weightFolderPath});
    

    【讨论】:

    • 我已经试过了。即使在尝试之后,我也认为问题可能是我访问了本地文件夹并使用 Node 设置了文件服务器,但它也不起作用。从我在互联网上阅读的内容来看,问题可能是我使用的是控制台应用程序,并且无法访问 fetch 方法用来恢复某些文件的窗口对象,但我仍然不明白为什么 model.json 会恢复而不是我和他在同一个文件夹中的比索
    • 您是否在开发者控制台的网络选项卡下检查了为检索权重而发出的请求?
    • 没有。我需要构建一个不使用浏览器的应用程序。这是一个在终端中执行的 Node 应用程序
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    • 2021-06-04
    相关资源
    最近更新 更多