我希望使用Keras.js库将我的Keras模型实现到我的网站中。该库的一个问题是,在javascript中输入数据时,只允许使用Float32Array()作为输入。这种类型的数组是1D,在我的Keras模型中,输入是3D。我已经在Keras.js issues page上询问并找到了一些潜在的解决方案,例如添加嵌入层,但需要特定的输入形状,但我希望任何3D输入工作,就像我训练模型时一样。模型结构很简单,有一个输入层,它采用维度为mxnx3的数组(它是一个未知大小的图像,包含r,g和b通道)和一个Conv2D层,然后输出一个mxnx1数组。我知道模型有效,因为它可以根据输入提供良好的输出,所以我唯一的问题是转换到Keras.js。这是我目前的JS代码。
function predictImageWithCNN(data) { //'data' is mxnx3 array
var final = [];
//instantiating model from json and buf files
var model = new KerasJS.Model({
filepaths: {
model: 'dist/model.json',
weights: 'dist/model_weights.buf',
metadata: 'dist/model_metadata.json'
},
gpu: true //MAY NEED TO CHANGE (NOT SURE REALLY)
});
//Ready the model.
model.ready()
.then(function() {
//This matches our input data with the input key (b/c Sequential Model)
var inputData = {
'input_1': new Float32Array(data)
};
// make predictions based on inputData
return model.predict(inputData);
})
.then(function(outputData) {
//Here we take the outputData and parse it to get a result.
var out = outputData['output']; //Gets output data
console.log(out);
//TODO: Put in code to assign outputData to 'final' so we can then convert it
// This should not be too hard to do.
})
.catch(function(err) {
console.log(err);
// handle error
});
return final; // should return nxmx1 array of vals 0-1.
}
如果有人对如何解决这个问题有任何建议,那将非常感激。谢谢! :)
答案 0 :(得分:0)
LSTM
我遇到了同样的问题。我解决这个问题的方法是使用平面版本的数据进行训练,但使用重塑图层作为第一层,使其达到我LSTM
所需的形状。例如
model = Sequential()
model.add(Reshape((40,59),input_shape=(1,2360)))
model.add(LSTM(128, input_shape=(maxlen, len(chars))))
model.add(Dense(len(chars)))
model.add(Activation('softmax'))
optimizer = RMSprop(lr=0.01)
model.compile(loss='categorical_crossentropy', optimizer=optimizer)
然后在Keras.JS
我可以从Float32Array