Tensorflow.js使用节点保存模型

时间:2018-09-16 15:36:23

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

我想使用此功能从node.js保存经过训练的模型

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

但是保存模型时它会返回

  

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

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

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

我已经拥有了,我尝试将目录更改为我的主目录,但这不能解决问题,也不能以sudo的身份运行,我该怎么办?

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

编辑:

应该注意的是我尝试过

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

如此处(https://github.com/caisq/tfjs-node)所述,它返回

  

TypeError:tf.sequential不是函数       在file:///home/sjors/node.mjs:7:18       在ModuleJob.run(内部/加载程序/ModuleJob.js:94:14)       

我已经尝试过:

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

返回与以前相同的UnhandledPromiseRejectionWarning错误

4 个答案:

答案 0 :(得分: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');

答案 1 :(得分:1)

您的异步函数读取其中的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();

答案 2 :(得分:0)

我遇到同样的问题,“在尝试使用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用户的身份发出命令。 < / p>

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

答案 3 :(得分:0)

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