Javascript Keras.js中的多维输入

Javascript Keras.js中的多维输入,javascript,multidimensional-array,keras,Javascript,Multidimensional Array,Keras,我正在寻找实现我的Keras模型到我的网站与图书馆。该库的一个问题是,在javascript中输入数据时,只允许使用Float32Array()作为输入。这种类型的阵列是一维的,在我的Keras模型中,输入是三维的。我在上问过,并找到了一些可能的解决方案,例如添加嵌入层,但这需要特定的输入形状,但我希望进行任何3D输入工作,就像我训练模型时那样。模型结构简单,有一个输入层,它采用一个尺寸为mxnx3的数组(这是一个具有r、g和b通道的未知大小的图像)和一个Conv2D层,然后输出一个mxnx1数

我正在寻找实现我的Keras模型到我的网站与图书馆。该库的一个问题是,在javascript中输入数据时,只允许使用Float32Array()作为输入。这种类型的阵列是一维的,在我的Keras模型中,输入是三维的。我在上问过,并找到了一些可能的解决方案,例如添加嵌入层,但这需要特定的输入形状,但我希望进行任何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.
}

如果有人对如何解决这一问题有任何建议,我们将不胜感激。谢谢!:)

我对
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
导入扁平版本,我在
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

中输入平坦的版本,您是否尝试过直接传入输入数据?我怀疑它不关心尺寸。您是否尝试过只传入输入数据?我怀疑它不关心尺寸。