繁体   English   中英

Tensorflow.js 使用节点保存 model

[英]Tensorflow.js save model using node

我想使用这个 function 从 node.js 中保存训练有素的 model

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

但是在保存 model 时它返回

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

我发现另一个人正在为这个问题而苦苦挣扎,但是通过包括

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

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

我正在使用的软件Ubuntu Ubuntu 18.04.1 LTS 与最新的 TensorFlow.js package (0.13.0) 一起安装 npm

编辑:

需要注意的是我试过了

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

如此处提供的 ( https://github.com/caisq/tfjs-node ),它返回

TypeError: tf.sequential is not a function at file:///home/sjors/node.mjs:7:18 at ModuleJob.run (internal/loader/ModuleJob.js:94:14) at

我试过:

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

它返回与以前相同的UnhandledPromiseRejectionWarning错误

我现在在 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');

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

因此,在您的情况下,Node 正在查看model.save('file:///tmp/my-model-1')并没有找到任何可以处理来自承诺的响应的.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();

我在尝试使用 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

我使用了来自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');

在 ubuntu 上使用 bun 时遇到了同样的错误: bun run mytensor.ts 更改导入队列时(首先应该是tfjs-node ):

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

然后使用npm and node mytensor.js 现在可以了。 显然,不接受 Typescript 和 bun 节点

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM