Я просматриваю этот учебник по RNNs/LSTM, и мне очень трудно понять состояние LSTM с точки зрения состояния. Мои вопросы таковы:
1. Размер дозирования для обучения
В документах Keras на RNN я выяснил, что скрытое состояние образца в i
-ой позиции в партии подаваться как входное скрытое состояние для образца в i
-й позиции в следующей партии. Означает ли это, что если мы хотим передать скрытое состояние из образца в образец, мы должны использовать партии размером 1 и, следовательно, выполнять онлайн-градиентный спуск? Есть ли способ передать скрытое состояние в партии размером > 1 и выполнить спуск градиента на этой партии?
2. One- Char Проблемы с отображением
В параграфе "Условный LSTM для One- Char to One- Char Отображение" был предоставлен код, который использует batch_size = 1
и stateful = True
, чтобы научиться предсказывать следующую букву алфавита с учетом буква алфавита. В последней части кода (строка 53 до конца полного кода) модель тестируется, начиная со случайной буквы ( "K" ) и предсказывает "B", после чего "B" предсказывает "C" и т.д. Кажется, что он хорошо работает, за исключением "K" . Тем не менее, я попробовал следующую настройку кода (последняя часть тоже поддерживала строки 52 и выше):
# demonstrate a random starting point
letter1 = "M"
seed1 = [char_to_int[letter1]]
x = numpy.reshape(seed, (1, len(seed), 1))
x = x / float(len(alphabet))
prediction = model.predict(x, verbose=0)
index = numpy.argmax(prediction)
print(int_to_char[seed1[0]], "->", int_to_char[index])
letter2 = "E"
seed2 = [char_to_int[letter2]]
seed = seed2
print("New start: ", letter1, letter2)
for i in range(0, 5):
x = numpy.reshape(seed, (1, len(seed), 1))
x = x / float(len(alphabet))
prediction = model.predict(x, verbose=0)
index = numpy.argmax(prediction)
print(int_to_char[seed[0]], "->", int_to_char[index])
seed = [index]
model.reset_states()
and these outputs:
M -> B
New start: M E
E -> C
C -> D
D -> E
E -> F
It looks like the LSTM did not learn the alphabet but just the positions of the letters, and that regardless of the first letter we feed in, the LSTM will always predict B since it the second letter, then C and so on.
Поэтому, как сохранение предыдущего скрытого состояния в качестве начального скрытого состояния для текущего скрытого состояния помогает нам в обучении, учитывая, что во время теста, если мы начнем с буквы "K" , например, буквы A-J не будут раньше, а начальное скрытое состояние не будет таким же, как во время обучения?
3. Подготовка LSTM к книге для генерации предложений
Я хочу обучить свой LSTM всей книге, чтобы узнать, как генерировать предложения и, возможно, изучать стиль авторов, как я могу, естественно, обучить LSTM этому тексту (ввести весь текст и позволить LSTM определить зависимости между словами) вместо того, чтобы "искусственно" создавать партии предложений из этой книги, чтобы обучать мой LSTM? Я считаю, что я должен использовать устаревшие LSTM, но я не уверен, как это сделать.