我已根据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库?
答案 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")