Javascript 用Keras.js在网站上实现Keras模型
我一直在尝试使用该库将Python生成的基本Keras模型实现到一个网站中。现在,我将模型训练并导出到Javascript 用Keras.js在网站上实现Keras模型,javascript,keras,Javascript,Keras,我一直在尝试使用该库将Python生成的基本Keras模型实现到一个网站中。现在,我将模型训练并导出到model.json、model\u weights.buf和model\u metadata.json文件中。现在,我从github页面复制并粘贴了测试代码,以查看模型是否会加载到浏览器中,但不幸的是,我遇到了错误。这是测试代码。(编辑:我修复了一些错误,其余错误请参见下文。) 编辑:所以我对我的程序做了一些改动,使之与JS5兼容(这是我犯的一个愚蠢的错误),现在我遇到了一个不同的错误。此错误
model.json
、model\u weights.buf
和model\u metadata.json
文件中。现在,我从github页面复制并粘贴了测试代码,以查看模型是否会加载到浏览器中,但不幸的是,我遇到了错误。这是测试代码。(编辑:我修复了一些错误,其余错误请参见下文。)
编辑:所以我对我的程序做了一些改动,使之与JS5兼容(这是我犯的一个愚蠢的错误),现在我遇到了一个不同的错误。此错误被捕获,然后被记录。我得到的错误是:
error:predict()必须获取一个对象,其中键是model:input的命名输入。
我认为出现此问题是因为我的数据
变量的格式不正确。我认为如果我的模型采用28x28的数字数组,那么数据
也应该是28x28数组,这样它就可以正确地“预测”正确的输出。然而,我相信我遗漏了一些东西,这就是抛出错误的原因。这个问题和我的非常相似,但它是python的,而不是JS的。再次感谢您的帮助 好的,所以我弄明白了为什么会发生这种情况。有两个问题。首先,需要展平数据
数组,因此我编写了一个快速函数来获取2D输入并将其“展平”为长度为784的1D数组。然后,因为我使用了顺序模型,所以数据的键名不应该是'input\u 1'
,而应该是'input'
。这消除了所有的错误
现在,为了获得输出信息,我们只需将其存储在如下数组中:
var out=outputData['output']
。因为我使用了MNIST数据集,out
是一个长度为10的1D数组,其中包含每个数字为用户写入的数字的概率。从这里,你可以简单地找到概率最高的数字,并将其作为模型的预测。好的,所以我找到了发生这种情况的原因。有两个问题。首先,需要展平数据
数组,因此我编写了一个快速函数来获取2D输入并将其“展平”为长度为784的1D数组。然后,因为我使用了顺序模型,所以数据的键名不应该是'input\u 1'
,而应该是'input'
。这消除了所有的错误
现在,为了获得输出信息,我们只需将其存储在如下数组中:var out=outputData['output']
。因为我使用了MNIST数据集,out
是一个长度为10的1D数组,其中包含每个数字为用户写入的数字的概率。从这里,您可以简单地找到概率最高的数字,并将其用作模型的预测
var model = new KerasJS.Model({
filepaths: {
model: 'dist/model.json',
weights: 'dist/model_weights.buf',
metadata: 'dist/model_metadata.json'
},
gpu: true
});
model.ready()
.then(function() {
console.log("1");
// input data object keyed by names of the input layers
// or `input` for Sequential models
// values are the flattened Float32Array data
// (input tensor shapes are specified in the model config)
var inputData = {
'input_1': new Float32Array(data)
};
console.log("2 " + inputData);
// make predictions
return model.predict(inputData);
})
.then(function(outputData) {
// outputData is an object keyed by names of the output layers
// or `output` for Sequential models
// e.g.,
// outputData['fc1000']
console.log("3 " + outputData);
})
.catch(function(err) {
console.log(err);
// handle error
});