LSTM с сохранением состояния в tensorflowJS: Ошибка: тензор удален

#javascript #python #tensorflow #keras #tensorflowjs-converter

#javascript #python #тензорный поток #keras #tensorflowjs-конвертер

Вопрос:

Я пытаюсь развернуть модель, содержащую LSTM-ячейку с сохранением состояния, используя TensorflowJS. Модель была предварительно обучена в 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 и импортировал ее в javascript с 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)
 }
  

Комментарии:

1. Не могли бы вы показать больше Js-кода?

2. Добавлен фрагмент кода JS для создания прогнозов. Я получаю ошибку на второй итерации.