Compare commits

..

No commits in common. "9a516679cad67a812c9af092e79172b372df82b4" and "7469db0fac8e6ab4b718be30d39df0fd8d230d27" have entirely different histories.

10 changed files with 14 additions and 1079 deletions

View File

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

View File

@ -5,26 +5,7 @@
"id": "7915f17e",
"metadata": {},
"source": [
"#### Инициализация 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"
"### Инициализация Keras"
]
},
{
@ -59,7 +40,7 @@
"\n",
"В данном примере используется фрагмент набора данных Cats and Dogs Classification Dataset\n",
"\n",
"В наборе данных два класса (всего 24 998 изображений): кошки (12 499 изображения) и собаки (12 499 изображения)\n",
"В наборе данных два класса: кошки и собаки\n",
"\n",
"Ссылка: https://www.kaggle.com/datasets/bhavikjikadara/dog-and-cat-classification-dataset"
]
@ -83,19 +64,7 @@
"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",
"Изображения подгружаются с диска в процессе обучения и валидации модели."
"#### Формирование выборок"
]
},
{
@ -160,9 +129,7 @@
"id": "bfb9434d",
"metadata": {},
"source": [
"### Архитектура AlexNet\n",
"\n",
"Модель AlexNet описана в лекции про глубокое обучение"
"### Архитектура AlexNet"
]
},
{
@ -628,9 +595,7 @@
"id": "a831795e",
"metadata": {},
"source": [
"#### Оценка качества модели\n",
"\n",
"Качество модели - 88.2 %.#### Оценка качества модели"
"#### Оценка качества модели"
]
},
{
@ -661,16 +626,6 @@
"alexnet_model.evaluate(valid)"
]
},
{
"cell_type": "markdown",
"id": "7c1b7fd8",
"metadata": {},
"source": [
"#### Пример использования обученной модели\n",
"\n",
"Для примера используются случайные изображения из сети Интернет"
]
},
{
"cell_type": "code",
"execution_count": 16,

View File

@ -5,26 +5,7 @@
"id": "7915f17e",
"metadata": {},
"source": [
"#### Инициализация 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"
"### Инициализация Keras"
]
},
{
@ -59,7 +40,7 @@
"\n",
"В данном примере используется фрагмент набора данных Cats and Dogs Classification Dataset\n",
"\n",
"В наборе данных два класса (всего 24 998 изображений): кошки (12 499 изображения) и собаки (12 499 изображения)\n",
"В наборе данных два класса: кошки и собаки\n",
"\n",
"Ссылка: https://www.kaggle.com/datasets/bhavikjikadara/dog-and-cat-classification-dataset"
]
@ -83,19 +64,7 @@
"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",
"Изображения подгружаются с диска в процессе обучения и валидации модели."
"#### Формирование выборок"
]
},
{
@ -168,10 +137,7 @@
"id": "ae32c572",
"metadata": {},
"source": [
"Загрузка предобученной модели VGG19:\n",
"- Загрузка весов, полученных при обучении модели на наборе данных ImageNet\n",
"- Отключение полносвязанных слоев для адаптации к новой задаче\n",
"- Модель будет работать с изображениями 224 на 224 пиксела и RGB пространством"
"Загрузка предобученной модели и отключение обучения для ее слоев"
]
},
{
@ -308,9 +274,7 @@
"id": "49fceead",
"metadata": {},
"source": [
"#### Обучение глубокой модели\n",
"\n",
"Обучение остановлено после второго шага, так как качество модели приемлемое"
"#### Обучение глубокой модели"
]
},
{
@ -394,9 +358,7 @@
"id": "a831795e",
"metadata": {},
"source": [
"#### Оценка качества модели\n",
"\n",
"Качество модели - 96.3 %."
"#### Оценка качества модели"
]
},
{
@ -427,16 +389,6 @@
"tl_model.evaluate(valid)"
]
},
{
"cell_type": "markdown",
"id": "9d0106c8",
"metadata": {},
"source": [
"#### Пример использования обученной модели\n",
"\n",
"Для примера используются случайные изображения из сети Интернет"
]
},
{
"cell_type": "code",
"execution_count": 8,

View File

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

View File

@ -1,13 +1,5 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "0fd64751",
"metadata": {},
"source": [
"#### Инициализация Keras"
]
},
{
"cell_type": "code",
"execution_count": 12,
@ -31,24 +23,6 @@
"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,
@ -69,23 +43,6 @@
"(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,
@ -1113,16 +1070,6 @@
"index_word"
]
},
{
"cell_type": "markdown",
"id": "a04781ef",
"metadata": {},
"source": [
"#### Вывод первого отзыва из тренировочной выборки\n",
"\n",
"Отзывы содержат только идентификаторы для экономии памяти"
]
},
{
"cell_type": "code",
"execution_count": 15,
@ -1361,14 +1308,6 @@
"X_train[0]"
]
},
{
"cell_type": "markdown",
"id": "d0eca5f5",
"metadata": {},
"source": [
"#### Можно заменить идентификаторы на реальные слова с учетом предобработки"
]
},
{
"cell_type": "code",
"execution_count": 16,
@ -1390,14 +1329,6 @@
"\" \".join(index_word[id] for id in X_train[0])"
]
},
{
"cell_type": "markdown",
"id": "ab903f3e",
"metadata": {},
"source": [
"#### Можно вывести изначальный отзыв (если выключить удаление редких слов и стоп-слов)"
]
},
{
"cell_type": "code",
"execution_count": 17,
@ -1420,16 +1351,6 @@
"\" \".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,
@ -1443,16 +1364,6 @@
"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,
@ -1564,18 +1475,6 @@
"simple_model.summary()"
]
},
{
"cell_type": "markdown",
"id": "0ff9c40a",
"metadata": {},
"source": [
"#### Обучение модели\n",
"\n",
"Веса модели сохраняются в каталог tmp после каждой эпохи обучения с помощью callback-параметра\n",
"\n",
"В дальнейшем веса можно загрузить"
]
},
{
"cell_type": "code",
"execution_count": 20,
@ -1626,16 +1525,6 @@
")"
]
},
{
"cell_type": "markdown",
"id": "3c495301",
"metadata": {},
"source": [
"#### Загрузка лучшей модели и оценка ее качества\n",
"\n",
"Качество модели - 84.6 %."
]
},
{
"cell_type": "code",
"execution_count": 21,
@ -1665,14 +1554,6 @@
"simple_model.evaluate(X_valid, y_valid)"
]
},
{
"cell_type": "markdown",
"id": "b1157104",
"metadata": {},
"source": [
"#### Визуализация распределения вероятностей результатов модели на валидационной выборке"
]
},
{
"cell_type": "code",
"execution_count": 22,

View File

@ -1,13 +1,5 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "624cd060",
"metadata": {},
"source": [
"#### Инициализация Keras"
]
},
{
"cell_type": "code",
"execution_count": 1,
@ -51,16 +43,6 @@
"(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,
@ -74,16 +56,6 @@
"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,
@ -216,18 +188,6 @@
"conv_model.summary()"
]
},
{
"cell_type": "markdown",
"id": "ddab8c65",
"metadata": {},
"source": [
"#### Обучение модели\n",
"\n",
"Веса модели сохраняются в каталог tmp после каждой эпохи обучения с помощью callback-параметра\n",
"\n",
"В дальнейшем веса можно загрузить"
]
},
{
"cell_type": "code",
"execution_count": 5,
@ -278,16 +238,6 @@
")"
]
},
{
"cell_type": "markdown",
"id": "e5e1e1b7",
"metadata": {},
"source": [
"#### Загрузка лучшей модели и оценка ее качества\n",
"\n",
"Качество модели - 89.1 %."
]
},
{
"cell_type": "code",
"execution_count": 6,
@ -317,14 +267,6 @@
"conv_model.evaluate(X_valid, y_valid)"
]
},
{
"cell_type": "markdown",
"id": "ee31cb44",
"metadata": {},
"source": [
"#### Визуализация распределения вероятностей результатов модели на валидационной выборке"
]
},
{
"cell_type": "code",
"execution_count": 7,

View File

@ -1,15 +1,5 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "e13159d6",
"metadata": {},
"source": [
"#### Инициализация Keras\n",
"\n",
"torch был заменен на jax, так как с torch рекуррентные сети не работали"
]
},
{
"cell_type": "code",
"execution_count": 1,
@ -33,29 +23,6 @@
"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,
@ -76,16 +43,6 @@
"(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,
@ -99,17 +56,6 @@
"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,
@ -218,18 +164,6 @@
"rnn_model.summary()"
]
},
{
"cell_type": "markdown",
"id": "23900b11",
"metadata": {},
"source": [
"#### Обучение модели\n",
"\n",
"Веса модели сохраняются в каталог tmp после каждой эпохи обучения с помощью callback-параметра\n",
"\n",
"В дальнейшем веса можно загрузить"
]
},
{
"cell_type": "code",
"execution_count": 5,
@ -304,16 +238,6 @@
")"
]
},
{
"cell_type": "markdown",
"id": "ccf878d3",
"metadata": {},
"source": [
"#### Загрузка лучшей модели и оценка ее качества\n",
"\n",
"Качество модели - 73.6 %."
]
},
{
"cell_type": "code",
"execution_count": 6,
@ -343,14 +267,6 @@
"rnn_model.evaluate(X_valid, y_valid)"
]
},
{
"cell_type": "markdown",
"id": "e05b98c0",
"metadata": {},
"source": [
"#### Визуализация распределения вероятностей результатов модели на валидационной выборке"
]
},
{
"cell_type": "code",
"execution_count": 7,

View File

@ -1,15 +1,5 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "67f49f36",
"metadata": {},
"source": [
"#### Инициализация Keras\n",
"\n",
"torch был заменен на jax, так как с torch рекуррентные сети не работали"
]
},
{
"cell_type": "code",
"execution_count": 1,
@ -33,29 +23,6 @@
"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,
@ -76,16 +43,6 @@
"(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,
@ -99,17 +56,6 @@
"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,
@ -218,18 +164,6 @@
"lstm_model.summary()"
]
},
{
"cell_type": "markdown",
"id": "05334f15",
"metadata": {},
"source": [
"#### Обучение модели\n",
"\n",
"Веса модели сохраняются в каталог tmp после каждой эпохи обучения с помощью callback-параметра\n",
"\n",
"В дальнейшем веса можно загрузить"
]
},
{
"cell_type": "code",
"execution_count": 5,
@ -280,16 +214,6 @@
")"
]
},
{
"cell_type": "markdown",
"id": "e3b39f42",
"metadata": {},
"source": [
"#### Загрузка лучшей модели и оценка ее качества\n",
"\n",
"Качество модели - 85.3 %."
]
},
{
"cell_type": "code",
"execution_count": 6,
@ -319,14 +243,6 @@
"lstm_model.evaluate(X_valid, y_valid)"
]
},
{
"cell_type": "markdown",
"id": "d1aa3151",
"metadata": {},
"source": [
"#### Визуализация распределения вероятностей результатов модели на валидационной выборке"
]
},
{
"cell_type": "code",
"execution_count": 7,

View File

@ -1,15 +1,5 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "c2308ffe",
"metadata": {},
"source": [
"#### Инициализация Keras\n",
"\n",
"torch был заменен на jax, так как с torch рекуррентные сети не работали"
]
},
{
"cell_type": "code",
"execution_count": 1,
@ -33,29 +23,6 @@
"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,
@ -76,16 +43,6 @@
"(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,
@ -99,17 +56,6 @@
"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,
@ -218,18 +164,6 @@
"blstm_model.summary()"
]
},
{
"cell_type": "markdown",
"id": "3a826105",
"metadata": {},
"source": [
"#### Обучение модели\n",
"\n",
"Веса модели сохраняются в каталог tmp после каждой эпохи обучения с помощью callback-параметра\n",
"\n",
"В дальнейшем веса можно загрузить"
]
},
{
"cell_type": "code",
"execution_count": 5,
@ -284,16 +218,6 @@
")"
]
},
{
"cell_type": "markdown",
"id": "a47a8ff6",
"metadata": {},
"source": [
"#### Загрузка лучшей модели и оценка ее качества\n",
"\n",
"Качество модели - 84.6 %."
]
},
{
"cell_type": "code",
"execution_count": 6,
@ -323,14 +247,6 @@
"blstm_model.evaluate(X_valid, y_valid)"
]
},
{
"cell_type": "markdown",
"id": "7001f712",
"metadata": {},
"source": [
"#### Визуализация распределения вероятностей результатов модели на валидационной выборке"
]
},
{
"cell_type": "code",
"execution_count": 7,

File diff suppressed because one or more lines are too long