开发者问题收集

错误:io_utils.ts:116未被告人(在承诺中)rangeRor:float32array的字节长度应为4个倍数

2019-02-23
2491

TensorFlow.js 版本

tensorflow/ [email protected]

浏览器版本

chrome 72.0.3626.109 for mac

描述问题或功能请求

我尝试了 tensorflow/tfjs-examples 中的演示 tfjs-examples-webcam-transfer-learning。在文件 index.js 中,tensorflow 尝试加载模型,如下所示:

  const mobilenet = await tf.loadModel(
      'https://storage.googleapis.com/tfjs-models/tfjs/mobilenet_v1_0.25_224/model.json'
      );

但每次我运行这个演示时,它都会运行这句话并下载模型。我想让它从本地服务器加载。所以我下载了 model.json 并将其放在 assets 文件夹中。然后我在端口 1234 的本地服务器中部署资产。像这样加载它:

const mobilenet = await tf.loadModel(
      'http://localhost:1234/json/model.json'
      );

但是它不起作用并且控制台输出

io_utils.ts:116 Uncaught (in promise) RangeError: byte length of Float32Array should be a multiple of 4
    at new Float32Array (<anonymous>)
    at o (io_utils.ts:116)
    at Object.decodeWeights (io_utils.ts:79)
    at models.ts:318
    at common.ts:14
    at Object.next (common.ts:14)
    at o (common.ts:14)

我非常确定 model.json 与 https://storage.googleapis.com/tfjs-models/tfjs/mobilenet_v1_0.25_224/model.json 中的相同,但为什么 id 不起作用?

谢谢你的帮助。

2个回答

您必须在本地服务器上提供文件,因为浏览器无法直接访问文件系统。 这里 那里 都问过同样的问题。

edkeveked
2019-02-23

这确实不必担心,因为您的浏览器将与所有权重一起缓存下载的模型。 因此,您可以使用公共网址。 第一次访问将从浏览器缓存中提供,而不会再次下载。


如果您真的想在本地服务,或者至少要了解为什么没有在以下工作之前的工作:

model.json文件不是整个故事 - 它包含一个具有与权重文件相对路径的strigeSmanifest部分。 当您从原始URL加载型号时,它可以解决并下载所有相邻的权重文件。 因此,要在本地使用该模型,您还需要服务所有这些文件。

不幸的是,获取权重文件的列表并不完全直接,因为Google Cloud Cloud Storage不提供目录以一种易于访问的方式列表。 您当然可以从型号中钓到文件名。 ///cloud.google.com/storage/docs/listing-objects“ rel =“ nofollow noreferrer”> gsutil 来自命令行,这应该让您只下载整个文件夹。第三个选项是使用该文件夹REST API列出目录内容: > https://www.googleapis.com/storage/v1/b/tfjs-models/o?prefix=tfjs/mobilenet_v1_0.25_224 ,并寻找那里的“名称”条目。 >第四和最简单的选择是从头开始构造URL:在这种情况下,有55个重量组,因此URL范围从 https://storage.googleapis.com/tfjs-models/tfjs-models/tfjs/tfjs/mobilenet_v1_0.25_2224/group1-shard1-shard1-shard1-shard1-shard1-shard1-shard1-shard1-shard1-shard1-shard1-shard1-shard1-shard1 of1 /storage.googleapis.com/tfjs-models/tfjs/mobilenet_v1_0.25_224/group55-shard1of1" rel="nofollow noreferrer">https://storage.googleapis.com/tfjs-models/tfjs/mobilenet_v1_0.25_224/group55- shard1of1 。 这些小组都没有一个以上的碎片。

David Soergel
2019-03-07