Tensorflow.js 使用节点保存模型
Tensorflow.js save model using node
我想使用此功能从 node.js 中保存经过训练的模型
async function tfModelExperiment(model) {
try {
let tsModelTraining = await model.save('file:///tmp/my-model-1');
}
catch (error) {
console.log(error);
}
}
但是在保存模型时 returns
(node:23756) UnhandledPromiseRejectionWarning: Error: Cannot find any
save handlers for 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),其中 returns
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');
哪个 returns 与之前相同的 UnhandledPromiseRejectionWarning
错误
您的异步函数读取其中的 await
行并执行 JS promise
。 promise 是 JS 编译器执行一段远程代码并确保异步函数将来会向它传递一个值(因此得名 promise)。
所以在你的情况下,Node 正在查看 model.save('file:///tmp/my-model-1')
并且没有找到任何可以处理来自 promise 的响应的 .save
方法。这就是为什么你的错误是关于未处理的 responses/promises.
这个问题的最后一部分是说您也没有任何错误处理程序。使用 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();
在 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');
我在尝试使用 model.save() 时遇到了同样的问题 "Cannot find any save handlers for URL"。我的问题的解决方案略有不同。
我终于设法通过删除以前的软件包并进行本地安装 (npm install package_name) 而不是全局安装 (npm 安装-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');
我想使用此功能从 node.js 中保存经过训练的模型
async function tfModelExperiment(model) {
try {
let tsModelTraining = await model.save('file:///tmp/my-model-1');
}
catch (error) {
console.log(error);
}
}
但是在保存模型时 returns
(node:23756) UnhandledPromiseRejectionWarning: Error: Cannot find any save handlers for 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),其中 returns
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');
哪个 returns 与之前相同的 UnhandledPromiseRejectionWarning
错误
您的异步函数读取其中的 await
行并执行 JS promise
。 promise 是 JS 编译器执行一段远程代码并确保异步函数将来会向它传递一个值(因此得名 promise)。
所以在你的情况下,Node 正在查看 model.save('file:///tmp/my-model-1')
并且没有找到任何可以处理来自 promise 的响应的 .save
方法。这就是为什么你的错误是关于未处理的 responses/promises.
这个问题的最后一部分是说您也没有任何错误处理程序。使用 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();
在 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');
我在尝试使用 model.save() 时遇到了同样的问题 "Cannot find any save handlers for URL"。我的问题的解决方案略有不同。
我终于设法通过删除以前的软件包并进行本地安装 (npm install package_name) 而不是全局安装 (npm 安装-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');