我正在 ionic3 框架中开发一个用于识别绘制字符的应用程序,但我在导入模型时遇到了问题。tensorflowjs_converter
我以两种不同的方式将模型从 Keras(转换为)导入到我的 ionic3 应用程序中:
- 和
model.json
权重文件(分片)放置在文件夹/assets/models
中。 - 和
model.json
权重文件(分片)托管在 Firebase 存储中。
使用第一种方法在浏览器中启动应用程序时,模型和权重已正确加载,并且我能够预测类。但是当启动应用程序时,使用相同的方法进入我的 Android 设备ionic cordova run android --device
,模型似乎没有从权重文件中检索数据,因为它给出了以下错误:
Based on the provided shape, [3, 3, 32, 64], the tensor should have 18432 values but has 917
.
现在,我尝试将文件托管在 Firebase 存储中以尝试解决此问题。我从存储中检索,但在浏览器和设备中model.json
仍然得到与上述相同的错误。
根据在应用程序中本地存储碎片和模型的经验,我得出的结论是,无论哪种方式,设备都无法识别碎片。
此外,当在 device 中使用 firebase 存储方法时,当尝试从 url 获取模型时,我发现以下错误:Failed to fetch
.
这是检索分片和模型的代码:
const modelURL: string = await this.db.getModel();
const shards: string[] = await this.db.getShards();
modelURL
并shards
包含来自 firebase 存储的下载 url。模型和分片保持在同一级别:
/* Firebase Storage hierarchy */
https://firebasestorage.googleapis.com/v0/b/project-foo.com/o/model%2Fmodel.json?alt=media&token=******
https://firebasestorage.googleapis.com/v0/b/project-foo.com/o/model%2Fgroup1-shard1of4?alt=media&token=******
https://firebasestorage.googleapis.com/v0/b/project-foo.com/o/model%2Fgroup1-shard2of4?alt=media&token=******
https://firebasestorage.googleapis.com/v0/b/project-foo.com/o/model%2Fgroup1-shard3of4?alt=media&token=******
https://firebasestorage.googleapis.com/v0/b/project-foo.com/o/model%2Fgroup1-shard4of4?alt=media&token=******
因此,我将模型的下载 url 传递到tf.loadModel
:
import * as tf from '@tensorflow/tfjs';
await tf.loadModel(modelURL).then(model => {
const output: any = model.predict(img);
});
那么,有什么方法可以将碎片传递到tf.loadModel()
,从 firebase 存储中获取,以便在我的设备和浏览器中检索从模型中预测所需的所有数据?
谢谢您的帮助。