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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

File diff suppressed because one or more lines are too long