Compare commits
2 Commits
7469db0fac
...
9a516679ca
Author | SHA1 | Date | |
---|---|---|---|
9a516679ca | |||
7250170500 |
@ -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."
|
||||
]
|
||||
},
|
||||
|
@ -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,
|
||||
|
@ -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,
|
||||
|
@ -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,
|
||||
|
@ -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,
|
||||
|
@ -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,
|
||||
|
@ -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,
|
||||
|
@ -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,
|
||||
|
@ -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,
|
||||
|
389
lec4-7-nlp-mlstm.ipynb
Normal file
389
lec4-7-nlp-mlstm.ipynb
Normal file
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user