Я использую API tf.keras для обучения RNN на основе данных рейса. Каждая точка имеет вид [x0, y0, vx0, vy0, ax0, ay0, tx, ty] (положение, скорость, ускорение, 24-часовое время на единичной окружности), и каждый полет представляет собой последовательность этих точек. Отдельные рейсы принимаются в качестве входных данных в РНН. RNN выводит [ax в момент времени t + 1, ay в момент времени t + 1] (ускорение при следующем увеличении времени). Однако при создании прогнозируемых полетов недостаточно ввести последовательность данных. Мне нужно творчески сгенерировать один полет из начальной входной точки или точек, используя выходные данные для генерации следующей входной точки в последовательности.
Моя первая попытка, интегрированный метод model.predict (X), не сохраняет скрытое состояние между прогнозами временного шага, поэтому каждый прогноз основан только на входной точке, а не на всей последовательности входных точек. Здесь описан метод контроля скрытых изменений состояния https://stackoverflow.com/a/45509853/7066397,, но моя реализация в Керасе, и мне нужно генерировать прогнозы только после завершения обучения. Метод, который мне нужен, тесно связан с реализацией rnnTimeStep (INDarray) DeepLearning4Java, но, опять же, я реализую эту модель в keras.
Этот блок кода генерирует и сохраняет прогнозы на основе полных полетов в наборе данных train_test_x. Это, однако, не является моим предполагаемым поведением и неправильно генерирует творческие полеты из одной точки ввода, как мне нужно.
for i in [1,10,20,30,40,50]:
f = open('predictions/CuDNN_LSTM/training_outputs_epoch{:03d}_2019_CuDNN.npy'.format(i),'wb+')
model = keras.models.load_model('output/pymodels/model_epoch{:03d}_CuDNN.h5'.format(i))
prediction = model.predict(train_test_x,verbose=1)
np.save(f,prediction)
Мой ожидаемый результат - это полет, который генерируется по одному временному шагу за раз, причем каждый следующий временной шаг зависит от каждого предыдущего временного шага.
Спасибо за любую помощь, потому что я в тупике.