【问题标题】:React native tensorflowjs very slow predictionReact native tensorflowjs 非常慢的预测
【发布时间】:2020-12-15 15:36:24
【问题描述】:

所以我在 keras 中制作并训练了自己的模型。这是模型(6~ 百万参数):

我将其转换为 tfjs 图形模型。并将其实现到我的反应原生应用程序中。这是转换命令:

tensorflowjs_converter --input_format=tf_saved_model --output_format=tfjs_graph_model --weight_shard_size_bytes 60000000 /Some/Path /Some/Other/Path

我的问题是 1 次预测需要整整 2 分钟,而对于我的应用程序而言,我需要实时应用程序速度。但在 colab 上,预测需要 400 毫秒。这是预测代码:

let input = tf.randomNormal([50, 6]);
input = tf.reshape(input,[-1,50,6]);
const res = model.predict(input);
//const res = await this._model.executeAsync(input);
console.log(res.data());

那么我在 tfjs 和转换方面做错了吗?

我的模型太大了吗?即使我让我的模型更小,我可以在这里使用任何优化过程吗?

对于这种模型,什么“大小”可以让我有一个快速的预测时间?

更新:所以我的模型的参数数量是荒谬的。

通过彻底的改造和更改,我将一个 4k 参数模型(仍然基于 LSTM)转换为 tfjs 图模型。 model.json 文件重 40.5kB,分片文件重 18.5kB。 模型加载很快,但仍然存在预测时间的问题。对于这么小的模型,我的 android 模拟器每次预测仍然需要 1 秒。所以我的问题仍然是有什么方法可以让这个执行更快?

【问题讨论】:

  • 你的模型有多大?从理论上讲,这是一个矩阵乘法,我可以想象的瓶颈是内存。您是否尝试对其进行分析?
  • 了解您的计算机使用的硬件会很有用。协作通常使用适用于 AI 的高性能 GPU。知道你有 webgl 支持也很好?试试 chrome://gpu。
  • @partizanos 我不明白你说的多大是什么意思。你是说在内存中?尚未尝试分析。
  • @danielskantze 这是一个应用程序,所以重要的硬件是手机。但我的电脑没有 gpu,但有 16 gb RAM 和 i7 4790 CPU。
  • @HadrienRothea 我的意思是记忆。输入是 300 维,无论模型有多大,最后它都是一个矩阵。我有点惊讶神经元的数量如此之多。 (远大于 300)。请问您是如何选择每层的神经元数量的?另外,您如何加载模型以及它的大小(以 MB 为单位)?

标签: react-native keras deep-learning lstm tensorflow.js


【解决方案1】:

你的模型肯定太大了。

智能手机 RAM 和 GPU 内存大小比 Google 在 Colab 上提供的任何东西都要小得多。通常神经网络可以完全保存在 RAM 中,因此数学和检索时间在那里很快。当加载的内存太大时,模型必须将数据从手机存储转移到内存,只要它想进行矩阵乘法,这一直是。这是一个非常缓慢的加载。

要加快速度,请将其变小。应该有一个断点,模型开始在内存中正确拟合,并且您的速度有了很大的飞跃。不过我警告你,如果你想让它适用于各种设备,你需要让它非常小,大约 100k 参数。

【讨论】:

  • 感谢您的回答。所以我对我的模型和数据做了很多改变,这样我就可以减少参数的荒谬了。我现在有一个 4k 参数模型,我将其转换为图形模型以使其更快。然而,每个预测仍然需要 1 整秒(在 android 模拟器上)。我还能做些什么来让它更快。我的意思是 4k 是我能达到的最低值,我不能再减少模型,否则它没有任何意义。
  • 很好地减少了它!如果它需要 1 秒并且在 Colab 上需要 400 毫秒,我会说你已经尽了一切努力让它在 android 上实时运行。移动设备通常比台式机慢,而那些 Colab 计算机非常强大。
猜你喜欢
  • 2018-04-14
  • 2019-12-05
  • 2018-06-25
  • 2018-06-20
  • 2017-11-07
  • 1970-01-01
  • 1970-01-01
  • 2023-01-20
  • 1970-01-01
相关资源
最近更新 更多