簡體   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