【发布时间】: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