NodeJS Tensorflow.js使用节点保存模型

bvhaajcl  于 2023-01-01  发布在  Node.js
关注(0)|答案(5)|浏览(159)

我想使用以下函数保存node.js中的训练模型

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

但在保存模型时它返回
(node:23756)未处理承诺拒绝警告:错误:无法找到URL“txtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtxtx
我发现另一个人挣扎与这个问题,但它是固定的,包括

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 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错误

e4yzc0pl

e4yzc0pl1#

在github的tfjs的人的帮助下,我现在可以工作了。
基本上,您只需要安装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');
dsf9zpds

dsf9zpds2#

你的异步函数读取其中的await行并执行一个JS promise。promise是JS编译器执行一段远程代码并向异步函数保证一个值将在未来传递给它(因此得名promise)。
因此,在您的示例中,Node正在查看model.save('file:///tmp/my-model-1'),但没有找到任何可以处理来自承诺的响应的.save方法,这就是为什么您的错误会讨论未处理的响应/承诺。
这个问题的最后一部分是说你也没有任何错误处理程序。使用async/await JS模式,你通常把你的await调用 Package 在try中,把你的错误处理程序 Package 在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();
nc1teljy

nc1teljy3#

我在尝试使用www.example.com()时遇到了同样的问题**“找不到URL的任何保存处理程序”**model.save。我的问题的解决方案略有不同。
最后我删除了之前的软件包并进行了本地安装(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/

以下install @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
f0brbegy

f0brbegy4#

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

uurv41yg5#

在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节点是不被接受的

相关问题