Вы должны дать предыдущий прогноз состоянию LSTM. Если вы вызываете предикат, LSTM будет инициализироваться каждый раз, он не будет помнить состояние из предыдущих прогнозов.
Обычно (например, если вы генерируете текст с помощью lstm), у вас есть цикл, где вы делаете что-то вроде этого:
# pick a random seed
start = numpy.random.randint(0, len(dataX)-1)
pattern = dataX[start]
print "Seed:"
print "\"", ''.join([int_to_char[value] for value in pattern]), "\""
# generate characters
for i in range(1000):
x = numpy.reshape(pattern, (1, len(pattern), 1))
x = x / float(n_vocab)
prediction = model.predict(x, verbose=0)
index = numpy.argmax(prediction)
result = int_to_char[index]
seq_in = [int_to_char[value] for value in pattern]
sys.stdout.write(result)
pattern.append(index)
pattern = pattern[1:len(pattern)]
print "\nDone."
(пример скопирован с machinelearningmastery.com )
Важными являются следующие строки:
pattern.append(index)
pattern = pattern[1:len(pattern)]
Здесь они добавляют следующий символ в шаблон, а затем отбрасывают первый символ, чтобы иметь длину ввода, соответствующую ожидаемому значению от lstm. Затем приведите его к массиву numpy (x = np.reshape (...)) и сделайте прогноз на основе модели с созданным выводом. Поэтому, чтобы ответить на ваш первый вопрос, вам нужно снова ввести вывод.
По второму вопросу число 10 соответствует числу клеток lstm, которое вы имеете в слое. Если вы не используете return_sequence = True, это соответствует выходному размеру этого слоя.