【问题标题】:Tensorflow.js save model using nodeTensorflow.js 使用节点保存模型
【发布时间】:2019-02-20 16:00:42
【问题描述】:

我想使用这个函数从 node.js 中保存一个训练好的模型

async function tfModelExperiment(model) {
  try {
    let tsModelTraining = await model.save('file:///tmp/my-model-1');
  } 
  catch (error) {
    console.log(error);
  }
}

但是当保存模型时它会返回

(node:23756) UnhandledPromiseRejectionWarning: 错误: 找不到任何 保存 URL 'file:///tmp/my-model-1' 的处理程序

我发现另一个人正在为这个问题而苦苦挣扎,但通过加入解决了这个问题

const tf = require('@tensorflow/tfjs');

我已经拥有了,我尝试将目录更改为我的主目录,但这并不能解决问题,也不能以 sudo 运行它,我做错了什么?

软件 我正在使用 Ubuntu Ubuntu 18.04.1 LTS 和最新的 TensorFlow.js 包 (0.13.0) 安装了 npm

编辑:

要注意的是我试过了

import * as tf from '@tensorflow/tfjs';
import '@tensorflow/tfjs-node';

这里提供 (https://github.com/caisq/tfjs-node),它返回

TypeError: tf.sequential 不是函数 在文件:///home/sjors/node.mjs:7:18 在 ModuleJob.run (internal/loader/ModuleJob.js:94:14) 在

我已经试过了:

const tf = require('@tensorflow/tfjs');
require('@tensorflow/tfjs-node');

返回与以前相同的 UnhandledPromiseRejectionWarning 错误

【问题讨论】:

  • 您能否向我们展示您尝试使用tfjs-node 解决问题的代码,因为我知道这应该是您问题的解决方案。
  • @SebastianSpeitel 我已将tfjs-node 代码添加到我的帖子中。
  • 我也有同样的问题。你有没有发现什么有用的东西?
  • @Jonas 很遗憾,我没有发现任何有用的东西,太糟糕了,没有太多关于如何保存的示例。这可能只是一个错误?如果你发现了什么,请告诉我!

标签: javascript node.js tensorflow async-await tensorflow.js


【解决方案1】:

您的异步函数读取其中的await 行并执行JS promise。 Promise 是 JS 编译器执行一段远程代码并确保 async 函数将来会向它传递一个值(因此得名 Promise)。

因此,在您的情况下,Node 正在查看 model.save('file:///tmp/my-model-1') 并没有找到任何可以处理来自 Promise 的响应的 .save 方法。这就是为什么你的错误是在谈论未处理的响应/承诺。

这个问题的最后一部分是说您也没有任何错误处理程序。使用async/await JS 模式,您通常将调用await 封装在try 中,并将错误处理程序封装在catch 中。

最后,您提到了解决问题的require 代码。 require 正在做的是让您的 JS 文件访问 tensorflow 库,这将修复 model.save() 错误。但在较新版本的 JS(称为 ES6/7/8)中,require 已被 import 取代 - 它们完成相同的事情,但看起来有点不同。

综合起来,您的 JS 代码将如下所示:

// Do the TS import
import * as tf from '@tensorflow/tfjs';

// Set up TS model
const model = tf.sequential();

async function tfModelExperiment() {
  try {
    let tsModelTraining = await model.save();
    // Missing code where you would handle `tsModelTraining`
  } 
  catch (error) {
    // Handle the error in here
    console.log(error);
  }
}
tfModelExperiment();

【讨论】:

  • 谢谢,在其他更新到Node.js版本10后使用导入功能,但返回此错误:import * as tf from '@tensorflow/tfjs'SyntaxError: Unexpected token *
  • 如果你想理解进口,这个 S.O.答案还不错:stackoverflow.com/questions/31386631/…
  • 谢谢!在安装切换回节点 9 并使用我可以使用的实验标志后,导入功能,但现在它返回 TypeError: tf.sequential is not a function。但是即使不使用实验标志而是使用require,它是否仍然可以工作?
  • .sequential() 在 TF 文档中被提及,你甚至可能不需要它来做你正在做的事情。但它应该在您进行导入时可用。我会仔细检查他们的一些示例,您可能会发现一个比我的示例更接近您尝试做的事情。
  • 我一直在环顾四周,但似乎没有完整的 TensorFlow 节点保存示例,只有 sn-ps。哪些不工作:(
【解决方案2】:

在 github 上 tfjs 的人的帮助下,我现在可以使用它了。

基本上你只需要安装 tfjs-node 依赖:

npm i @tensorflow/tfjs-node

然后你可以只需要 tfjs,它应该可以工作。

const tf = require('@tensorflow/tfjs');
require('@tensorflow/tfjs-node');

const model = tf.sequential();
model.add(tf.layers.dense({units: 1, inputShape: [1]}));

model.save('file://./model-1a');

【讨论】:

  • 嗯,虽然我之前尝试过这个..但是我会在回家后仔细检查/尝试一下!
  • 是的,我试过了,但对我也不起作用。但是当我创建一个只添加节点依赖项的全新项目时。似乎在普通包上安装节点包导致了我的问题。所以也许只是用一个新项目尝试我的代码。那应该可以。
  • 有效!创建新的云环境后,更新到最新的 Node 版本并只安装它工作的节点依赖项!我认为您安装普通版本然后安装节点版本的权利
  • 很好,很高兴我能帮上忙:D
  • 嗨,我删除了我的 npm_modules,然后运行了npm i @tensorflow/tfjs-node,当运行我的.js 脚本时,我收到“找不到模块'@tensorflow/tfjs”错误。解决方案不是只安装一个 npm 吗?
【解决方案3】:

我在尝试使用 model.save() 时遇到了同样的问题“找不到 URL 的任何保存处理程序”。我的问题的解决方案略有不同。

我终于设法通过删除以前的软件包并进行本地安装 (npm install package_name) 而不是全局安装 (npm install -g package_name) 来正确安装它>)。然后我将本地 node_modules 复制到他们在进行全局安装时所在的位置:

rm -rf /usr/local/lib/node_modules/@tensorflow
cp -ax node_modules/* /usr/local/lib/node_modules/

以下安装 @tensorflow/tfjs 或任何其他 29 个相关包(adm-zip...yallist):

npm install -g @tensorflow/tfjs-node

是的,如果您想知道特权,我以 root 用户 的身份发出了命令。

我使用的是 npm v6.4.1:

npm list -g --depth=0
/usr/local/lib
├── @tensorflow/tfjs-node@0.1.21
├── express@4.16.4
├── npm@6.4.1
└── socket.io@2.1.1

【讨论】:

    【解决方案4】:

    我从https://www.npmjs.com/package/tfjs-node-save使用tfjs-node-save,成功了。

    过程:

    npm i @tensorflow/tfjs

    npm i tfjs-node-save

    代码:与@Jonas 基本相同

    const tf = require('@tensorflow/tfjs');
    require('@tensorflow/tfjs-node');
    
    const model = tf.sequential();
    model.add(tf.layers.dense({units: 1, inputShape: [1]}));
    
    model.save('file://./model-1a');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      • 2020-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多