如何使用javascript api调用keras模型的多维预测

时间:2018-06-17 09:52:34

标签: tensorflow keras tensorflow.js

我已根据keras Some more info here.示例训练了一个模型,我想用前端javascript对此模型进行预测。

首先我尝试使用lstm_text_generation,但是它只在预测函数中使用了1维Float32Array向量,所以我无法使用它,因为lstm_text_generation示例使用了形状{{1的多维数组}}

接下来,我尝试使用keras.js,使用tensorflow.js将我的keras模型移植到(1, maxlen, len(chars))文件。一切似乎都运行良好,直到我执行实际预测的地方它冻结并给我警告model.json

我注意到在许多tensorflow.js示例中,人们将其数组转换为Orthogonal initializer is being called on a matrix with more than 2000 (65536) elements: Slowness may result.,但我这样做了,它对我的​​代码的性能没有影响。

对于任何好奇的人,这是我写的javascript代码......

tensor2d

...在async function predict_from_model() { const model = await tf.loadModel('https://raw.githubusercontent.com/98mprice/death-grips-lyrics-generator/master/model.json'); try { var seed = "test test test test test test test test" var maxlen = 40 for (var i = 0; i < 1; i++) { var x_pred = nj.zeros([1, maxlen, 61]).tolist() for (var j = 0; j < seed.length; j++) { x_pred[0][j][char_indices[seed.charAt(j)]] = 1 } console.log("about to predict") const preds = model.predict(x_pred) //gets stuck here console.log("prediction done") } } catch (err) { // handle error } } 示例中执行与on_epoch_end()相同的功能。 lstm_text_generation.py的输出在python和javascript代码中都是相同的,所以我认为问题不存在。

我想我需要在x_pred进行一些优化,但我不确定是什么。有谁知道如何解决我上面的任何问题和/或任何其他适用于我的目的的JavaScript库?

1 个答案:

答案 0 :(得分:1)

x_pred需要是张量,使用自定义值创建张量的最简单方法是tf.buffer,可以使用TypedArray进行初始化,也可以使用{{3}进行修改这对你更好,因为你的大多数值都是0,默认情况下缓冲区用零填充。要从缓冲区创建张量,只需使用.set();

所以它会是这样的:

var x_pred = tf.buffer([1, maxlen, 61]);
for (var j = 0; j < seed.length; j++) {
  x_pred.set(1, 0, j, char_indices[seed.charAt(j)]);
}
console.log("about to predict") 
const preds = model.predict(x_pred.toTensor());
console.log("prediction done")