From a1c8d8598c447859701b20d4e11f540660580149 Mon Sep 17 00:00:00 2001 From: TekotovaVA Date: Sun, 14 Dec 2025 17:47:29 +0000 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=B8?= =?UTF-8?q?=D0=BB(=D0=B0)=20=D1=84=D0=B0=D0=B9=D0=BB=D1=8B=20=D0=B2=20'lab?= =?UTF-8?q?works/LW4'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- labworks/LW4/1.png | Bin 0 -> 21109 bytes labworks/LW4/report.md | 394 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 394 insertions(+) create mode 100644 labworks/LW4/1.png create mode 100644 labworks/LW4/report.md diff --git a/labworks/LW4/1.png b/labworks/LW4/1.png new file mode 100644 index 0000000000000000000000000000000000000000..beac02cf98acc8479bf0484aa5a40e62c47588c9 GIT binary patch literal 21109 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 literal 0 HcmV?d00001 diff --git a/labworks/LW4/report.md b/labworks/LW4/report.md new file mode 100644 index 0000000..95ad8a2 --- /dev/null +++ b/labworks/LW4/report.md @@ -0,0 +1,394 @@ +# Отчёт по лабораторной работе №4 + +**Текотова Виктория, Секирин Артем — А-02-22** + +--- +## Задание 1 + +### 1) В среде Google Colab создали новый блокнот (notebook). Импортировали необходимые для работы библиотеки и модули. Настроили блокнот для работы с аппаратным ускорителем GPU. + +```python +# импорт модулей +import os +os.chdir('/content/drive/MyDrive/Colab Notebooks/is_lab4') + +from tensorflow import keras +from tensorflow.keras import layers +from tensorflow.keras.models import Sequential +import matplotlib.pyplot as plt +import numpy as np +``` +```python +import tensorflow as tf +device_name = tf.test.gpu_device_name() +if device_name != '/device:GPU:0': + raise SystemError('GPU device not found') +print('Found GPU at: {}'.format(device_name)) +``` +>Found GPU at: /device:GPU:0 + +### 2) Загрузили набор данных IMDb, содержащий оцифрованные отзывы на фильмы, размеченные на два класса: позитивные и негативные. При загрузке набора данных параметр seed выбрали равным значению (4k – 1)=23, где k=6 – номер бригады. Вывели размеры полученных обучающих и тестовых массивов данных. + +```python +# загрузка датасета +from keras.datasets import imdb + +vocabulary_size = 5000 +index_from = 3 + +(X_train, y_train), (X_test, y_test) = imdb.load_data( + path="imdb.npz", + num_words=vocabulary_size, + skip_top=0, + maxlen=None, + seed=26, + start_char=1, + oov_char=2, + index_from=index_from + ) + +# вывод размерностей +print('Shape of X train:', X_train.shape) +print('Shape of y train:', y_train.shape) +print('Shape of X test:', X_test.shape) +print('Shape of y test:', y_test.shape) +``` + +>Shape of X train: (25000,) +> +>Shape of y train: (25000,) +> +>Shape of X test: (25000,) +> +>Shape of y test: (25000,) + + +### 3) Вывели один отзыв из обучающего множества в виде списка индексов слов. Преобразовали список индексов в текст и вывели отзыв в виде текста. Вывели длину отзыва. Вывели метку класса данного отзыва и название класса (1 – Positive, 0 – Negative). + +```python +# создание словаря для перевода индексов в слова +# заргузка словаря "слово:индекс" +word_to_id = imdb.get_word_index() +# уточнение словаря +word_to_id = {key:(value + index_from) for key,value in word_to_id.items()} +word_to_id[""] = 0 +word_to_id[""] = 1 +word_to_id[""] = 2 +word_to_id[""] = 3 +# создание обратного словаря "индекс:слово" +id_to_word = {value:key for key,value in word_to_id.items()} +``` +```python +print(X_train[26]) +print('len:',len(X_train[26])) +``` + +> [1, 37, 1388, 4, 2739, 495, 94, 96, 143, 49, 2, 875, 551, 19, 195, 2210, 5, 1698, 8, 401, 4, 65, 24, 64, 1728, 21, 400, 642, 45, 77, 6, 137, 237, 207, 258, 141, 6, 1562, 1301, 1562, 737, 22, 10, 10, 4, 22, 9, 1490, 3862, 4, 744, 19, 307, 1385, 5, 2, 2, 4, 2, 2656, 2, 1669, 19, 4, 1074, 200, 4, 55, 406, 55, 3048, 5, 246, 55, 1451, 105, 688, 8, 4, 321, 177, 32, 677, 7, 4, 678, 1850, 26, 1669, 221, 5, 3921, 10, 10, 13, 386, 37, 1388, 4, 2739, 45, 6, 66, 163, 20, 15, 304, 6, 3049, 168, 33, 4, 4352, 15, 75, 70, 2, 23, 257, 85, 5, 4, 2789, 878, 21, 1305, 2, 1773, 7, 2] +> +> len: 130 +> +```python +review_as_text = ' '.join(id_to_word[id] for id in X_train[26]) +print(review_as_text) +print('len:',len(review_as_text)) +``` + +> who loves the sun works its way through some subject matter with enough wit and grace to keep the story not only engaging but often hilarious it's been a while since i've found such a thoroughly touching thoroughly enjoyable film br br the film is gorgeous drawing the eye with beautiful scenery and the imagery wonderfully with the tension between the very human very flawed and yet very likable characters due to the excellent cast all five of the major players are wonderfully interesting and dynamic br br i recommend who loves the sun it's a really funny movie that takes a poignant look at the hurts that we can on each other and the amazingly difficult but equally process of +> len: 738 + +### 4) Вывели максимальную и минимальную длину отзыва в обучающем множестве. + +```python +print('MAX Len: ',len(max(X_train, key=len))) +print('MIN Len: ',len(min(X_train, key=len))) +``` +> MAX Len: 2494 +> +> MIN Len: 11 + + +### 5) Провели предобработку данных. Выбрали единую длину, к которой будут приведены все отзывы. Короткие отзывы дополнили спецсимволами, а длинные обрезали до выбранной длины. + +```python +# предобработка данных +from tensorflow.keras.utils import pad_sequences +max_words = 500 +X_train = pad_sequences(X_train, maxlen=max_words, value=0, padding='pre', truncating='post') +X_test = pad_sequences(X_test, maxlen=max_words, value=0, padding='pre', truncating='post') +``` + +### 6) Повторили пункт 4. + +```python +print('MAX Len: ',len(max(X_train, key=len))) +print('MIN Len: ',len(min(X_train, key=len))) +``` +> MAX Len: 500 +> +> MIN Len: 500 + + +### 7) Повторили пункт 3. Сделали вывод о том, как отзыв преобразовался после предобработки. +```python +print(X_train[26]) +print('len:',len(X_train[26])) +``` + +> [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 1 37 1388 4 2739 495 94 96 + 143 49 2 875 551 19 195 2210 5 1698 8 401 4 65 + 24 64 1728 21 400 642 45 77 6 137 237 207 258 141 + 6 1562 1301 1562 737 22 10 10 4 22 9 1490 3862 4 + 744 19 307 1385 5 2 2 4 2 2656 2 1669 19 4 + 1074 200 4 55 406 55 3048 5 246 55 1451 105 688 8 + 4 321 177 32 677 7 4 678 1850 26 1669 221 5 3921 + 10 10 13 386 37 1388 4 2739 45 6 66 163 20 15 + 304 6 3049 168 33 4 4352 15 75 70 2 23 257 85 + 5 4 2789 878 21 1305 2 1773 7 2] +> +> len: 500 + + +```python +review_as_text = ' '.join(id_to_word[id] for id in X_train[26]) +print(review_as_text) +print('len:',len(review_as_text)) +``` + +> who loves the sun works its way through some subject matter with enough wit and grace to keep the story not only engaging but often hilarious it's been a while since i've found such a thoroughly touching thoroughly enjoyable film br br the film is gorgeous drawing the eye with beautiful scenery and the imagery wonderfully with the tension between the very human very flawed and yet very likable characters due to the excellent cast all five of the major players are wonderfully interesting and dynamic br br i recommend who loves the sun it's a really funny movie that takes a poignant look at the hurts that we can on each other and the amazingly difficult but equally process of +> +> len: 2958 + +#### После обработки в начало отзыва добавилось необходимое количество токенов , чтобы отзыв был длинной в 500 индексов. + + +### 8) Вывели предобработанные массивы обучающих и тестовых данных и их размерности. + +```python +# вывод данных +print('X train: \n',X_train) +print('X train: \n',X_test) + +# вывод размерностей +print('Shape of X train:', X_train.shape) +print('Shape of X test:', X_test.shape) +``` + +> X train: +> +> [[ 0 0 0 ... 12 38 76] +> +> [ 0 0 0 ... 33 4 130] +> +> [ 0 0 0 ... 437 7 58] +> +> ... +> +> [ 0 0 0 ... 1874 1553 422] +> +> [ 0 0 0 ... 18 1552 234] +> +> [ 0 0 0 ... 7 87 1090]] +> +>X train: +> +> [[ 0 0 0 ... 6 194 717] +> +> [ 0 0 0 ... 30 87 292] +> +> [ 0 0 0 ... 495 55 73] +> +> ... +> +> [ 0 0 0 ... 7 12 908] +> +> [ 0 0 0 ... 61 477 2302] +> +> [ 0 0 0 ... 5 68 4580]] +> +>Shape of X train: (25000, 500) +> +>Shape of X test: (25000, 500) +> + + +### 9) Реализовали модель рекуррентной нейронной сети, состоящей из слоев Embedding, LSTM, Dropout, Dense, и обучили ее на обучающих данных с выделением части обучающих данных в качестве валидационных. Вывели информацию об архитектуре нейронной сети. Добились качества обучения по метрике accuracy не менее 0.8. + +```python +embed_dim = 32 +lstm_units = 64 + +model = Sequential() +model.add(layers.Embedding(input_dim=vocabulary_size, output_dim=embed_dim, input_length=max_words, input_shape=(max_words,))) +model.add(layers.LSTM(lstm_units)) +model.add(layers.Dropout(0.5)) +model.add(layers.Dense(1, activation='sigmoid')) + +model.summary() +``` +>/usr/local/lib/python3.12/dist-packages/keras/src/layers/core/embedding.py:97: UserWarning: Argument `input_length` is deprecated. Just remove it. +> +> warnings.warn( +> +>/usr/local/lib/python3.12/dist-packages/keras/src/layers/core/embedding.py:100: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. +> +>When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead. +> +> super().__init__(**kwargs) +> +>Model: "sequential" +> +>┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ +> +>┃ Layer (type) ┃ Output Shape ┃ Param # ┃ +> +>┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ +> +>│ embedding (Embedding) │ (None, 500, 32) │ 160,000 │ +> +>├─────────────────────────────────┼────────────────────────┼───────────────┤ +> +>│ lstm (LSTM) │ (None, 64) │ 24,832 │ +> +>├─────────────────────────────────┼────────────────────────┼───────────────┤ +> +>│ dropout (Dropout) │ (None, 64) │ 0 │ +> +>├─────────────────────────────────┼────────────────────────┼───────────────┤ +> +>│ dense (Dense) │ (None, 1) │ 65 │ +> +>└─────────────────────────────────┴────────────────────────┴───────────────┘ +> +> Total params: 184,897 (722.25 KB) +> +> Trainable params: 184,897 (722.25 KB) +> +> Non-trainable params: 0 (0.00 B) + +```python +# компилируем и обучаем модель +batch_size = 64 +epochs = 3 +model.compile(loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"]) +model.fit(X_train, y_train, batch_size=batch_size, epochs=epochs, validation_split=0.2) +``` + +>Epoch 1/3 +> +>313/313 ━━━━━━━━━━━━━━━━━━━━ 12s 23ms/step - accuracy: 0.6709 - loss: 0.5808 - val_accuracy: 0.8360 - val_loss: 0.3821 +> +>Epoch 2/3 +> +>313/313 ━━━━━━━━━━━━━━━━━━━━ 7s 22ms/step - accuracy: 0.8632 - loss: 0.3428 - val_accuracy: 0.8552 - val_loss: 0.3822 +> +>Epoch 3/3 +> +>313/313 ━━━━━━━━━━━━━━━━━━━━ 6s 20ms/step - accuracy: 0.8972 - loss: 0.2699 - val_accuracy: 0.8580 - val_loss: 0.3352 +> +> +> + +```python +test_loss, test_acc = model.evaluate(X_test, y_test) +print(f"\nTest accuracy: {test_acc}") +``` + +> 782/782 ━━━━━━━━━━━━━━━━━━━━ 6s 8ms/step - accuracy: 0.8476 - loss: 0.3551 +> +> Test accuracy: 0.8491600155830383 + + +### 10) Оценили качество обучения на тестовых данных: +### - вывели значение метрики качества классификации на тестовых данных +### - вывели отчет о качестве классификации тестовой выборки +### - построили ROC-кривую по результату обработки тестовой выборки и вычислили площадь под ROC-кривой (AUC ROC) + +```python +#значение метрики качества классификации на тестовых данных +print(f"\nTest accuracy: {test_acc}") +``` +> Test accuracy: 0.8491600155830383 + + +```python +#отчет о качестве классификации тестовой выборки +y_score = model.predict(X_test) +y_pred = [1 if y_score[i,0]>=0.5 else 0 for i in range(len(y_score))] + +from sklearn.metrics import classification_report +print(classification_report(y_test, y_pred, labels = [0, 1], target_names=['Negative', 'Positive'])) +``` +>782/782 ━━━━━━━━━━━━━━━━━━━━ 6s 8ms/step +> +> precision recall f1-score support +> +> +> +> Negative 0.81 0.91 0.86 12500 +> +> Positive 0.90 0.79 0.84 12500 +> +> +> +> accuracy 0.85 25000 +> +> macro avg 0.85 0.85 0.85 25000 +> +>weighted avg 0.85 0.85 0.85 25000 + + +```python +#построение ROC-кривой и AUC ROC +from sklearn.metrics import roc_curve, auc + +fpr, tpr, thresholds = roc_curve(y_test, y_score) +plt.plot(fpr, tpr) +plt.grid() +plt.xlabel('False Positive Rate') +plt.ylabel('True Positive Rate') +plt.title('ROC') +plt.show() +print('AUC ROC:', auc(fpr, tpr)) +``` +![picture](1.png) + +> AUC ROC: 0.9323916576 + + +### 11) Сделали выводы по результатам применения рекуррентной нейронной сети для решения задачи определения тональности текста. + +Таблица1: + +| Модель | Количество настраиваемых параметров | Количество эпох обучения | Качество классификации тестовой выборки | +|----------|-------------------------------------|---------------------------|-----------------------------------------| +| Рекуррентная | 184 897 | 3 | accuracy:0.8476 ; loss:0.3551 ; AUC ROC:0.9324 | + + +#### По результатам применения рекуррентной нейронной сети, а также по данным таблицы 1 можно сделать вывод, что модель хорошо справилась с задачей определения тональности текста. Показатель accuracy = 0.8476 превышает требуемый порог 0.8. +#### Значение AUC ROC = 0.9324 (> 0.9) говорит о высокой способности модели различать два класса (положительные и отрицательные отзывы). \ No newline at end of file