Add comments for lec 3 and lec4 examples

This commit is contained in:
Aleksey Filippov 2025-05-03 22:57:38 +04:00
parent 7250170500
commit 9a516679ca
9 changed files with 690 additions and 14 deletions

View File

@ -5,7 +5,7 @@
"id": "7915f17e",
"metadata": {},
"source": [
"### Инициализация Keras"
"#### Инициализация Keras"
]
},
{
@ -930,8 +930,8 @@
"### Архитектура LeNet-5\n",
"\n",
"Изменения относительно оригинальной архитектуры:\n",
"- Увеличение фильтров в первом и втором сверточных слоях до 32 и 64 с 6 и 16.\n",
"- Снижение количества субдискретизации активаций до одной вместо двух.\n",
"- Увеличение фильтров в первом сверточном слое с 6 до 32 и втором сверточном слое с 16 до 64.\n",
"- Снижение количества субдискретизации активаций до одной вместо двух, только после второго сверточного слоя.\n",
"- Применение функции активации ReLU."
]
},

View File

@ -5,7 +5,26 @@
"id": "7915f17e",
"metadata": {},
"source": [
"### Инициализация Keras"
"#### Инициализация Keras\n",
"\n",
"Для ускорения обучения на GPU следует настраивать backend под конкретную ОС и модель GPU.\n",
"\n",
"Для ускорения pytorch на Windows и свежей карте от NVidia следует установить вместо обычного pytorch:\n",
"```\n",
"torch = { version = \"^2.7.0+cu128\", source = \"pytorch-cuda128\" }\n",
"torchaudio = { version = \"^2.7.0+cu128\", source = \"pytorch-cuda128\" }\n",
"torchvision = { version = \"^0.22.0+cu128\", source = \"pytorch-cuda128\" }\n",
"```\n",
"\n",
"Обязательно следует включить репозиторий\n",
"```\n",
"[[tool.poetry.source]]\n",
"name = \"pytorch-cuda128\"\n",
"url = \"https://download.pytorch.org/whl/cu128\"\n",
"priority = \"explicit\"\n",
"```\n",
"\n",
"Для macOS можно использовать jax 0.5.0 (обязательно такая версия) + jax-metal 0.1.1"
]
},
{
@ -40,7 +59,7 @@
"\n",
"В данном примере используется фрагмент набора данных Cats and Dogs Classification Dataset\n",
"\n",
"В наборе данных два класса: кошки и собаки\n",
"В наборе данных два класса (всего 24 998 изображений): кошки (12 499 изображения) и собаки (12 499 изображения)\n",
"\n",
"Ссылка: https://www.kaggle.com/datasets/bhavikjikadara/dog-and-cat-classification-dataset"
]
@ -64,7 +83,19 @@
"id": "85652835",
"metadata": {},
"source": [
"#### Формирование выборок"
"#### Формирование выборок\n",
"\n",
"Для формирования выборок используется устаревший (deprecated) класс ImageDataGenerator\n",
"\n",
"Вместо него рекомендуется использовать image_dataset_from_directory (https://keras.io/api/data_loading/image/)\n",
"\n",
"Для использования image_dataset_from_directory требуется tensorflow\n",
"\n",
"ImageDataGenerator формирует две выборки: обучающую и валидационную (80 на 20).\n",
"\n",
"В каждой выборке изображения масштабируются до размера 224 на 224 пиксела с RGB пространством.\n",
"\n",
"Изображения подгружаются с диска в процессе обучения и валидации модели."
]
},
{
@ -129,7 +160,9 @@
"id": "bfb9434d",
"metadata": {},
"source": [
"### Архитектура AlexNet"
"### Архитектура AlexNet\n",
"\n",
"Модель AlexNet описана в лекции про глубокое обучение"
]
},
{
@ -595,7 +628,9 @@
"id": "a831795e",
"metadata": {},
"source": [
"#### Оценка качества модели"
"#### Оценка качества модели\n",
"\n",
"Качество модели - 88.2 %.#### Оценка качества модели"
]
},
{
@ -626,6 +661,16 @@
"alexnet_model.evaluate(valid)"
]
},
{
"cell_type": "markdown",
"id": "7c1b7fd8",
"metadata": {},
"source": [
"#### Пример использования обученной модели\n",
"\n",
"Для примера используются случайные изображения из сети Интернет"
]
},
{
"cell_type": "code",
"execution_count": 16,

View File

@ -5,7 +5,26 @@
"id": "7915f17e",
"metadata": {},
"source": [
"### Инициализация Keras"
"#### Инициализация Keras\n",
"\n",
"Для ускорения обучения на GPU следует настраивать backend под конкретную ОС и модель GPU.\n",
"\n",
"Для ускорения pytorch на Windows и свежей карте от NVidia следует установить вместо обычного pytorch:\n",
"```\n",
"torch = { version = \"^2.7.0+cu128\", source = \"pytorch-cuda128\" }\n",
"torchaudio = { version = \"^2.7.0+cu128\", source = \"pytorch-cuda128\" }\n",
"torchvision = { version = \"^0.22.0+cu128\", source = \"pytorch-cuda128\" }\n",
"```\n",
"\n",
"Обязательно следует включить репозиторий\n",
"```\n",
"[[tool.poetry.source]]\n",
"name = \"pytorch-cuda128\"\n",
"url = \"https://download.pytorch.org/whl/cu128\"\n",
"priority = \"explicit\"\n",
"```\n",
"\n",
"Для macOS можно использовать jax 0.5.0 (обязательно такая версия) + jax-metal 0.1.1"
]
},
{
@ -40,7 +59,7 @@
"\n",
"В данном примере используется фрагмент набора данных Cats and Dogs Classification Dataset\n",
"\n",
"В наборе данных два класса: кошки и собаки\n",
"В наборе данных два класса (всего 24 998 изображений): кошки (12 499 изображения) и собаки (12 499 изображения)\n",
"\n",
"Ссылка: https://www.kaggle.com/datasets/bhavikjikadara/dog-and-cat-classification-dataset"
]
@ -64,7 +83,19 @@
"id": "85652835",
"metadata": {},
"source": [
"#### Формирование выборок"
"#### Формирование выборок\n",
"\n",
"Для формирования выборок используется устаревший (deprecated) класс ImageDataGenerator\n",
"\n",
"Вместо него рекомендуется использовать image_dataset_from_directory (https://keras.io/api/data_loading/image/)\n",
"\n",
"Для использования image_dataset_from_directory требуется tensorflow\n",
"\n",
"ImageDataGenerator формирует две выборки: обучающую и валидационную (80 на 20).\n",
"\n",
"В каждой выборке изображения масштабируются до размера 224 на 224 пиксела с RGB пространством.\n",
"\n",
"Изображения подгружаются с диска в процессе обучения и валидации модели."
]
},
{
@ -137,7 +168,10 @@
"id": "ae32c572",
"metadata": {},
"source": [
"Загрузка предобученной модели и отключение обучения для ее слоев"
"Загрузка предобученной модели VGG19:\n",
"- Загрузка весов, полученных при обучении модели на наборе данных ImageNet\n",
"- Отключение полносвязанных слоев для адаптации к новой задаче\n",
"- Модель будет работать с изображениями 224 на 224 пиксела и RGB пространством"
]
},
{
@ -274,7 +308,9 @@
"id": "49fceead",
"metadata": {},
"source": [
"#### Обучение глубокой модели"
"#### Обучение глубокой модели\n",
"\n",
"Обучение остановлено после второго шага, так как качество модели приемлемое"
]
},
{
@ -358,7 +394,9 @@
"id": "a831795e",
"metadata": {},
"source": [
"#### Оценка качества модели"
"#### Оценка качества модели\n",
"\n",
"Качество модели - 96.3 %."
]
},
{
@ -389,6 +427,16 @@
"tl_model.evaluate(valid)"
]
},
{
"cell_type": "markdown",
"id": "9d0106c8",
"metadata": {},
"source": [
"#### Пример использования обученной модели\n",
"\n",
"Для примера используются случайные изображения из сети Интернет"
]
},
{
"cell_type": "code",
"execution_count": 8,

View File

@ -1,5 +1,21 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "d5b48413",
"metadata": {},
"source": [
"### Пример предобработки и векторизации текстовых данных с помощью word2vec"
]
},
{
"cell_type": "markdown",
"id": "1ce7f779",
"metadata": {},
"source": [
"#### Инициализация spacy и загрузка модели для русского языка"
]
},
{
"cell_type": "code",
"execution_count": 2,
@ -12,6 +28,14 @@
"sp = spacy.load(\"ru_core_news_lg\")"
]
},
{
"cell_type": "markdown",
"id": "e0445088",
"metadata": {},
"source": [
"#### Загрузка содержимого текстовых документов"
]
},
{
"cell_type": "code",
"execution_count": 3,
@ -220,6 +244,21 @@
"display(df.head(), df.tail())"
]
},
{
"cell_type": "markdown",
"id": "6c67ab8d",
"metadata": {},
"source": [
"#### Предобработка текстовых данных\n",
"- приведение к нижнему регистру;\n",
"- удаление стоп-слов;\n",
"- удаление знаков препинания и спец-символов;\n",
"- лемматизация;\n",
"- формирование би-грамм с помощью Phraser, Phrases.\n",
"\n",
"У Phrases можно изменять параметры: min_count и threshold (минимальное количество вхождений и порог оценки устойчивости) для повышения качества полученных би-грамм."
]
},
{
"cell_type": "code",
"execution_count": 4,
@ -699,6 +738,21 @@
"df"
]
},
{
"cell_type": "markdown",
"id": "03c24ec0",
"metadata": {},
"source": [
"#### Векторизация текстовых данных с помощью word2vec\n",
"- функция explode объединяет все массивы столбца prep_text в один;\n",
"- будет получено 64-мерное пространство (векторы длиной 64 элемента);\n",
"- используется метод skip-gram (sg=1). Данный метод предпочтительно использовать на небольшом корпусе, а CBOW на большом (sg=0);\n",
"- размер окна 10 (по 10 слов слева и справа от текущего для вычисления контекста);\n",
"- min_count - минимальное количество вхождений слова в корпус для включения в n-мерное пространство;\n",
"- workers - количество потоков для вычисления;\n",
"- seed - задание начального состояния для повторяемости (random_state).\n"
]
},
{
"cell_type": "code",
"execution_count": 5,
@ -720,6 +774,16 @@
")"
]
},
{
"cell_type": "markdown",
"id": "ef97fa8a",
"metadata": {},
"source": [
"#### Вывод уникальных идентификаторов для каждого слова\n",
"\n",
"Слова в пространстве хранятся в виде числового идентификатора для сокращения потребления памяти"
]
},
{
"cell_type": "code",
"execution_count": 6,
@ -1741,6 +1805,14 @@
"word2vec.wv.key_to_index"
]
},
{
"cell_type": "markdown",
"id": "63be2cce",
"metadata": {},
"source": [
"#### Вывод трех наиболее похожих по смыслу слова для слова 1С"
]
},
{
"cell_type": "code",
"execution_count": 7,
@ -1764,6 +1836,14 @@
"word2vec.wv.most_similar(\"1с\", topn=3)"
]
},
{
"cell_type": "markdown",
"id": "b1c06780",
"metadata": {},
"source": [
"#### Координаты слова 1С в 64-мерном пространстве"
]
},
{
"cell_type": "code",
"execution_count": 8,
@ -1801,6 +1881,14 @@
"word2vec.wv[\"1с\"]"
]
},
{
"cell_type": "markdown",
"id": "98434d1e",
"metadata": {},
"source": [
"#### Поиск лишнего по смыслу слова (самое отдаленное по смыслу слово)"
]
},
{
"cell_type": "code",
"execution_count": 9,
@ -1822,6 +1910,14 @@
"word2vec.wv.doesnt_match(\"java php 1с oracle заказчик\".split())"
]
},
{
"cell_type": "markdown",
"id": "88684648",
"metadata": {},
"source": [
"#### Смысловое расстояние между словами (расстояние в пространстве)"
]
},
{
"cell_type": "code",
"execution_count": 10,
@ -1864,6 +1960,14 @@
"word2vec.wv.similarity(\"java\", \"1с\")"
]
},
{
"cell_type": "markdown",
"id": "98c93159",
"metadata": {},
"source": [
"#### Векторная арифметика: 1c - бухгалтерия + машина ="
]
},
{
"cell_type": "code",
"execution_count": 12,
@ -1894,6 +1998,14 @@
"word2vec.wv.most_similar(positive=[\"1с\", \"машина\"], negative=[\"бухгалтерия\"])"
]
},
{
"cell_type": "markdown",
"id": "86ab3f05",
"metadata": {},
"source": [
"#### Векторная арифметика: субд - база + язык ="
]
},
{
"cell_type": "code",
"execution_count": 13,
@ -1924,6 +2036,14 @@
"word2vec.wv.most_similar(positive=[\"субд\", \"язык\"], negative=[\"база\"])"
]
},
{
"cell_type": "markdown",
"id": "a293bb05",
"metadata": {},
"source": [
"#### Векторная арифметика: java - машина + бухгалтерия ="
]
},
{
"cell_type": "code",
"execution_count": 14,
@ -1954,6 +2074,14 @@
"word2vec.wv.most_similar(positive=[\"java\", \"бухгалтерия\"], negative=[\"машина\"])"
]
},
{
"cell_type": "markdown",
"id": "b70332a5",
"metadata": {},
"source": [
"#### Векторная арифметика: 866 - мгц + мбайт ="
]
},
{
"cell_type": "code",
"execution_count": 15,
@ -1984,6 +2112,14 @@
"word2vec.wv.most_similar(positive=[\"866\", \"мбайт\"], negative=[\"мгц\"])"
]
},
{
"cell_type": "markdown",
"id": "4f41fc6e",
"metadata": {},
"source": [
"#### Векторная арифметика: 866 - процессор + память ="
]
},
{
"cell_type": "code",
"execution_count": 18,
@ -2014,6 +2150,14 @@
"word2vec.wv.most_similar(positive=[\"866\", \"память\"], negative=[\"процессор\"])"
]
},
{
"cell_type": "markdown",
"id": "a0414122",
"metadata": {},
"source": [
"#### Понижение размерности векторного пространства с 64 до 2 измерений"
]
},
{
"cell_type": "code",
"execution_count": 19,
@ -2151,6 +2295,16 @@
"coords_df"
]
},
{
"cell_type": "markdown",
"id": "52e7a09b",
"metadata": {},
"source": [
"#### Визуализация векторного пространства\n",
"\n",
"Диаграмма интерактивная и позволяет изменять масштаб и перемещаться"
]
},
{
"cell_type": "code",
"execution_count": 20,

View File

@ -1,5 +1,13 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "0fd64751",
"metadata": {},
"source": [
"#### Инициализация Keras"
]
},
{
"cell_type": "code",
"execution_count": 12,
@ -23,6 +31,24 @@
"print(keras.__version__)"
]
},
{
"cell_type": "markdown",
"id": "c5e00991",
"metadata": {},
"source": [
"#### Загрузка данных для классификации с помощью глубоких сетей\n",
"\n",
"В качестве набора данных используется набор отзывов к фильмам с сайта IMDB.\n",
"\n",
"Набор включает 50 000 отзывов, половина из которых находится в обучающем наборе данных (x_train), а половина - в тестовом (x_valid). \n",
"\n",
"Данные уже предобработаны для простоты работы с ними.\n",
"\n",
"unique_words - в векторное пространство включается только слова, которые встречаются в корпусе не менее 5000 раз.\n",
"\n",
"max_length - максимальная длина отзыва (если больше, то обрезается, если меньше, то дополняется \"пустыми\" словами)."
]
},
{
"cell_type": "code",
"execution_count": 13,
@ -43,6 +69,23 @@
"(X_train, y_train), (X_valid, y_valid) = imdb.load_data(num_words=unique_words, skip_top=50)"
]
},
{
"cell_type": "markdown",
"id": "022cf1f8",
"metadata": {},
"source": [
"#### Исследование набора данных\n",
"\n",
"Все слова закодированы числовыми идентификаторами для снижения расхода памяти\n",
"\n",
"Идентификаторы 0, 1 и 2 зарезервированы:\n",
"- 0 (PAD) - заполняющее (\"пустое\") слово для дополнения отзывов до длины 100;\n",
"- 1 (START) - определяет начло отзыва;\n",
"- 2 (UNK) - отфильтрованные при загрузке отзывов слова (редкие слова или стоп-слов).\n",
"\n",
"Далее идентификаторы определяют слова в порядке снижения частоты их встречаемости в корпусе."
]
},
{
"cell_type": "code",
"execution_count": 14,
@ -1070,6 +1113,16 @@
"index_word"
]
},
{
"cell_type": "markdown",
"id": "a04781ef",
"metadata": {},
"source": [
"#### Вывод первого отзыва из тренировочной выборки\n",
"\n",
"Отзывы содержат только идентификаторы для экономии памяти"
]
},
{
"cell_type": "code",
"execution_count": 15,
@ -1308,6 +1361,14 @@
"X_train[0]"
]
},
{
"cell_type": "markdown",
"id": "d0eca5f5",
"metadata": {},
"source": [
"#### Можно заменить идентификаторы на реальные слова с учетом предобработки"
]
},
{
"cell_type": "code",
"execution_count": 16,
@ -1329,6 +1390,14 @@
"\" \".join(index_word[id] for id in X_train[0])"
]
},
{
"cell_type": "markdown",
"id": "ab903f3e",
"metadata": {},
"source": [
"#### Можно вывести изначальный отзыв (если выключить удаление редких слов и стоп-слов)"
]
},
{
"cell_type": "code",
"execution_count": 17,
@ -1351,6 +1420,16 @@
"\" \".join(index_word[id] for id in textual_X_train[0])"
]
},
{
"cell_type": "markdown",
"id": "35e4c578",
"metadata": {},
"source": [
"#### Приведение отзывов к длине max_length (100)\n",
"\n",
"padding и truncating - дополнение и обрезка отзывов начинается с начала (учитывается специфика затухания градиента в рекуррентных сетях)"
]
},
{
"cell_type": "code",
"execution_count": 18,
@ -1364,6 +1443,16 @@
"X_valid = pad_sequences(X_valid, maxlen=max_length, padding=\"pre\", truncating=\"pre\", value=0)"
]
},
{
"cell_type": "markdown",
"id": "87eac800",
"metadata": {},
"source": [
"#### Формирование архитектуры глубокой полносвязанной сети\n",
"\n",
"Первый слой (Embedding) выполняет векторизацию"
]
},
{
"cell_type": "code",
"execution_count": 19,
@ -1475,6 +1564,18 @@
"simple_model.summary()"
]
},
{
"cell_type": "markdown",
"id": "0ff9c40a",
"metadata": {},
"source": [
"#### Обучение модели\n",
"\n",
"Веса модели сохраняются в каталог tmp после каждой эпохи обучения с помощью callback-параметра\n",
"\n",
"В дальнейшем веса можно загрузить"
]
},
{
"cell_type": "code",
"execution_count": 20,
@ -1525,6 +1626,16 @@
")"
]
},
{
"cell_type": "markdown",
"id": "3c495301",
"metadata": {},
"source": [
"#### Загрузка лучшей модели и оценка ее качества\n",
"\n",
"Качество модели - 84.6 %."
]
},
{
"cell_type": "code",
"execution_count": 21,
@ -1554,6 +1665,14 @@
"simple_model.evaluate(X_valid, y_valid)"
]
},
{
"cell_type": "markdown",
"id": "b1157104",
"metadata": {},
"source": [
"#### Визуализация распределения вероятностей результатов модели на валидационной выборке"
]
},
{
"cell_type": "code",
"execution_count": 22,

View File

@ -1,5 +1,13 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "624cd060",
"metadata": {},
"source": [
"#### Инициализация Keras"
]
},
{
"cell_type": "code",
"execution_count": 1,
@ -43,6 +51,16 @@
"(X_train, y_train), (X_valid, y_valid) = imdb.load_data(num_words=unique_words)"
]
},
{
"cell_type": "markdown",
"id": "43bc7663",
"metadata": {},
"source": [
"#### Приведение отзывов к длине max_length (400)\n",
"\n",
"padding и truncating - дополнение и обрезка отзывов начинается с начала (учитывается специфика затухания градиента в рекуррентных сетях)"
]
},
{
"cell_type": "code",
"execution_count": 3,
@ -56,6 +74,16 @@
"X_valid = pad_sequences(X_valid, maxlen=max_length, padding=\"pre\", truncating=\"pre\", value=0)"
]
},
{
"cell_type": "markdown",
"id": "38c26048",
"metadata": {},
"source": [
"#### Формирование архитектуры глубокой сверточной сети\n",
"\n",
"Первый слой (Embedding) выполняет векторизацию"
]
},
{
"cell_type": "code",
"execution_count": 4,
@ -188,6 +216,18 @@
"conv_model.summary()"
]
},
{
"cell_type": "markdown",
"id": "ddab8c65",
"metadata": {},
"source": [
"#### Обучение модели\n",
"\n",
"Веса модели сохраняются в каталог tmp после каждой эпохи обучения с помощью callback-параметра\n",
"\n",
"В дальнейшем веса можно загрузить"
]
},
{
"cell_type": "code",
"execution_count": 5,
@ -238,6 +278,16 @@
")"
]
},
{
"cell_type": "markdown",
"id": "e5e1e1b7",
"metadata": {},
"source": [
"#### Загрузка лучшей модели и оценка ее качества\n",
"\n",
"Качество модели - 89.1 %."
]
},
{
"cell_type": "code",
"execution_count": 6,
@ -267,6 +317,14 @@
"conv_model.evaluate(X_valid, y_valid)"
]
},
{
"cell_type": "markdown",
"id": "ee31cb44",
"metadata": {},
"source": [
"#### Визуализация распределения вероятностей результатов модели на валидационной выборке"
]
},
{
"cell_type": "code",
"execution_count": 7,

View File

@ -1,5 +1,15 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "e13159d6",
"metadata": {},
"source": [
"#### Инициализация Keras\n",
"\n",
"torch был заменен на jax, так как с torch рекуррентные сети не работали"
]
},
{
"cell_type": "code",
"execution_count": 1,
@ -23,6 +33,29 @@
"print(keras.__version__)"
]
},
{
"cell_type": "markdown",
"id": "06e989a5",
"metadata": {},
"source": [
"#### Загрузка данных для классификации с помощью глубоких сетей\n",
"\n",
"В качестве набора данных используется набор отзывов к фильмам с сайта IMDB.\n",
"\n",
"Набор включает 50 000 отзывов, половина из которых находится в обучающем наборе данных (x_train), а половина - в тестовом (x_valid). \n",
"\n",
"Метки (y_train и y_valid) имеют бинарный характер и назначены в соответствии с этими 10-балльными оценками:\n",
"- отзывы с четырьмя звездами или меньше считаются отрицательным (y = 0);\n",
"- отзывы с семью звездами или больше считаются положительными (y = 1);\n",
"- умеренные отзывы — с пятью или шестью звездами — не включались в набор данных, что упрощает задачу бинарной классификации.\n",
"\n",
"Данные уже предобработаны для простоты работы с ними.\n",
"\n",
"unique_words - в векторное пространство включается только слова, которые встречаются в корпусе не менее 10 000 раз.\n",
"\n",
"max_length - максимальная длина отзыва (если больше, то обрезается, если меньше, то дополняется \"пустыми\" словами)."
]
},
{
"cell_type": "code",
"execution_count": 2,
@ -43,6 +76,16 @@
"(X_train, y_train), (X_valid, y_valid) = imdb.load_data(num_words=unique_words)"
]
},
{
"cell_type": "markdown",
"id": "86b62f23",
"metadata": {},
"source": [
"#### Приведение отзывов к длине max_length (100)\n",
"\n",
"padding и truncating - дополнение и обрезка отзывов начинается с начала (учитывается специфика затухания градиента в рекуррентных сетях)"
]
},
{
"cell_type": "code",
"execution_count": 3,
@ -56,6 +99,17 @@
"X_valid = pad_sequences(X_valid, maxlen=max_length, padding=\"pre\", truncating=\"pre\", value=0)"
]
},
{
"cell_type": "markdown",
"id": "a78bde02",
"metadata": {},
"source": [
"#### Формирование архитектуры глубокой рекуррентной сети\n",
"\n",
"\n",
"Первый слой (Embedding) выполняет векторизацию"
]
},
{
"cell_type": "code",
"execution_count": 4,
@ -164,6 +218,18 @@
"rnn_model.summary()"
]
},
{
"cell_type": "markdown",
"id": "23900b11",
"metadata": {},
"source": [
"#### Обучение модели\n",
"\n",
"Веса модели сохраняются в каталог tmp после каждой эпохи обучения с помощью callback-параметра\n",
"\n",
"В дальнейшем веса можно загрузить"
]
},
{
"cell_type": "code",
"execution_count": 5,
@ -238,6 +304,16 @@
")"
]
},
{
"cell_type": "markdown",
"id": "ccf878d3",
"metadata": {},
"source": [
"#### Загрузка лучшей модели и оценка ее качества\n",
"\n",
"Качество модели - 73.6 %."
]
},
{
"cell_type": "code",
"execution_count": 6,
@ -267,6 +343,14 @@
"rnn_model.evaluate(X_valid, y_valid)"
]
},
{
"cell_type": "markdown",
"id": "e05b98c0",
"metadata": {},
"source": [
"#### Визуализация распределения вероятностей результатов модели на валидационной выборке"
]
},
{
"cell_type": "code",
"execution_count": 7,

View File

@ -1,5 +1,15 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "67f49f36",
"metadata": {},
"source": [
"#### Инициализация Keras\n",
"\n",
"torch был заменен на jax, так как с torch рекуррентные сети не работали"
]
},
{
"cell_type": "code",
"execution_count": 1,
@ -23,6 +33,29 @@
"print(keras.__version__)"
]
},
{
"cell_type": "markdown",
"id": "b0bb5f9b",
"metadata": {},
"source": [
"#### Загрузка данных для классификации с помощью глубоких сетей\n",
"\n",
"В качестве набора данных используется набор отзывов к фильмам с сайта IMDB.\n",
"\n",
"Набор включает 50 000 отзывов, половина из которых находится в обучающем наборе данных (x_train), а половина - в тестовом (x_valid). \n",
"\n",
"Метки (y_train и y_valid) имеют бинарный характер и назначены в соответствии с этими 10-балльными оценками:\n",
"- отзывы с четырьмя звездами или меньше считаются отрицательным (y = 0);\n",
"- отзывы с семью звездами или больше считаются положительными (y = 1);\n",
"- умеренные отзывы — с пятью или шестью звездами — не включались в набор данных, что упрощает задачу бинарной классификации.\n",
"\n",
"Данные уже предобработаны для простоты работы с ними.\n",
"\n",
"unique_words - в векторное пространство включается только слова, которые встречаются в корпусе не менее 10 000 раз.\n",
"\n",
"max_length - максимальная длина отзыва (если больше, то обрезается, если меньше, то дополняется \"пустыми\" словами)."
]
},
{
"cell_type": "code",
"execution_count": 2,
@ -43,6 +76,16 @@
"(X_train, y_train), (X_valid, y_valid) = imdb.load_data(num_words=unique_words)"
]
},
{
"cell_type": "markdown",
"id": "6cac9141",
"metadata": {},
"source": [
"#### Приведение отзывов к длине max_length (100)\n",
"\n",
"padding и truncating - дополнение и обрезка отзывов начинается с начала (учитывается специфика затухания градиента в рекуррентных сетях)"
]
},
{
"cell_type": "code",
"execution_count": 3,
@ -56,6 +99,17 @@
"X_valid = pad_sequences(X_valid, maxlen=max_length, padding=\"pre\", truncating=\"pre\", value=0)"
]
},
{
"cell_type": "markdown",
"id": "02e37d8c",
"metadata": {},
"source": [
"#### Формирование архитектуры глубокой рекуррентной LSTM сети\n",
"\n",
"\n",
"Первый слой (Embedding) выполняет векторизацию"
]
},
{
"cell_type": "code",
"execution_count": 4,
@ -164,6 +218,18 @@
"lstm_model.summary()"
]
},
{
"cell_type": "markdown",
"id": "05334f15",
"metadata": {},
"source": [
"#### Обучение модели\n",
"\n",
"Веса модели сохраняются в каталог tmp после каждой эпохи обучения с помощью callback-параметра\n",
"\n",
"В дальнейшем веса можно загрузить"
]
},
{
"cell_type": "code",
"execution_count": 5,
@ -214,6 +280,16 @@
")"
]
},
{
"cell_type": "markdown",
"id": "e3b39f42",
"metadata": {},
"source": [
"#### Загрузка лучшей модели и оценка ее качества\n",
"\n",
"Качество модели - 85.3 %."
]
},
{
"cell_type": "code",
"execution_count": 6,
@ -243,6 +319,14 @@
"lstm_model.evaluate(X_valid, y_valid)"
]
},
{
"cell_type": "markdown",
"id": "d1aa3151",
"metadata": {},
"source": [
"#### Визуализация распределения вероятностей результатов модели на валидационной выборке"
]
},
{
"cell_type": "code",
"execution_count": 7,

View File

@ -1,5 +1,15 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "c2308ffe",
"metadata": {},
"source": [
"#### Инициализация Keras\n",
"\n",
"torch был заменен на jax, так как с torch рекуррентные сети не работали"
]
},
{
"cell_type": "code",
"execution_count": 1,
@ -23,6 +33,29 @@
"print(keras.__version__)"
]
},
{
"cell_type": "markdown",
"id": "8e4a9a71",
"metadata": {},
"source": [
"#### Загрузка данных для классификации с помощью глубоких сетей\n",
"\n",
"В качестве набора данных используется набор отзывов к фильмам с сайта IMDB.\n",
"\n",
"Набор включает 50 000 отзывов, половина из которых находится в обучающем наборе данных (x_train), а половина - в тестовом (x_valid). \n",
"\n",
"Метки (y_train и y_valid) имеют бинарный характер и назначены в соответствии с этими 10-балльными оценками:\n",
"- отзывы с четырьмя звездами или меньше считаются отрицательным (y = 0);\n",
"- отзывы с семью звездами или больше считаются положительными (y = 1);\n",
"- умеренные отзывы — с пятью или шестью звездами — не включались в набор данных, что упрощает задачу бинарной классификации.\n",
"\n",
"Данные уже предобработаны для простоты работы с ними.\n",
"\n",
"unique_words - в векторное пространство включается только слова, которые встречаются в корпусе не менее 10 000 раз.\n",
"\n",
"max_length - максимальная длина отзыва (если больше, то обрезается, если меньше, то дополняется \"пустыми\" словами)."
]
},
{
"cell_type": "code",
"execution_count": 2,
@ -43,6 +76,16 @@
"(X_train, y_train), (X_valid, y_valid) = imdb.load_data(num_words=unique_words)"
]
},
{
"cell_type": "markdown",
"id": "c58423e9",
"metadata": {},
"source": [
"#### Приведение отзывов к длине max_length (100)\n",
"\n",
"padding и truncating - дополнение и обрезка отзывов начинается с начала (учитывается специфика затухания градиента в рекуррентных сетях)"
]
},
{
"cell_type": "code",
"execution_count": 3,
@ -56,6 +99,17 @@
"X_valid = pad_sequences(X_valid, maxlen=max_length, padding=\"pre\", truncating=\"pre\", value=0)"
]
},
{
"cell_type": "markdown",
"id": "7db364f4",
"metadata": {},
"source": [
"#### Формирование архитектуры глубокой рекуррентной двунаправленной LSTM сети\n",
"\n",
"\n",
"Первый слой (Embedding) выполняет векторизацию"
]
},
{
"cell_type": "code",
"execution_count": 4,
@ -164,6 +218,18 @@
"blstm_model.summary()"
]
},
{
"cell_type": "markdown",
"id": "3a826105",
"metadata": {},
"source": [
"#### Обучение модели\n",
"\n",
"Веса модели сохраняются в каталог tmp после каждой эпохи обучения с помощью callback-параметра\n",
"\n",
"В дальнейшем веса можно загрузить"
]
},
{
"cell_type": "code",
"execution_count": 5,
@ -218,6 +284,16 @@
")"
]
},
{
"cell_type": "markdown",
"id": "a47a8ff6",
"metadata": {},
"source": [
"#### Загрузка лучшей модели и оценка ее качества\n",
"\n",
"Качество модели - 84.6 %."
]
},
{
"cell_type": "code",
"execution_count": 6,
@ -247,6 +323,14 @@
"blstm_model.evaluate(X_valid, y_valid)"
]
},
{
"cell_type": "markdown",
"id": "7001f712",
"metadata": {},
"source": [
"#### Визуализация распределения вероятностей результатов модели на валидационной выборке"
]
},
{
"cell_type": "code",
"execution_count": 7,