我正在尝试使用 TensorflowJS 部署一个包含有状态 LSTM 单元的模型。该模型在 keras 中进行了预训练,由以下人员构建:
model = Sequential()
model.add(TimeDistributed(Dense(80, activation = 'sigmoid'),input_shape=(timesteps, data_dim)))
model.add(LSTM(output_dim,activation = 'sigmoid',return_sequences=False,stateful=True))
model.add(Dense(output_dim, activation='sigmoid'))
训练模型后,我使用tensorflowjs_converter对其进行了转换,并使用tf.loadLayersModel("/fullmodelTF/model.json")
.
当我现在尝试做出预测时,它适用于第一次调用model.predict()
. 当我尝试第二次预测时,会发生以下错误:
Error: Tensor is disposed.
在开发人员控制台中检查模型对象后,我注意到在有状态 LSTM 层中,属性states_看起来像:
如您所见,其中一种内部状态已被处理。我怎样才能避免这种处置和由此产生的错误?
当我尝试部署与无状态相同的模型时,它可以正常工作。
javascript 中预测的循环如下所示:
result=[]
for(var i=0;i<inp.length;i++){
var tensor = tf.tensor(inp[i], [1,timesteps,no_features])
var prediction=this.model.predict(tensor);
var data = await prediction.data();
result.append(data)
}