This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.
This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
"* `tf.keras.layers.Embedding`: Входной слой. Кодирует каждый идентификатор символа в вектор размерностью `embedding_dim`; \n",
"* `tf.keras.layers.GRU`: Рекуррентный слой на ячейках GRU в количестве `units=rnn_units` **(Здесь нужно указать тип ячеек в соответствии с вариантом)**\n",
"* `tf.keras.layers.Dense`: Выходной полносвязный слой размерностью `vocab_size`, в который выводится вероятность каждого символа в словаре. \n"
""
"prediction() предсказывает логиты вероятности каждого символа на следующей позиции. При этом, если мы будем выбирать символ с максимальной вероятностью, то из раза в раз модель нам будет выдавать один и тот же текст. \n",
"Чтобы этого избежать, нужно выбирать очередной индекс из распределения\n",
"`tf.random.categorical` - чем выше значение на выходном слое полносвязной сети, тем вероятнее, что данный символ будет выбран в качестве очередного. Однако, это не обязательно будет символ с максимальной вероятностью.\n"
"Можно представить задачу как задачу классификации - по предыдущему состоянию RNN и входу в данный момент времени предсказать класс (очередной символ). "
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "trpqTWyvk0nr"
},
"source": [
"### Настройка оптимизатора и функции потерь"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "UAjbjY03eiQ4"
},
"source": [
"В этом случае работает стандартная функция потерь `tf.keras.losses.sparse_categorical_crossentropy`- кроссэнтропия, которая равна минус логарифму предсказанной вероятности для верного класса.\n",
"\n",
"Поскольку модель возвращает логиты, вам необходимо установить флаг `from_logits`."
"Необученная модель не может делать адекватные предсказания. Ее перплексия («коэффициент неопределённости») приблизительно равна размеру словаря. Это говорит о полной неопределенности модели при генерации текста.\n",
"Самый простой способ сгенерировать текст с помощью этой модели — запустить ее в цикле и отслеживать внутреннее состояние модели по мере ее выполнения.\n",
"\n",
"\n",
"\n",
"Каждый раз, когда вы вызываете модель, вы передаете некоторый текст и внутреннее состояние. Модель возвращает прогноз для следующего символа и его нового состояния. Передайте предсказание и состояние обратно, чтобы продолжить создание текста.\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "DjGz1tDkzf-u"
},
"source": [
"Создаем модель реализующую один шаг предсказания:"