【问题标题】:Save a Tensorflow Model and Load it in Tensorflow.js保存一个 Tensorflow 模型并将其加载到 Tensorflow.js
【发布时间】:2018-10-08 05:20:05
【问题描述】:

在我的常规 python 代码中,我实现了一个 CNN。我使用 model.save 保存它并生成四个文件(检查点、元数据、索引和其他文件)。但是,我无法将这四个文件直接加载到 tensorflow.js 中。这是示例 CNN:

import tflearn
from tflearn.layers.conv import conv_2d, max_pool_2d
from tflearn.layers.core import input_data, dropout, fully_connected
from tflearn.layers.estimator import regression

convnet = input_data(shape=[None, IMG_SIZE, IMG_SIZE, 1], name='input')

convnet = conv_2d(convnet, FIRST_NUM_CHANNEL, FILTER_SIZE, activation='relu')
convnet = max_pool_2d(convnet, 2)

convnet = conv_2d(convnet, FIRST_NUM_CHANNEL*2, FILTER_SIZE, activation='relu')
convnet = max_pool_2d(convnet, 2)

convnet = conv_2d(convnet, FIRST_NUM_CHANNEL*4, FILTER_SIZE, activation='relu')
convnet = max_pool_2d(convnet, 2)

convnet = fully_connected(convnet, FIRST_NUM_CHANNEL*8, activation='relu')
convnet = dropout(convnet, 0.7)

convnet = fully_connected(convnet, NUM_OUTPUT, activation='softmax')
convnet = regression(convnet, optimizer='adam', learning_rate=LR, loss='categorical_crossentropy', name='targets')

model = tflearn.DNN(convnet, tensorboard_dir='log')

train = train_data[:7000]
test = train_data[-1000:]


X = np.array([i[0] for i in train]).reshape(-1,IMG_SIZE,IMG_SIZE,1)
Y = [i[1] for i in train]

test_x = np.array([i[0] for i in test]).reshape(-1,IMG_SIZE,IMG_SIZE,1)
test_y = [i[1] for i in test]


model.fit({'input': X}, {'targets': Y}, n_epoch=NUM_EPOCHS, validation_set=({'input': test_x}, {'targets': test_y}), 
    snapshot_step=500, show_metric=True, run_id=MODEL_NAME)

model.save(MODEL_NAME)
print('MODEL SAVED:', MODEL_NAME)

这段代码的最后两行 sn-p 用于保存模型。我可以在烧瓶应用程序中加载模型,但我想将它移植到 tensorflow.js。谁能给我一个关于如何做到这一点的教程?

【问题讨论】:

  • 嗨塞巴斯蒂安,我尝试运行此代码,但我不确定我的参数是什么。 tensorflowjs_converter \ --input_format=tf_saved_model \ --output_node_names='MobilenetV1/Predictions/Reshape_1' \ --saved_model_tags=serve \ /mobilenet/saved_model \ /mobilenet/web_model 我现在拥有的文件是 3cnn-layers.model、3cnn-layers.index、checkpoint 和 3cnn-layers.data-0000-of-0001 我的命令是什么?
  • 你有你的模型文件吗?然后你可以在你的 JavaScript 中使用tf.loadModel()
  • 感谢 sebastian,但是我应该为 loadModel 调用什么文件? let model; (async function () { model = await tf.loadModel("cnnmodel/WHAT_FILE"); })(); 还是应该把文件放到服务器上?
  • .model 我相信,但你可以试试看。而且您必须预先添加存储类型。 (file:/// 如果你使用 nodejs,https:// 如果你想通过互联网加载它)。还有更多。

标签: python tensorflow conv-neural-network tensorflow.js


【解决方案1】:

tensorflowjs_converted 在其他文件中输出权重文件weights_manifest.json 和模型拓扑文件tensorflowjs_model.pb。要在 tensorflow.js 中加载此模型,请按照下面概述的步骤操作。

  • 使用服务器提供包含文件的文件夹
// cd to the directory containing the files

// then launch the python server
python3 -m http-server

// or install and launch npm module http-server
npm install -g http-server
http-server --cors -c1 .
  • 创建一个js脚本来加载模型
(async () => {
   ...
   const model = await tf.loadFrozenModel('http://localhost:8080/tensorflowjs_model.pb', 'http://localhost:8080/weights_manifest.json')
 })()

loadModel 和 loadFrozenModel 之间存在差异。

  • loadModel 用于加载本地保存的模型。可以从浏览器的 indexDB 或 localStorage 中检索模型。 也许它可以用来检索由另一个不同于 Js 的 tensorflow API 保存的模型,但需要用户使用 tf.io.browserFiles 选择文件(我没有尝试过)

  • loadFrozenModel 用于加载由服务器提供的模型

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    相关资源
    最近更新 更多