From a7fa56d8c255448d255f7a60bf0664103a006c1c Mon Sep 17 00:00:00 2001 From: Fonov_Alexandr Date: Mon, 15 Dec 2025 18:53:24 +0000 Subject: [PATCH] Brawl Stars --- labworks/LW4/image_lr4.png | Bin 0 -> 55606 bytes labworks/LW4/report_lr4.md | 367 +++++++++++++++++++++++++++++++++++++ 2 files changed, 367 insertions(+) create mode 100644 labworks/LW4/image_lr4.png create mode 100644 labworks/LW4/report_lr4.md diff --git a/labworks/LW4/image_lr4.png b/labworks/LW4/image_lr4.png new file mode 100644 index 0000000000000000000000000000000000000000..5227a19bd1c221c47786c3907fc43a9f6e912384 GIT binary patch literal 55606 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 DiR@*@ literal 0 HcmV?d00001 diff --git a/labworks/LW4/report_lr4.md b/labworks/LW4/report_lr4.md new file mode 100644 index 0000000..5f76089 --- /dev/null +++ b/labworks/LW4/report_lr4.md @@ -0,0 +1,367 @@ +# Отчёт по лабораторной работе №4 + +**Фонов А.Д., Хнытченков А.М. — А-01-22** + +--- + +## 1. В среде Google Colab создали новый блокнот (notebook). Настроили блокнот для работы с аппаратным ускорителем GPU. + +```python +from google.colab import drive +drive.mount('/content/drive') +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) = 11, где k = 3 – номер бригады. Вывели размеры полученных обучающих и тестовых массивов данных. + +```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=11, + 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[39]) +print('len:',len(X_train[39])) +``` + +``` +[1, 3206, 2, 3413, 3852, 2, 2, 73, 256, 19, 4396, 3033, 34, 488, 2, 47, 2993, 4058, 11, 63, 29, 4653, 1496, 27, 4122, 54, 4, 1334, 1914, 380, 1587, 56, 351, 18, 147, 2, 2, 15, 29, 238, 30, 4, 455, 564, 167, 1024, 2, 2, 2, 4, 2, 65, 33, 6, 2, 1062, 3861, 6, 3793, 1166, 7, 1074, 1545, 6, 171, 2, 1134, 388, 7, 3569, 2, 567, 31, 255, 37, 47, 6, 3161, 1244, 3119, 19, 6, 2, 11, 12, 2611, 120, 41, 419, 2, 17, 4, 3777, 2, 4952, 2468, 1457, 6, 2434, 4268, 23, 4, 1780, 1309, 5, 1728, 283, 8, 113, 105, 1037, 2, 285, 11, 6, 4800, 2905, 182, 5, 2, 183, 125, 19, 6, 327, 2, 7, 2, 668, 1006, 4, 478, 116, 39, 35, 321, 177, 1525, 2294, 6, 226, 176, 2, 2, 17, 2, 1220, 119, 602, 2, 2, 592, 2, 17, 2, 2, 1405, 2, 597, 503, 1468, 2, 2, 17, 2, 1947, 3702, 884, 1265, 3378, 1561, 2, 17, 2, 2, 992, 3217, 2393, 4923, 2, 17, 2, 2, 1255, 2, 2, 2, 117, 17, 6, 254, 2, 568, 2297, 5, 2, 2, 17, 1047, 2, 2186, 2, 1479, 488, 2, 4906, 627, 166, 1159, 2552, 361, 7, 2877, 2, 2, 665, 718, 2, 2, 2, 603, 4716, 127, 4, 2873, 2, 56, 11, 646, 227, 531, 26, 670, 2, 17, 6, 2, 2, 3510, 2, 17, 6, 2, 2, 2, 3014, 17, 6, 2, 668, 2, 503, 1468, 2, 19, 11, 4, 1746, 5, 2, 4778, 11, 31, 7, 41, 1273, 154, 255, 555, 6, 1156, 5, 737, 431] +len: 274 +``` + +```python +review_as_text = ' '.join(id_to_word[id] for id in X_train[39]) +print(review_as_text) +print('len:',len(review_as_text)) +``` + +``` + troubled magazine photographer well played with considerable intensity by michael has horrific nightmares in which he brutally murders his models when the lovely ladies start turning up dead for real that he might be the killer writer director william the story at a pace builds a reasonable amount of tension delivers a few effective moments of savage violence one woman who has a plastic garbage bag with a in it placed over her head as the definite inducing highlight puts a refreshing emphasis on the nicely drawn and engaging true to life characters further everything in a plausible everyday world and things off with a nice of female nudity the fine acting from an excellent cast helps matters a whole lot as charming love interest james as double brother b j as concerned psychiatrist dr frank curtis don as gay assistant louis pamela as detective little as a hard police chief and as sweet model r michael polished cinematography makes impressive occasional use of breathtaking shots jack score likewise does the trick up in cool bit parts are robert as a sally as a shower as a female b j with in the ring and bay in one of her standard old woman roles a solid and enjoyable picture +len: 1584 +``` + +--- + +## 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[39]) +print('len:',len(X_train[39])) +``` + +``` +[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 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 3206 2 3413 3852 2 2 73 256 19 4396 3033 + 34 488 2 47 2993 4058 11 63 29 4653 1496 27 4122 54 + 4 1334 1914 380 1587 56 351 18 147 2 2 15 29 238 + 30 4 455 564 167 1024 2 2 2 4 2 65 33 6 + 2 1062 3861 6 3793 1166 7 1074 1545 6 171 2 1134 388 + 7 3569 2 567 31 255 37 47 6 3161 1244 3119 19 6 + 2 11 12 2611 120 41 419 2 17 4 3777 2 4952 2468 + 1457 6 2434 4268 23 4 1780 1309 5 1728 283 8 113 105 + 1037 2 285 11 6 4800 2905 182 5 2 183 125 19 6 +... + 2 2 3510 2 17 6 2 2 2 3014 17 6 2 668 + 2 503 1468 2 19 11 4 1746 5 2 4778 11 31 7 + 41 1273 154 255 555 6 1156 5 737 431] +len: 500 +``` + +```python +review_as_text = ' '.join(id_to_word[id] for id in X_train[17]) +print(review_as_text) +print('len:',len(review_as_text)) +``` + +``` + when many people say it's the worst movie i've ever seen they tend to say that about virtually any movie they didn't like however of the nearly movies i can remember ever seeing this one is one of two that i walked away from feeling personally and angry this is my first movie review by the way and i with imdb just to at this movie's i went to see it when it was in the theaters myself and my two buddies were 3 of 5 people there and after 15 years i can't remember very many but my attitude upon leaving the theater is still clear br br spoiler alert br br oh my where to begin fat loser left at goes on weekend meets blonde who takes an interest in him takes him home to meet the family they're all and he's the main course pathetic attempt at a dramatic escape kicks all their and runs off with the girlfriend they live happily ever after firstly the gags are so bad that it took me a while to understand that they were trying to be funny and that this was a comedy the special effects what few there are look like they were done 15 years earlier the big dramatic ending was so and poorly acted that it was nearly unbearable to watch he out the entire family with in the that stand up tom and jerry style when they step on them i'm sure that there's much much more but i have no intention on seeing it again for a +len: 2741 +``` + +### После предобработки отзыв был приведён к фиксированной длине: в начале последовательности появились токены , которые заполнили недостающие позиции. Содержательная часть отзыва сохранилась, но была сдвинута вправо, что обеспечивает единый формат данных для подачи в нейронную сеть. + +--- + +## 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 ... 7 4 2407] + [ 0 0 0 ... 34 705 2] + [ 0 0 0 ... 2222 8 369] + ... + [ 0 0 0 ... 11 4 4596] + [ 0 0 0 ... 574 42 24] + [ 0 0 0 ... 7 13 3891]] +X train: + [[ 0 0 0 ... 6 52 20] + [ 0 0 0 ... 62 30 821] + [ 0 0 0 ... 24 3081 25] + ... + [ 0 0 0 ... 19 666 3159] + [ 0 0 0 ... 7 15 1716] + [ 0 0 0 ... 1194 61 113]] +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() +``` + +``` +Model: "sequential_2" +┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓ +┃ Layer (type) ┃ Output Shape ┃ Param # ┃ +┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩ +│ embedding_2 (Embedding) │ (None, 500, 32) │ 160,000 │ +├─────────────────────────────────┼────────────────────────┼───────────────┤ +│ lstm_2 (LSTM) │ (None, 64) │ 24,832 │ +├─────────────────────────────────┼────────────────────────┼───────────────┤ +│ dropout_2 (Dropout) │ (None, 64) │ 0 │ +├─────────────────────────────────┼────────────────────────┼───────────────┤ +│ dense_2 (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 ━━━━━━━━━━━━━━━━━━━━ 8s 20ms/step - accuracy: 0.6648 - loss: 0.5901 - val_accuracy: 0.8204 - val_loss: 0.4243 +Epoch 2/3 +313/313 ━━━━━━━━━━━━━━━━━━━━ 7s 22ms/step - accuracy: 0.8623 - loss: 0.3341 - val_accuracy: 0.8492 - val_loss: 0.3553 +Epoch 3/3 +313/313 ━━━━━━━━━━━━━━━━━━━━ 6s 19ms/step - accuracy: 0.8987 - loss: 0.2659 - val_accuracy: 0.8632 - val_loss: 0.3416 + +``` + +```python +test_loss, test_acc = model.evaluate(X_test, y_test) +print(f"\nTest accuracy: {test_acc}") +``` + +``` +782/782 ━━━━━━━━━━━━━━━━━━━━ 7s 9ms/step - accuracy: 0.8770 - loss: 0.3202 + +Test accuracy: 0.8710799813270569 +``` + +--- + +## 10. Оценили качество обучения на тестовых данных: +- вывести значение метрики качества классификации на тестовых данных, +- вывести отчет о качестве классификации тестовой выборки. +- построить ROC-кривую по результату обработки тестовой выборки и вычислить площадь под ROC-кривой (AUC ROC). + +```python +#значение метрики качества классификации на тестовых данных +print(f"\nTest accuracy: {test_acc}") +``` + +``` +Test accuracy: 0.8710799813270569 +``` + +```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 ━━━━━━━━━━━━━━━━━━━━ 5s 7ms/step + precision recall f1-score support + + Negative 0.89 0.85 0.87 12500 + Positive 0.86 0.89 0.87 12500 + + accuracy 0.87 25000 + macro avg 0.87 0.87 0.87 25000 +weighted avg 0.87 0.87 0.87 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)) +``` + +![image](image_lr4.jpg) + +``` +AUC ROC: 0.9419218976 +``` + +--- + +## 11. Сделали выводы по результатам применения рекуррентной нейронной сети для решения задачи определения тональности текста. + +### В результате выполнения лабораторной работы была построена рекуррентная нейронная сеть на основе слоёв Embedding и LSTM, которая успешно справилась с задачей определения тональности текста. Модель достигла требуемого качества: accuracy выше 0.8 и AUC ROC выше 0.9, что подтверждает её способность эффективно различать позитивные и негативные отзывы. Полученные результаты демонстрируют, что рекуррентные сети хорошо подходят для анализа текстовой информации и работы с последовательностями. \ No newline at end of file