From 5daa3e1220f3544d9c61e4220c0b67b825b51fd0 Mon Sep 17 00:00:00 2001 From: AnikeevAnA Date: Sat, 29 Nov 2025 10:14:12 +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 -> 21171 bytes labworks/LW4/IS_LR4.ipynb | 412 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 412 insertions(+) create mode 100644 labworks/LW4/1.png create mode 100644 labworks/LW4/IS_LR4.ipynb diff --git a/labworks/LW4/1.png b/labworks/LW4/1.png new file mode 100644 index 0000000000000000000000000000000000000000..7149ef577b47c917e5feb4034c1b3d80887d66c7 GIT binary patch literal 21171 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 literal 0 HcmV?d00001 diff --git a/labworks/LW4/IS_LR4.ipynb b/labworks/LW4/IS_LR4.ipynb new file mode 100644 index 0000000..e1c131f --- /dev/null +++ b/labworks/LW4/IS_LR4.ipynb @@ -0,0 +1,412 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "gpuType": "T4" + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + }, + "accelerator": "GPU" + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "1 пункт" + ], + "metadata": { + "id": "6tuecB2YaGZd" + } + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "EexxrLenVcsK" + }, + "outputs": [], + "source": [ + "import os\n", + "os.chdir('/content/drive/MyDrive/Colab Notebooks/IS_LR4')" + ] + }, + { + "cell_type": "code", + "source": [ + "import tensorflow as tf\n", + "device_name = tf.test.gpu_device_name()\n", + "if device_name != '/device:GPU:0':\n", + " raise SystemError('GPU device not found')\n", + "print('Found GPU at: {}'.format(device_name))" + ], + "metadata": { + "id": "JZQBWhlnZ3Kz" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "2 пункт" + ], + "metadata": { + "id": "BMVDcB8saN1d" + } + }, + { + "cell_type": "code", + "source": [ + "# загрузка датасета\n", + "from keras.datasets import imdb\n", + "vocabulary_size = 5000\n", + "index_from = 3\n", + "(X_train, y_train), (X_test, y_test) = imdb.load_data(path=\"imdb.npz\",\n", + "num_words=vocabulary_size,\n", + "skip_top=0,\n", + "maxlen=None,\n", + "seed=19,\n", + "start_char=1,\n", + "oov_char=2,\n", + "index_from=index_from\n", + ")" + ], + "metadata": { + "id": "dVZOh4OjaNfT" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "print(\"Размер обучающего множества X_train:\", X_train.shape)\n", + "print(\"Размер обучающих меток y_train:\", y_train.shape)\n", + "print(\"Размер тестового множества X_test:\", X_test.shape)\n", + "print(\"Размер тестовых меток y_test:\", y_test.shape)" + ], + "metadata": { + "id": "ONS-UYoqb7VM" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "3 пункт" + ], + "metadata": { + "id": "vrPoEAUFcZ6P" + } + }, + { + "cell_type": "code", + "source": [ + "# создание словаря для перевода индексов в слова\n", + "# заргузка словаря \"слово:индекс\"\n", + "word_to_id = imdb.get_word_index()\n", + "# уточнение словаря\n", + "word_to_id = {key:(value + index_from) for key,value in word_to_id.items()}\n", + "word_to_id[\"\"] = 0\n", + "word_to_id[\"\"] = 1\n", + "word_to_id[\"\"] = 2\n", + "word_to_id[\"\"] = 3\n", + "# создание обратного словаря \"индекс:слово\"\n", + "id_to_word = {value:key for key,value in word_to_id.items()}" + ], + "metadata": { + "id": "ldO9EDteccDO" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "idx = 19\n", + "review_indices = X_train[idx]\n", + "print(\"Отзыв в виде индексов:\\n\", review_indices)\n", + "\n", + "review_text = \" \".join(id_to_word.get(i, \"?\") for i in review_indices)\n", + "print(\"\\nОтзыв в виде текста:\\n\", review_text)\n", + "\n", + "print(\"\\nДлина отзыва (количество индексов):\", len(review_indices))\n", + "\n", + "label = y_train[idx]\n", + "class_name = \"Positive\" if label == 1 else \"Negative\"\n", + "print(\"Метка класса:\", label, \"| Класс:\", class_name)\n" + ], + "metadata": { + "id": "dgLjpdWVcaT1" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "4 пункт" + ], + "metadata": { + "id": "sJRCzgSXdyaX" + } + }, + { + "cell_type": "code", + "source": [ + "print(\"Максимальная длина отзыва:\", len(max(X_train, key=len)))\n", + "print(\"Минимальная длина отзыва:\", len(min(X_train, key=len)))" + ], + "metadata": { + "id": "NKuA8LSfd4nq" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "5 пункт" + ], + "metadata": { + "id": "xRZqJEnkensA" + } + }, + { + "cell_type": "code", + "source": [ + "# предобработка данных\n", + "from tensorflow.keras.utils import pad_sequences\n", + "max_words = 500\n", + "X_train = pad_sequences(X_train, maxlen=max_words, value=0, padding='pre', truncating='post')\n", + "X_test = pad_sequences(X_test, maxlen=max_words, value=0, padding='pre', truncating='post')\n", + "\n" + ], + "metadata": { + "id": "FcSsuqWGeqDE" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "6 пункт" + ], + "metadata": { + "id": "Mrh00gk2gHaS" + } + }, + { + "cell_type": "code", + "source": [ + "print(\"Максимальная длина отзыва после предобработки:\", len(max(X_train, key=len)))\n", + "print(\"Минимальная длина отзыва после предобработки:\", len(min(X_train, key=len)))" + ], + "metadata": { + "id": "woU0e9UMeqQi" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "7 пункт\n" + ], + "metadata": { + "id": "jvOmAItEgJsq" + } + }, + { + "cell_type": "code", + "source": [ + "idx = 19\n", + "review_indices = X_train[idx]\n", + "print(\"Отзыв в виде индексов:\\n\", review_indices)\n", + "\n", + "review_text = \" \".join(id_to_word.get(i, \"?\") for i in review_indices)\n", + "print(\"\\nОтзыв в виде текста:\\n\", review_text)\n", + "\n", + "print(\"\\nДлина отзыва (количество индексов):\", len(review_indices))\n", + "\n", + "label = y_train[idx]\n", + "class_name = \"Positive\" if label == 1 else \"Negative\"\n", + "print(\"Метка класса:\", label, \"| Класс:\", class_name)" + ], + "metadata": { + "id": "LGoRw4AHgJ9s" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "8 пункт" + ], + "metadata": { + "id": "5CAdHfC_hVfo" + } + }, + { + "cell_type": "code", + "source": [ + "\n", + "print(\"Предобработанное обучающее множество X_train (первые 5 примеров):\")\n", + "print(X_train[:5])\n", + "\n", + "print(\"\\nПредобработанное тестовое множество X_test (первые 5 примеров):\")\n", + "print(X_test[:5])\n", + "\n", + "\n", + "print(\"Размер обучающего множества X_train:\", X_train.shape)\n", + "print(\"Размер обучающих меток y_train:\", y_train.shape)\n", + "print(\"Размер тестового множества X_test:\", X_test.shape)\n", + "print(\"Размер тестовых меток y_test:\", y_test.shape)" + ], + "metadata": { + "id": "OAsrX4WdhYAx" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "9 пункт" + ], + "metadata": { + "id": "GTQnxs9AjEaz" + } + }, + { + "cell_type": "code", + "source": [ + "from tensorflow.keras.models import Sequential\n", + "from tensorflow.keras.layers import Embedding, LSTM, Dropout, Dense\n", + "\n", + "\n", + "model = Sequential()\n", + "model.add(Embedding(input_dim=vocabulary_size, output_dim=32, input_length=max_words))\n", + "model.add(LSTM(64))\n", + "model.add(Dropout(0.5))\n", + "model.add(Dense(1, activation='sigmoid'))\n", + "\n", + "\n", + "model.compile(\n", + " optimizer='adam',\n", + " loss='binary_crossentropy',\n", + " metrics=['accuracy']\n", + ")\n", + "\n", + "model.build(input_shape=(None, max_words))\n", + "model.summary()" + ], + "metadata": { + "id": "R_-5hCfGjibD" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Обучение модели\n", + "history = model.fit(\n", + " X_train,\n", + " y_train,\n", + " epochs=5,\n", + " batch_size=64,\n", + " validation_split=0.2,\n", + " verbose=1\n", + ")" + ], + "metadata": { + "id": "JyegJgdBlU4P" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "print(\"\\nКачество обучения по эпохам\")\n", + "for i in range(5):\n", + " train_acc = history.history['accuracy'][i]\n", + " val_acc = history.history['val_accuracy'][i]\n", + " print(f\"Эпоха {i+1}: accuracy = {train_acc:.4f}, val_accuracy = {val_acc:.4f}\")" + ], + "metadata": { + "id": "9etKZpeVmeNj" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "10 пункт" + ], + "metadata": { + "id": "sulUG0iDmukX" + } + }, + { + "cell_type": "code", + "source": [ + "test_loss, test_accuracy = model.evaluate(X_test, y_test, verbose=0)\n", + "\n", + "print(\"Качество классификации на тестовой выборке\")\n", + "print(f\"Test accuracy: {test_accuracy:.4f}\")" + ], + "metadata": { + "id": "hVdh7SIAnWrx" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "y_score = model.predict(X_test)\n", + "y_pred = [1 if y_score[i,0]>=0.5 else 0 for i in range(len(y_score))]\n", + "from sklearn.metrics import classification_report\n", + "print(classification_report(y_test, y_pred, labels = [0, 1], target_names=['Negative', 'Positive']))" + ], + "metadata": { + "id": "-p7pfGE7mwZi" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "from sklearn.metrics import roc_curve, auc\n", + "import matplotlib.pyplot as plt\n", + "fpr, tpr, thresholds = roc_curve(y_test, y_score)\n", + "plt.plot(fpr, tpr)\n", + "plt.grid()\n", + "plt.xlabel('False Positive Rate')\n", + "plt.ylabel('True Positive Rate')\n", + "plt.title('ROC')\n", + "plt.show()\n", + "print('Area under ROC is', auc(fpr, tpr))" + ], + "metadata": { + "id": "A_ZMEN_YpmAq" + }, + "execution_count": null, + "outputs": [] + } + ] +} \ No newline at end of file