форкнуто от main/is_dnn
Вы не можете выбрать более 25 тем
Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
1 строка
62 KiB
Plaintext
1 строка
62 KiB
Plaintext
{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[],"gpuType":"T4","mount_file_id":"1QIiOMAmZBjzdMF2Bi5JM-jXjf4HLANTm","authorship_tag":"ABX9TyP9+9H2XR/BwZPK6jFtI0kW"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"},"accelerator":"GPU"},"cells":[{"cell_type":"markdown","source":["1) В среде Google Colab создали новый блокнот (notebook). Импортировали необходимые для работы библиотеки и модули. Настроили блокнот для работы с аппаратным ускорителем GPU."],"metadata":{"id":"YqtYef25bm5U"}},{"cell_type":"code","source":["from tensorflow import keras\n","from tensorflow.keras import layers\n","from tensorflow.keras.models import Sequential\n","import matplotlib.pyplot as plt\n","import numpy as np"],"metadata":{"id":"Y1y4sLVsW546","executionInfo":{"status":"ok","timestamp":1765387055442,"user_tz":-180,"elapsed":13450,"user":{"displayName":"Егор Кирсанов","userId":"10290320580506007453"}}},"execution_count":2,"outputs":[]},{"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":{"colab":{"base_uri":"https://localhost:8080/"},"id":"0AqVK0T-bWzu","executionInfo":{"status":"ok","timestamp":1765387056464,"user_tz":-180,"elapsed":8,"user":{"displayName":"Егор Кирсанов","userId":"10290320580506007453"}},"outputId":"45a1df4b-1766-425c-85c0-c0ec3410336d"},"execution_count":3,"outputs":[{"output_type":"stream","name":"stdout","text":["Found GPU at: /device:GPU:0\n"]}]},{"cell_type":"markdown","source":["2) Загрузили набор данных IMDb, содержащий оцифрованные отзывы на фильмы, размеченные на два класса: позитивные и негативные. При загрузке набора данных параметр seed выбрали равным значению (4k – 1)=39, где k=10 – номер бригады. Вывели размеры полученных обучающих и тестовых массивов данных."],"metadata":{"id":"6ADb8hakbfjl"}},{"cell_type":"code","source":["# загрузка датасета\n","from keras.datasets import imdb\n","\n","vocabulary_size = 5000\n","index_from = 3\n","\n","(X_train, y_train), (X_test, y_test) = imdb.load_data(\n"," path=\"imdb.npz\",\n"," num_words=vocabulary_size,\n"," skip_top=0,\n"," maxlen=None,\n"," seed=39,\n"," start_char=1,\n"," oov_char=2,\n"," index_from=index_from\n"," )\n","\n","# вывод размерностей\n","print('Shape of X train:', X_train.shape)\n","print('Shape of y train:', y_train.shape)\n","print('Shape of X test:', X_test.shape)\n","print('Shape of y test:', y_test.shape)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"JE5QF7cLbhKL","executionInfo":{"status":"ok","timestamp":1765387060440,"user_tz":-180,"elapsed":3967,"user":{"displayName":"Егор Кирсанов","userId":"10290320580506007453"}},"outputId":"4668f394-934d-4f2a-8a08-dd9961f12d12"},"execution_count":4,"outputs":[{"output_type":"stream","name":"stdout","text":["Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/imdb.npz\n","\u001b[1m17464789/17464789\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 0us/step\n","Shape of X train: (25000,)\n","Shape of y train: (25000,)\n","Shape of X test: (25000,)\n","Shape of y test: (25000,)\n"]}]},{"cell_type":"markdown","source":["3) Вывели один отзыв из обучающего множества в виде списка индексов слов. Преобразовали список индексов в текст и вывели отзыв в виде текста. Вывели длину отзыва. Вывели метку класса данного отзыва и название класса (1 – Positive, 0 – Negative)."],"metadata":{"id":"dm8qlFzecBEi"}},{"cell_type":"code","source":["# создание словаря для перевода индексов в слова\n","# загрузка словаря \"слово:индекс\"\n","word_to_id = imdb.get_word_index()\n","\n","# уточнение словаря\n","word_to_id = {key:(value + index_from) for key,value in word_to_id.items()}\n","word_to_id[\"<PAD>\"] = 0\n","word_to_id[\"<START>\"] = 1\n","word_to_id[\"<UNK>\"] = 2\n","word_to_id[\"<UNUSED>\"] = 3\n","\n","# создание обратного словаря \"индекс:слово\"\n","id_to_word = {value:key for key,value in word_to_id.items()}"],"metadata":{"id":"6Uf4JIlDcCGm","executionInfo":{"status":"ok","timestamp":1765387060803,"user_tz":-180,"elapsed":361,"user":{"displayName":"Егор Кирсанов","userId":"10290320580506007453"}},"colab":{"base_uri":"https://localhost:8080/"},"outputId":"8dcff087-874f-4a5b-d579-cd42b1294037"},"execution_count":5,"outputs":[{"output_type":"stream","name":"stdout","text":["Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/imdb_word_index.json\n","\u001b[1m1641221/1641221\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 0us/step\n"]}]},{"cell_type":"code","source":["print(X_train[39])\n","print('len:',len(X_train[39]))"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"Z0sjggGrcH-1","executionInfo":{"status":"ok","timestamp":1765387060812,"user_tz":-180,"elapsed":7,"user":{"displayName":"Егор Кирсанов","userId":"10290320580506007453"}},"outputId":"bf26b133-276c-420d-f55d-92e29e1b49b9"},"execution_count":6,"outputs":[{"output_type":"stream","name":"stdout","text":["[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]\n","len: 274\n"]}]},{"cell_type":"code","source":["review_as_text = ' '.join(id_to_word[id] for id in X_train[39])\n","print(review_as_text)\n","print('len:',len(review_as_text))"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"KLVb0gQ7cMKH","executionInfo":{"status":"ok","timestamp":1765387060830,"user_tz":-180,"elapsed":16,"user":{"displayName":"Егор Кирсанов","userId":"10290320580506007453"}},"outputId":"d95be73d-324b-40de-d096-3a99a9cdfa2b"},"execution_count":7,"outputs":[{"output_type":"stream","name":"stdout","text":["<START> troubled <UNK> magazine photographer <UNK> <UNK> well played with considerable intensity by michael <UNK> has horrific nightmares in which he brutally murders his models when the lovely ladies start turning up dead for real <UNK> <UNK> that he might be the killer writer director william <UNK> <UNK> <UNK> the <UNK> story at a <UNK> pace builds a reasonable amount of tension delivers a few <UNK> effective moments of savage <UNK> violence one woman who has a plastic garbage bag with a <UNK> in it placed over her head <UNK> as the definite <UNK> inducing highlight puts a refreshing emphasis on the nicely drawn and engaging true to life characters further <UNK> everything in a plausible everyday world and <UNK> things off with a nice <UNK> of <UNK> female nudity the fine acting from an excellent cast helps matters a whole lot <UNK> <UNK> as <UNK> charming love interest <UNK> <UNK> james <UNK> as <UNK> <UNK> double <UNK> brother b j <UNK> <UNK> as <UNK> concerned psychiatrist dr frank curtis don <UNK> as <UNK> <UNK> gay assistant louis pamela <UNK> as <UNK> <UNK> detective <UNK> <UNK> <UNK> little as a hard <UNK> police chief and <UNK> <UNK> as sweet <UNK> model <UNK> r michael <UNK> polished cinematography makes impressive occasional use of breathtaking <UNK> <UNK> shots jack <UNK> <UNK> <UNK> score likewise does the trick <UNK> up in cool bit parts are robert <UNK> as a <UNK> <UNK> sally <UNK> as a <UNK> <UNK> <UNK> shower as a <UNK> female <UNK> b j <UNK> with in the ring and <UNK> bay in one of her standard old woman roles a solid and enjoyable picture\n","len: 1584\n"]}]},{"cell_type":"markdown","source":["4) Вывели максимальную и минимальную длину отзыва в обучающем множестве."],"metadata":{"id":"G4MDeQlFcVU0"}},{"cell_type":"code","source":["print('MAX Len: ',len(max(X_train, key=len)))\n","print('MIN Len: ',len(min(X_train, key=len)))"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"tGV9ptPGcWXJ","executionInfo":{"status":"ok","timestamp":1765387060843,"user_tz":-180,"elapsed":6,"user":{"displayName":"Егор Кирсанов","userId":"10290320580506007453"}},"outputId":"285002ae-1451-468f-89bb-2b96b426446b"},"execution_count":8,"outputs":[{"output_type":"stream","name":"stdout","text":["MAX Len: 2494\n","MIN Len: 11\n"]}]},{"cell_type":"markdown","source":["5) Провели предобработку данных. Выбрали единую длину, к которой будут приведены все отзывы. Короткие отзывы дополнили спецсимволами, а длинные обрезали до выбранной длины."],"metadata":{"id":"t6dS8DRnccz6"}},{"cell_type":"code","source":["#предобработка данных\n","from tensorflow.keras.utils import pad_sequences\n","\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')"],"metadata":{"id":"eRN7vYrScd_T","executionInfo":{"status":"ok","timestamp":1765387062120,"user_tz":-180,"elapsed":1275,"user":{"displayName":"Егор Кирсанов","userId":"10290320580506007453"}}},"execution_count":9,"outputs":[]},{"cell_type":"markdown","source":["6. Повторили пункт 4."],"metadata":{"id":"KduPqn6gcmJe"}},{"cell_type":"code","source":["print('MAX Len: ',len(max(X_train, key=len)))\n","print('MIN Len: ',len(min(X_train, key=len)))"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"cG5lyZ1icon9","executionInfo":{"status":"ok","timestamp":1765387062147,"user_tz":-180,"elapsed":26,"user":{"displayName":"Егор Кирсанов","userId":"10290320580506007453"}},"outputId":"fcc705bd-894c-4c01-8b03-0e943c05cd15"},"execution_count":10,"outputs":[{"output_type":"stream","name":"stdout","text":["MAX Len: 500\n","MIN Len: 500\n"]}]},{"cell_type":"markdown","source":["7) Повторили пункт 3. Сделали вывод о том, как отзыв преобразовался после предобработки."],"metadata":{"id":"8iQi-RT8cvrI"}},{"cell_type":"code","source":["print(X_train[39])\n","print('len:',len(X_train[39]))"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"4LedIjtMcwo_","executionInfo":{"status":"ok","timestamp":1765387062160,"user_tz":-180,"elapsed":6,"user":{"displayName":"Егор Кирсанов","userId":"10290320580506007453"}},"outputId":"fd4978d5-fb69-4946-dfbb-a426a2261e5c"},"execution_count":11,"outputs":[{"output_type":"stream","name":"stdout","text":["[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"," 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"," 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"," 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"," 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"," 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"," 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"," 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"," 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"," 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"," 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"," 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"," 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"," 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"," 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"," 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"," 0 0 1 3206 2 3413 3852 2 2 73 256 19 4396 3033\n"," 34 488 2 47 2993 4058 11 63 29 4653 1496 27 4122 54\n"," 4 1334 1914 380 1587 56 351 18 147 2 2 15 29 238\n"," 30 4 455 564 167 1024 2 2 2 4 2 65 33 6\n"," 2 1062 3861 6 3793 1166 7 1074 1545 6 171 2 1134 388\n"," 7 3569 2 567 31 255 37 47 6 3161 1244 3119 19 6\n"," 2 11 12 2611 120 41 419 2 17 4 3777 2 4952 2468\n"," 1457 6 2434 4268 23 4 1780 1309 5 1728 283 8 113 105\n"," 1037 2 285 11 6 4800 2905 182 5 2 183 125 19 6\n"," 327 2 7 2 668 1006 4 478 116 39 35 321 177 1525\n"," 2294 6 226 176 2 2 17 2 1220 119 602 2 2 592\n"," 2 17 2 2 1405 2 597 503 1468 2 2 17 2 1947\n"," 3702 884 1265 3378 1561 2 17 2 2 992 3217 2393 4923 2\n"," 17 2 2 1255 2 2 2 117 17 6 254 2 568 2297\n"," 5 2 2 17 1047 2 2186 2 1479 488 2 4906 627 166\n"," 1159 2552 361 7 2877 2 2 665 718 2 2 2 603 4716\n"," 127 4 2873 2 56 11 646 227 531 26 670 2 17 6\n"," 2 2 3510 2 17 6 2 2 2 3014 17 6 2 668\n"," 2 503 1468 2 19 11 4 1746 5 2 4778 11 31 7\n"," 41 1273 154 255 555 6 1156 5 737 431]\n","len: 500\n"]}]},{"cell_type":"code","source":["review_as_text = ' '.join(id_to_word[id] for id in X_train[39])\n","print(review_as_text)\n","print('len:',len(review_as_text))"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"CSssMrdVc16R","executionInfo":{"status":"ok","timestamp":1765387062206,"user_tz":-180,"elapsed":44,"user":{"displayName":"Егор Кирсанов","userId":"10290320580506007453"}},"outputId":"59e36760-8cd9-4d62-b956-4d18e352836d"},"execution_count":12,"outputs":[{"output_type":"stream","name":"stdout","text":["<PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <PAD> <START> troubled <UNK> magazine photographer <UNK> <UNK> well played with considerable intensity by michael <UNK> has horrific nightmares in which he brutally murders his models when the lovely ladies start turning up dead for real <UNK> <UNK> that he might be the killer writer director william <UNK> <UNK> <UNK> the <UNK> story at a <UNK> pace builds a reasonable amount of tension delivers a few <UNK> effective moments of savage <UNK> violence one woman who has a plastic garbage bag with a <UNK> in it placed over her head <UNK> as the definite <UNK> inducing highlight puts a refreshing emphasis on the nicely drawn and engaging true to life characters further <UNK> everything in a plausible everyday world and <UNK> things off with a nice <UNK> of <UNK> female nudity the fine acting from an excellent cast helps matters a whole lot <UNK> <UNK> as <UNK> charming love interest <UNK> <UNK> james <UNK> as <UNK> <UNK> double <UNK> brother b j <UNK> <UNK> as <UNK> concerned psychiatrist dr frank curtis don <UNK> as <UNK> <UNK> gay assistant louis pamela <UNK> as <UNK> <UNK> detective <UNK> <UNK> <UNK> little as a hard <UNK> police chief and <UNK> <UNK> as sweet <UNK> model <UNK> r michael <UNK> polished cinematography makes impressive occasional use of breathtaking <UNK> <UNK> shots jack <UNK> <UNK> <UNK> score likewise does the trick <UNK> up in cool bit parts are robert <UNK> as a <UNK> <UNK> sally <UNK> as a <UNK> <UNK> <UNK> shower as a <UNK> female <UNK> b j <UNK> with in the ring and <UNK> bay in one of her standard old woman roles a solid and enjoyable picture\n","len: 2940\n"]}]},{"cell_type":"markdown","source":["8) Вывели предобработанные массивы обучающих и тестовых данных и их размерности."],"metadata":{"id":"q0vqP9aFc58N"}},{"cell_type":"code","source":["# вывод данных\n","print('X train: \\n',X_train)\n","print('X train: \\n',X_test)\n","\n","# вывод размерностей\n","print('Shape of X train:', X_train.shape)\n","print('Shape of X test:', X_test.shape)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"g64JxLfVc607","executionInfo":{"status":"ok","timestamp":1765387062215,"user_tz":-180,"elapsed":6,"user":{"displayName":"Егор Кирсанов","userId":"10290320580506007453"}},"outputId":"18b90fd0-1838-4396-d59d-b248fda1d34b"},"execution_count":13,"outputs":[{"output_type":"stream","name":"stdout","text":["X train: \n"," [[ 0 0 0 ... 7 4 2407]\n"," [ 0 0 0 ... 34 705 2]\n"," [ 0 0 0 ... 2222 8 369]\n"," ...\n"," [ 0 0 0 ... 11 4 4596]\n"," [ 0 0 0 ... 574 42 24]\n"," [ 0 0 0 ... 7 13 3891]]\n","X train: \n"," [[ 0 0 0 ... 6 52 20]\n"," [ 0 0 0 ... 62 30 821]\n"," [ 0 0 0 ... 24 3081 25]\n"," ...\n"," [ 0 0 0 ... 19 666 3159]\n"," [ 0 0 0 ... 7 15 1716]\n"," [ 0 0 0 ... 1194 61 113]]\n","Shape of X train: (25000, 500)\n","Shape of X test: (25000, 500)\n"]}]},{"cell_type":"markdown","source":["9) Реализовали модель рекуррентной нейронной сети, состоящей из слоев Embedding, LSTM, Dropout, Dense, и обучили ее на обучающих данных с выделением части обучающих данных в качестве валидационных. Вывели информацию об архитектуре нейронной сети. Добились качества обучения по метрике accuracy не менее 0.8."],"metadata":{"id":"tt0ie0K0dAbR"}},{"cell_type":"code","source":["embed_dim = 32\n","lstm_units = 64\n","\n","model = Sequential()\n","model.add(layers.Embedding(input_dim=vocabulary_size, output_dim=embed_dim, input_length=max_words, input_shape=(max_words,)))\n","model.add(layers.LSTM(lstm_units))\n","model.add(layers.Dropout(0.5))\n","model.add(layers.Dense(1, activation='sigmoid'))\n","\n","model.summary()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":363},"id":"jD3pkS_qdBmo","executionInfo":{"status":"ok","timestamp":1765387064134,"user_tz":-180,"elapsed":1912,"user":{"displayName":"Егор Кирсанов","userId":"10290320580506007453"}},"outputId":"9e9c0371-8141-4d53-afb6-ebe331e090e3"},"execution_count":14,"outputs":[{"output_type":"stream","name":"stderr","text":["/usr/local/lib/python3.12/dist-packages/keras/src/layers/core/embedding.py:97: UserWarning: Argument `input_length` is deprecated. Just remove it.\n"," warnings.warn(\n","/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.\n"," super().__init__(**kwargs)\n"]},{"output_type":"display_data","data":{"text/plain":["\u001b[1mModel: \"sequential\"\u001b[0m\n"],"text/html":["<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\">Model: \"sequential\"</span>\n","</pre>\n"]},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n","┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n","┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n","│ embedding (\u001b[38;5;33mEmbedding\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m500\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m160,000\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ lstm (\u001b[38;5;33mLSTM\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m24,832\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dropout (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dense (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m) │ \u001b[38;5;34m65\u001b[0m │\n","└─────────────────────────────────┴────────────────────────┴───────────────┘\n"],"text/html":["<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n","┃<span style=\"font-weight: bold\"> Layer (type) </span>┃<span style=\"font-weight: bold\"> Output Shape </span>┃<span style=\"font-weight: bold\"> Param # </span>┃\n","┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n","│ embedding (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Embedding</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">500</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">160,000</span> │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ lstm (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">LSTM</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">24,832</span> │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dropout (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dropout</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n","├─────────────────────────────────┼────────────────────────┼───────────────┤\n","│ dense (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">1</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">65</span> │\n","└─────────────────────────────────┴────────────────────────┴───────────────┘\n","</pre>\n"]},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["\u001b[1m Total params: \u001b[0m\u001b[38;5;34m184,897\u001b[0m (722.25 KB)\n"],"text/html":["<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Total params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">184,897</span> (722.25 KB)\n","</pre>\n"]},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m184,897\u001b[0m (722.25 KB)\n"],"text/html":["<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">184,897</span> (722.25 KB)\n","</pre>\n"]},"metadata":{}},{"output_type":"display_data","data":{"text/plain":["\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n"],"text/html":["<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Non-trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> (0.00 B)\n","</pre>\n"]},"metadata":{}}]},{"cell_type":"code","source":["# компилируем и обучаем модель\n","batch_size = 64\n","epochs = 3\n","model.compile(loss=\"binary_crossentropy\", optimizer=\"adam\", metrics=[\"accuracy\"])\n","model.fit(X_train, y_train, batch_size=batch_size, epochs=epochs, validation_split=0.2)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"UK281-h_dcQk","executionInfo":{"status":"ok","timestamp":1765387088620,"user_tz":-180,"elapsed":24484,"user":{"displayName":"Егор Кирсанов","userId":"10290320580506007453"}},"outputId":"b252ad63-dabc-44fb-bf64-2d9e1e431d62"},"execution_count":15,"outputs":[{"output_type":"stream","name":"stdout","text":["Epoch 1/3\n","\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 23ms/step - accuracy: 0.6315 - loss: 0.6268 - val_accuracy: 0.8072 - val_loss: 0.4273\n","Epoch 2/3\n","\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 20ms/step - accuracy: 0.8559 - loss: 0.3469 - val_accuracy: 0.8496 - val_loss: 0.3603\n","Epoch 3/3\n","\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 21ms/step - accuracy: 0.8993 - loss: 0.2662 - val_accuracy: 0.8666 - val_loss: 0.3242\n"]},{"output_type":"execute_result","data":{"text/plain":["<keras.src.callbacks.history.History at 0x7ee57a9e6d20>"]},"metadata":{},"execution_count":15}]},{"cell_type":"code","source":["test_loss, test_acc = model.evaluate(X_test, y_test)\n","print(f\"\\nTest accuracy: {test_acc}\")"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"2Jdh6S_8dgXE","executionInfo":{"status":"ok","timestamp":1765387095405,"user_tz":-180,"elapsed":6779,"user":{"displayName":"Егор Кирсанов","userId":"10290320580506007453"}},"outputId":"492ad1bc-cd39-4e7c-dca5-c523652318b4"},"execution_count":16,"outputs":[{"output_type":"stream","name":"stdout","text":["\u001b[1m782/782\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 9ms/step - accuracy: 0.8714 - loss: 0.3110\n","\n","Test accuracy: 0.8674799799919128\n"]}]},{"cell_type":"markdown","source":["10) Оценили качество обучения на тестовых данных:\n","- вывели значение метрики качества классификации на тестовых данных\n","- вывели отчет о качестве классификации тестовой выборки\n","- построили ROC-кривую по результату обработки тестовой выборки и вычислили площадь под ROC-кривой (AUC ROC)"],"metadata":{"id":"sDkhhezJdpNi"}},{"cell_type":"code","source":["#значение метрики качества классификации на тестовых данных\n","print(f\"\\nTest accuracy: {test_acc}\")"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"OeP6ss3CdotA","executionInfo":{"status":"ok","timestamp":1765387095425,"user_tz":-180,"elapsed":16,"user":{"displayName":"Егор Кирсанов","userId":"10290320580506007453"}},"outputId":"b8cd954e-ae86-4f53-fed5-f46a01a72288"},"execution_count":17,"outputs":[{"output_type":"stream","name":"stdout","text":["\n","Test accuracy: 0.8674799799919128\n"]}]},{"cell_type":"code","source":["#отчет о качестве классификации тестовой выборки\n","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","\n","from sklearn.metrics import classification_report\n","print(classification_report(y_test, y_pred, labels = [0, 1], target_names=['Negative', 'Positive']))"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"YyVafpMldt5g","executionInfo":{"status":"ok","timestamp":1765387105893,"user_tz":-180,"elapsed":10466,"user":{"displayName":"Егор Кирсанов","userId":"10290320580506007453"}},"outputId":"88178647-99c1-4628-d374-e86bf709fae9"},"execution_count":18,"outputs":[{"output_type":"stream","name":"stdout","text":["\u001b[1m782/782\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 7ms/step\n"," precision recall f1-score support\n","\n"," Negative 0.86 0.88 0.87 12500\n"," Positive 0.87 0.86 0.87 12500\n","\n"," accuracy 0.87 25000\n"," macro avg 0.87 0.87 0.87 25000\n","weighted avg 0.87 0.87 0.87 25000\n","\n"]}]},{"cell_type":"code","source":["#построение ROC-кривой и AUC ROC\n","from sklearn.metrics import roc_curve, auc\n","\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('AUC ROC:', auc(fpr, tpr))"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":490},"id":"N05HejFXdyp-","executionInfo":{"status":"ok","timestamp":1765387106261,"user_tz":-180,"elapsed":366,"user":{"displayName":"Егор Кирсанов","userId":"10290320580506007453"}},"outputId":"acc69a49-92f4-4e4c-cd2d-e2870ddda448"},"execution_count":19,"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 640x480 with 1 Axes>"],"image/png":"iVBORw0KGgoAAAANSUhEUgAAAjcAAAHHCAYAAABDUnkqAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAUVNJREFUeJzt3Xl4E+XaBvA7SZO06Q6lK8WyL7KDcNhVyuKCcFxA4YOKikexyrGiLAIVFYobwlEUEbGCesBdjiBQ0CogCgJlp0gXEWgLpUC6Jmnm/f4IDYS22JQk0yT377p6kUxmJk8eKrmdeWdehRBCgIiIiMhDKOUugIiIiMiRGG6IiIjIozDcEBERkUdhuCEiIiKPwnBDREREHoXhhoiIiDwKww0RERF5FIYbIiIi8igMN0RERORRGG6IiIjIozDcEFGDkpqaCoVCYf3x8fFBTEwMHnzwQZw6dara+kIIrFq1CgMHDkRISAh0Oh06deqEF198EaWlpbW+z9dff43bbrsNYWFh0Gg0iI6OxujRo/HDDz848+MRkQsoOLcUETUkqampmDhxIl588UU0b94cFRUV+PXXX5Gamoq4uDgcPHgQvr6+AACz2YyxY8fis88+w4ABA3D33XdDp9Nh69at+PTTT9GhQwds3rwZERER1v0LIfDQQw8hNTUV3bp1w7333ovIyEjk5eXh66+/xu7du7F9+3b07dtXrhYQ0fUSREQNyIcffigAiF27dtksnzZtmgAg1qxZY102f/58AUBMnTq12n7Wrl0rlEqlGD58uM3y1157TQAQ//73v4UkSdW2W7lypfjtt98c9GmISA48LUVEbmHAgAEAgKysLABAeXk5XnvtNbRp0wYpKSnV1h8xYgQSEhKwYcMG/Prrr9ZtUlJS0K5dO7z++utQKBTVths/fjx69erlxE9CRM7GcENEbiE3NxcAEBoaCgDYtm0bzp8/j7Fjx8LHx6fGbSZMmAAA+O6776zbFBUVYezYsVCpVM4vmohkUfO/CEREMrt48SIKCwtRUVGB3377DXPnzoVWq8Wdd94JADh8+DAAoEuXLrXuo+q1I0eO2PzZqVMnZ5ZORDJjuCGiBik+Pt7meVxcHD7++GM0bdoUAFBcXAwACAwMrHUfVa/p9XqbP6+1DRG5P4YbImqQlixZgjZt2uDixYtYsWIFfv75Z2i1WuvrVQGlKuTU5OoAFBQU9LfbEJH745gbImqQevXqhfj4eNxzzz1Yu3YtOnbsiLFjx6KkpAQA0L59ewDA/v37a91H1WsdOnQAALRr1w4AcODAAWeWTkQyY7ghogZPpVIhJSUFp0+fxttvvw0A6N+/P0JCQvDpp5/CbDbXuN3KlSsBwDpOp3///ggNDcV///vfWrchIvfHcENEbuHmm29Gr169sGjRIlRUVECn02Hq1KnIzMzE888/X239devWITU1FcOGDcM//vEPAIBOp8O0adNw5MgRTJs2DaKGe5h+/PHH2Llzp9M/DxE5D8fcEJHbePbZZ3HfffchNTUVjz32GKZPn469e/filVdewY4dO3DPPffAz88P27Ztw8cff4z27dvjo48+qraPQ4cO4Y033sCPP/5ovUNxfn4+vvnmG+zcuRO//PKLTJ+QiByB0y8QUYNSNf3Crl270LNnT5vXJElCmzZtAACZmZlQqVSQJAkrV67E8uXLceDAARiNRrRs2RKjR4/GM888A39//xrf58svv8SyZcvw+++/Q6/Xo0mTJhg4cCAef/xxDBo0yOmfk4ich+GGiIiIPArH3BAREZFHYbghIiIij8JwQ0RERB6F4YaIiIg8CsMNEREReRSGGyIiIvIoXncTP0mScPr0aQQGBkKhUMhdDhEREdWBEALFxcWIjo6GUnntYzNeF25Onz6N2NhYucsgIiKievjrr7/QtGnTa67jdeEmMDAQgKU5QUFBDt23yWTCpk2bMHToUKjVaofumy5jn12DfXYN9tl12GvXcFaf9Xo9YmNjrd/j1+J14abqVFRQUJBTwo1Op0NQUBD/w3Ei9tk12GfXYJ9dh712DWf3uS5DSjigmIiIiDwKww0RERF5FIYbIiIi8igMN0RERORRGG6IiIjIozDcEBERkUdhuCEiIiKPwnBDREREHoXhhoiIiDwKww0RERF5FFnDzc8//4wRI0YgOjoaCoUC33zzzd9uk56eju7du0Or1aJVq1ZITU11ep1ERETkPmQNN6WlpejSpQuWLFlSp/VzcnJwxx134JZbbkFGRgb+/e9/45FHHsHGjRudXCkRERG5C1knzrzttttw22231Xn9pUuXonnz5njjjTcAAO3bt8e2bdvw5ptvYtiwYc4qk4iIqEERQsAsCUgCkIS49AOYJQFDpRkQV61f4z6uXqf6WlevU/u+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8sknnVGjWzJdGugMAL4a3qGYiIjIVewONwqFAs8//zyeffZZHD9+HCUlJejQoQMCAgKcUZ/bqjRfPnKjdtPTakRERO6o3jfx02g06NChgyNr8ShXhhsfFYcUExERuYrd4eaWW26BQlH7l/UPP/xwXQV5iitPS/lwcikiIiKXsTvcdO3a1ea5yWRCRkYGDh48iISEBEfV5fYulltuE61Q4JphkIiIiBzL7nDz5ptv1rj8hRdeQElJyXUX5CnKDGYAgBB/syIRERE5lMNGuv7f//0fVqxY4ajduT2j2XJaqlkj58xfRURERDVzWLjZsWMHfH15s7oqZ4stUy9wMDEREZFr2X1a6u6777Z5LoRAXl4efv/993rfxM8TVZ2OOnGu7rOYEhER0fWzO9wEBwfbPFcqlWjbti1efPFFDB061GGFubtjBZbxR31bhclcCRERkXexK9yYzWZMnDgRnTp1QmhoqLNq8ghateWMX96FcpkrISIi8i52jblRqVQYOnRovWb/9jZ7/jwPAOjbsrHMlRAREXkXuwcUd+zYEdnZ2c6oxaM0ujRZ5oVL97shIiIi17A73Lz88suYOnUqvvvuO+Tl5UGv19v8kMWv2ecAAF2ahshbCBERkZep85ibF198Ec888wxuv/12AMBdd91lc+ddIQQUCgXMZrPjq3RDEUG+yD1XBkOl9PcrExERkcPUOdzMnTsXjz32GH788Udn1uMxqm7i16KJv8yVEBEReZc6hxtx6cYtgwYNcloxnmTviQsAAD+1St5CiIiIvIxdY244AWTdRQRpAQBaH4fdBJqIiIjqwK773LRp0+ZvA05RUdF1FeQpqibODAvUylwJERGRd7Er3MydO7faHYqpugqTGcWGSgBAsJ9a5mqIiIi8i13h5v7770d4eLizavEY50qNAAAfpQKNL93vhoiIiFyjzgNCON6m7s4WGwAAlZJg34iIiFyszuGm6mop+nvSpVaF6HhKioiIyNXqfFpKkngzuroyXrpxX5MADiYmIiJyNV6n7AQF+goAgIaXgRMREbkcv32dQKm0jLP540yJzJUQERF5H4YbJ6g0Wwbd9G7eSOZKiIiIvA/DjROYLs0rpfXh1AtERESuxnDjBBWXBhRrfHgZOBERkasx3DhB1lnLWBsFGG6IiIhcjeHGCUJ1lrsSF126UzERERG5DsONE+grLPNK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\n"},"metadata":{}},{"output_type":"stream","name":"stdout","text":["AUC ROC: 0.9387573504\n"]}]}]} |