Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

1 строка
59 KiB
Plaintext

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[],"gpuType":"T4","mount_file_id":"1QDNLSNOEh8CzPlfGrXHMYrWq0jmFbU4-","authorship_tag":"ABX9TyMtUFVBwg6CyweIbh55cecX"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"},"accelerator":"GPU"},"cells":[{"cell_type":"code","execution_count":20,"metadata":{"collapsed":true,"id":"6ddB3mqgJ6Ma","executionInfo":{"status":"ok","timestamp":1764532393794,"user_tz":-180,"elapsed":24,"user":{"displayName":"Александр Ли","userId":"11169366018002229978"}}},"outputs":[],"source":["# импорт модулей\n","import os\n","os.chdir('/content/drive/MyDrive/Colab Notebooks/is_lab4')\n","\n","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"]},{"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":"bzZZSexXKpxd","executionInfo":{"status":"ok","timestamp":1764532393812,"user_tz":-180,"elapsed":15,"user":{"displayName":"Александр Ли","userId":"11169366018002229978"}},"outputId":"d85b6fcb-3ab8-43c2-e36e-27c42dccbd47"},"execution_count":21,"outputs":[{"output_type":"stream","name":"stdout","text":["Found GPU at: /device:GPU:0\n"]}]},{"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=11,\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":"6_ALNo-gK6rl","executionInfo":{"status":"ok","timestamp":1764532397478,"user_tz":-180,"elapsed":3664,"user":{"displayName":"Александр Ли","userId":"11169366018002229978"}},"outputId":"48eea1b2-11b0-40ac-a500-ee949aa0db19"},"execution_count":22,"outputs":[{"output_type":"stream","name":"stdout","text":["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":"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[\"<PAD>\"] = 0\n","word_to_id[\"<START>\"] = 1\n","word_to_id[\"<UNK>\"] = 2\n","word_to_id[\"<UNUSED>\"] = 3\n","# создание обратного словаря \"индекс:слово\"\n","id_to_word = {value:key for key,value in word_to_id.items()}"],"metadata":{"id":"Mbxh8wEbLGg5","executionInfo":{"status":"ok","timestamp":1764532397598,"user_tz":-180,"elapsed":117,"user":{"displayName":"Александр Ли","userId":"11169366018002229978"}}},"execution_count":23,"outputs":[]},{"cell_type":"code","source":["print(X_train[26])\n","print('len:',len(X_train[26]))"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"VUwU74JwLKZB","executionInfo":{"status":"ok","timestamp":1764532397613,"user_tz":-180,"elapsed":11,"user":{"displayName":"Александр Ли","userId":"11169366018002229978"}},"outputId":"216a791d-c3b5-43b5-ab34-2a2ae7a1a64b"},"execution_count":24,"outputs":[{"output_type":"stream","name":"stdout","text":["[1, 2489, 723, 2, 9, 399, 2301, 11, 551, 2, 29, 47, 1391, 6, 1692, 15, 29, 70, 361, 8, 97, 35, 3258, 40, 6, 2, 106, 42, 2, 4298, 64, 8, 28, 15, 3258, 796, 2, 11, 6, 275, 1622, 21, 50, 26, 148, 33, 27, 2301, 2, 15, 81, 24, 40, 42, 2, 7, 27, 4646, 5, 80, 81, 845, 12, 304, 8, 67, 15, 29, 152, 3115, 103, 6, 1196, 2, 15, 238, 28, 1894, 27, 2, 2489, 2, 1068, 8, 2181, 27, 1692, 23, 309, 17, 873, 183, 140, 2357, 355, 5, 29, 9, 2, 83, 6, 2699, 1765, 2, 625, 2691, 1229, 80, 516, 10, 10, 11, 2, 279, 12, 286, 141, 6, 52, 326, 8, 796, 106, 4, 2, 132, 11, 4, 172, 1269, 13, 296, 4, 2223, 994, 7, 4, 2223, 5, 3176, 7, 4, 2223, 50, 186, 8, 30, 64, 38, 111, 102, 44, 551, 2, 5, 4, 4616, 3388, 302, 12, 70, 28, 23, 4, 406, 648, 15, 31, 415, 144, 30, 93, 8, 4325, 11, 6, 289, 42, 689, 251, 810, 146, 24, 252, 51, 148, 1893, 18, 4, 20, 1029, 17, 68, 2436, 819, 18, 4, 2, 132, 21, 76, 7, 12, 9, 38, 729, 8, 4, 2223, 102, 15, 12, 566, 30, 2691, 2, 190, 4, 2, 132, 218, 60, 754, 17, 52, 17, 4, 249, 7, 4, 2223, 2355, 10, 10, 1371, 112, 1905, 4981, 4, 2, 132, 47, 450, 85, 712, 15, 66, 1487, 4, 3129, 7, 4, 20, 6, 194, 1834, 13, 28, 9, 19, 2, 2, 11, 4, 485, 240, 141, 6, 2, 1995, 15, 24, 64, 81, 13, 24, 459, 44, 27, 2073, 13, 165, 3663, 18, 12, 696, 177, 1066, 1083, 2, 5, 2, 1602, 26, 220, 17, 78, 507, 38, 1904, 5, 753, 36, 983, 551, 11, 192, 225, 55, 117, 8, 79, 2229, 44, 137, 149, 4, 2, 132, 4, 816, 475, 24, 55, 906, 4, 168, 475, 13, 62, 1634, 76, 7, 12, 17, 2, 4, 114, 475, 727, 4, 206, 475, 50, 218, 101, 444, 14, 9, 31, 8, 798, 10, 10, 2994, 13, 296, 4, 2, 132, 2864, 6, 1039, 7, 4, 736, 1067, 750, 2, 390, 163, 538, 137, 24, 35, 1557, 55, 400, 4, 2, 4, 20, 475, 4, 128, 4, 3179, 2, 4, 493, 569, 220, 32, 7, 68, 3734, 19, 4, 2, 132, 637, 202, 12, 6, 55, 2, 470, 457, 23, 61, 3179, 675, 2407]\n","len: 413\n"]}]},{"cell_type":"code","source":["review_as_text = ' '.join(id_to_word[id] for id in X_train[26])\n","print(review_as_text)\n","print('len:',len(review_as_text))"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"TUZVVH-kLP3F","executionInfo":{"status":"ok","timestamp":1764532397648,"user_tz":-180,"elapsed":33,"user":{"displayName":"Александр Ли","userId":"11169366018002229978"}},"outputId":"3347ef8e-330f-4e33-95a8-ad28cfd8ab3d"},"execution_count":25,"outputs":[{"output_type":"stream","name":"stdout","text":["<START> professor paul <UNK> is doing research in matter <UNK> he has developed a machine that he can use to make an object like a <UNK> watch or <UNK> disappear only to have that object re <UNK> in a different location but there are those at his research <UNK> that do not like or <UNK> of his experiments and will do whatever it takes to see that he doesn't succeed after a failed <UNK> that might have saved his <UNK> professor <UNK> decides to test his machine on himself as expected things go horribly wrong and he is <UNK> into a heavily scared <UNK> whose mere touch will kill br br in <UNK> maybe it wasn't such a good idea to re watch the <UNK> man in the same week i watched the fly return of the fly and curse of the fly there seems to be only so many movies about matter <UNK> and the potentially horrendous effects it can have on the human body that one person should be made to endure in a three or four day period i'm not sure what those responsible for the movie list as their source material for the <UNK> man but much of it is so similar to the fly movies that it cannot be mere <UNK> however the <UNK> man isn't even nearly as good as the worst of the fly trilogy br br besides being terribly unoriginal the <UNK> man has several other problems that really hurt the enjoyment of the movie a big issue i have is with <UNK> <UNK> in the lead he's such a <UNK> ass that not only do i not care about his suffering i actually root for it supporting cast members mary <UNK> and <UNK> allen are almost as bad they're so bland and dull they hardly matter in fact there's very little to get excited about while watching the <UNK> man the soundtrack – not very memorable the look – i would describe much of it as <UNK> the plot – predictable the action – there isn't any overall this is one to avoid br br fortunately i watched the <UNK> man via a copy of the mystery science theater <UNK> episode funny stuff while not an absolute very often the <UNK> the movie – the better the mst3k <UNK> the guys hit almost all of their marks with the <UNK> man i'll give it a very <UNK> 4 5 on my mst3k rating scale\n","len: 2113\n"]}]},{"cell_type":"code","source":["print('MAX Len: ',len(max(X_train, key=len)))\n","print('MIN Len: ',len(min(X_train, key=len)))\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"vXoobHZwLRpv","executionInfo":{"status":"ok","timestamp":1764532397662,"user_tz":-180,"elapsed":13,"user":{"displayName":"Александр Ли","userId":"11169366018002229978"}},"outputId":"d5dad9ab-2639-44f7-8e4c-2f15ca8dc8fd"},"execution_count":26,"outputs":[{"output_type":"stream","name":"stdout","text":["MAX Len: 2494\n","MIN Len: 11\n"]}]},{"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')"],"metadata":{"id":"i96YT3MjLUdh","executionInfo":{"status":"ok","timestamp":1764532398524,"user_tz":-180,"elapsed":860,"user":{"displayName":"Александр Ли","userId":"11169366018002229978"}}},"execution_count":27,"outputs":[]},{"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":"fwnL3SflLbdc","executionInfo":{"status":"ok","timestamp":1764532398600,"user_tz":-180,"elapsed":63,"user":{"displayName":"Александр Ли","userId":"11169366018002229978"}},"outputId":"e536562f-bb65-4349-9a37-8e908b8ea51c"},"execution_count":28,"outputs":[{"output_type":"stream","name":"stdout","text":["MAX Len: 500\n","MIN Len: 500\n"]}]},{"cell_type":"code","source":["print(X_train[26])\n","print('len:',len(X_train[26]))"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"d7FdCsEyLfV0","executionInfo":{"status":"ok","timestamp":1764532398643,"user_tz":-180,"elapsed":21,"user":{"displayName":"Александр Ли","userId":"11169366018002229978"}},"outputId":"e6247a79-d731-4450-ff1d-3589c90f48b6"},"execution_count":29,"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 1 2489 723 2 9 399 2301 11 551 2 29\n"," 47 1391 6 1692 15 29 70 361 8 97 35 3258 40 6\n"," 2 106 42 2 4298 64 8 28 15 3258 796 2 11 6\n"," 275 1622 21 50 26 148 33 27 2301 2 15 81 24 40\n"," 42 2 7 27 4646 5 80 81 845 12 304 8 67 15\n"," 29 152 3115 103 6 1196 2 15 238 28 1894 27 2 2489\n"," 2 1068 8 2181 27 1692 23 309 17 873 183 140 2357 355\n"," 5 29 9 2 83 6 2699 1765 2 625 2691 1229 80 516\n"," 10 10 11 2 279 12 286 141 6 52 326 8 796 106\n"," 4 2 132 11 4 172 1269 13 296 4 2223 994 7 4\n"," 2223 5 3176 7 4 2223 50 186 8 30 64 38 111 102\n"," 44 551 2 5 4 4616 3388 302 12 70 28 23 4 406\n"," 648 15 31 415 144 30 93 8 4325 11 6 289 42 689\n"," 251 810 146 24 252 51 148 1893 18 4 20 1029 17 68\n"," 2436 819 18 4 2 132 21 76 7 12 9 38 729 8\n"," 4 2223 102 15 12 566 30 2691 2 190 4 2 132 218\n"," 60 754 17 52 17 4 249 7 4 2223 2355 10 10 1371\n"," 112 1905 4981 4 2 132 47 450 85 712 15 66 1487 4\n"," 3129 7 4 20 6 194 1834 13 28 9 19 2 2 11\n"," 4 485 240 141 6 2 1995 15 24 64 81 13 24 459\n"," 44 27 2073 13 165 3663 18 12 696 177 1066 1083 2 5\n"," 2 1602 26 220 17 78 507 38 1904 5 753 36 983 551\n"," 11 192 225 55 117 8 79 2229 44 137 149 4 2 132\n"," 4 816 475 24 55 906 4 168 475 13 62 1634 76 7\n"," 12 17 2 4 114 475 727 4 206 475 50 218 101 444\n"," 14 9 31 8 798 10 10 2994 13 296 4 2 132 2864\n"," 6 1039 7 4 736 1067 750 2 390 163 538 137 24 35\n"," 1557 55 400 4 2 4 20 475 4 128 4 3179 2 4\n"," 493 569 220 32 7 68 3734 19 4 2 132 637 202 12\n"," 6 55 2 470 457 23 61 3179 675 2407]\n","len: 500\n"]}]},{"cell_type":"code","source":["review_as_text = ' '.join(id_to_word[id] for id in X_train[26])\n","print(review_as_text)\n","print('len:',len(review_as_text))"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"CA5ZwsXyLh5C","executionInfo":{"status":"ok","timestamp":1764532398734,"user_tz":-180,"elapsed":103,"user":{"displayName":"Александр Ли","userId":"11169366018002229978"}},"outputId":"1d6fdfaa-9006-45f7-fac8-e42f51913896"},"execution_count":30,"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> <START> professor paul <UNK> is doing research in matter <UNK> he has developed a machine that he can use to make an object like a <UNK> watch or <UNK> disappear only to have that object re <UNK> in a different location but there are those at his research <UNK> that do not like or <UNK> of his experiments and will do whatever it takes to see that he doesn't succeed after a failed <UNK> that might have saved his <UNK> professor <UNK> decides to test his machine on himself as expected things go horribly wrong and he is <UNK> into a heavily scared <UNK> whose mere touch will kill br br in <UNK> maybe it wasn't such a good idea to re watch the <UNK> man in the same week i watched the fly return of the fly and curse of the fly there seems to be only so many movies about matter <UNK> and the potentially horrendous effects it can have on the human body that one person should be made to endure in a three or four day period i'm not sure what those responsible for the movie list as their source material for the <UNK> man but much of it is so similar to the fly movies that it cannot be mere <UNK> however the <UNK> man isn't even nearly as good as the worst of the fly trilogy br br besides being terribly unoriginal the <UNK> man has several other problems that really hurt the enjoyment of the movie a big issue i have is with <UNK> <UNK> in the lead he's such a <UNK> ass that not only do i not care about his suffering i actually root for it supporting cast members mary <UNK> and <UNK> allen are almost as bad they're so bland and dull they hardly matter in fact there's very little to get excited about while watching the <UNK> man the soundtrack – not very memorable the look – i would describe much of it as <UNK> the plot – predictable the action – there isn't any overall this is one to avoid br br fortunately i watched the <UNK> man via a copy of the mystery science theater <UNK> episode funny stuff while not an absolute very often the <UNK> the movie – the better the mst3k <UNK> the guys hit almost all of their marks with the <UNK> man i'll give it a very <UNK> 4 5 on my mst3k rating scale\n","len: 2635\n"]}]},{"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":"JZ5nEa1ILliE","executionInfo":{"status":"ok","timestamp":1764532398735,"user_tz":-180,"elapsed":89,"user":{"displayName":"Александр Ли","userId":"11169366018002229978"}},"outputId":"4a7a5662-c91e-4fa6-b57c-1f9ab90a8afd"},"execution_count":31,"outputs":[{"output_type":"stream","name":"stdout","text":["X train: \n"," [[ 0 0 0 ... 6 2 2]\n"," [ 0 0 0 ... 10 10 2]\n"," [ 1 14 22 ... 171 153 303]\n"," ...\n"," [ 0 0 0 ... 17 2199 1262]\n"," [ 0 0 0 ... 606 5 1356]\n"," [ 0 0 0 ... 1026 5 804]]\n","X train: \n"," [[ 0 0 0 ... 10 10 2]\n"," [ 0 0 0 ... 43 1044 710]\n"," [ 0 0 0 ... 35 744 23]\n"," ...\n"," [ 0 0 0 ... 184 1543 616]\n"," [ 0 0 0 ... 38 2 78]\n"," [ 0 0 0 ... 5 2 2]]\n","Shape of X train: (25000, 500)\n","Shape of X test: (25000, 500)\n"]}]},{"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":346},"id":"kkrjirH4Lnuz","executionInfo":{"status":"ok","timestamp":1764532398747,"user_tz":-180,"elapsed":67,"user":{"displayName":"Александр Ли","userId":"11169366018002229978"}},"outputId":"092339c6-e0f6-4a1f-e151-5a696541160a"},"execution_count":32,"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_1\"\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_1\"</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_1 (\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_1 (\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_1 (\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_1 (\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_1 (<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_1 (<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_1 (<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_1 (<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":"xnVLvP8dLvQw","executionInfo":{"status":"ok","timestamp":1764532422590,"user_tz":-180,"elapsed":23842,"user":{"displayName":"Александр Ли","userId":"11169366018002229978"}},"outputId":"99024fc2-8eed-4624-c0c0-e507221cccbd"},"execution_count":33,"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[1m10s\u001b[0m 25ms/step - accuracy: 0.6482 - loss: 0.6264 - val_accuracy: 0.8446 - val_loss: 0.3654\n","Epoch 2/3\n","\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 23ms/step - accuracy: 0.8459 - loss: 0.3677 - val_accuracy: 0.7632 - val_loss: 0.4948\n","Epoch 3/3\n","\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 22ms/step - accuracy: 0.8515 - loss: 0.3613 - val_accuracy: 0.8700 - val_loss: 0.3384\n"]},{"output_type":"execute_result","data":{"text/plain":["<keras.src.callbacks.history.History at 0x7a8e6bf1c350>"]},"metadata":{},"execution_count":33}]},{"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":"-c7bIgHhLy44","executionInfo":{"status":"ok","timestamp":1764532430821,"user_tz":-180,"elapsed":8228,"user":{"displayName":"Александр Ли","userId":"11169366018002229978"}},"outputId":"58ebb0dd-b359-4022-d7e1-150e86192dea"},"execution_count":34,"outputs":[{"output_type":"stream","name":"stdout","text":["\u001b[1m782/782\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 10ms/step - accuracy: 0.8629 - loss: 0.3494\n","\n","Test accuracy: 0.8626800179481506\n"]}]},{"cell_type":"code","source":["#значение метрики качества классификации на тестовых данных\n","print(f\"\\nTest accuracy: {test_acc}\")"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"AdPKXQ8RMBC8","executionInfo":{"status":"ok","timestamp":1764532430860,"user_tz":-180,"elapsed":36,"user":{"displayName":"Александр Ли","userId":"11169366018002229978"}},"outputId":"8fb7fc5d-fda4-4bb2-90d6-80a68f68ce0d"},"execution_count":35,"outputs":[{"output_type":"stream","name":"stdout","text":["\n","Test accuracy: 0.8626800179481506\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":"5cuHltNNMDwl","executionInfo":{"status":"ok","timestamp":1764532437250,"user_tz":-180,"elapsed":6388,"user":{"displayName":"Александр Ли","userId":"11169366018002229978"}},"outputId":"ff4ade8b-c58d-43a4-943a-720f4d459ce1"},"execution_count":36,"outputs":[{"output_type":"stream","name":"stdout","text":["\u001b[1m782/782\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 8ms/step\n"," precision recall f1-score support\n","\n"," Negative 0.87 0.85 0.86 12500\n"," Positive 0.85 0.87 0.86 12500\n","\n"," accuracy 0.86 25000\n"," macro avg 0.86 0.86 0.86 25000\n","weighted avg 0.86 0.86 0.86 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":489},"id":"xWBS6H9-MIp0","executionInfo":{"status":"ok","timestamp":1764532437410,"user_tz":-180,"elapsed":156,"user":{"displayName":"Александр Ли","userId":"11169366018002229978"}},"outputId":"7777e5b9-354f-4aa5-8147-ea6a0af75306"},"execution_count":37,"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 640x480 with 1 Axes>"],"image/png":"iVBORw0KGgoAAAANSUhEUgAAAjcAAAHHCAYAAABDUnkqAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAUfJJREFUeJzt3Xl4E+XaBvA7SbN0L6V0pVj2RXawHDYRLYsLylEBhQ8QFY9CFakoi0BFhboiHEURESu4gLscQaCgVUCUtchahAJlaQul0HTN+n5/pA2EttCUJNMk9++6uEgmM5MnD4XczLzzjkwIIUBERETkIeRSF0BERETkSAw3RERE5FEYboiIiMijMNwQERGRR2G4ISIiIo/CcENEREQeheGGiIiIPArDDREREXkUhhsiIiLyKAw3RERE5FEYboioXklNTYVMJrP+8vHxQUxMDB555BGcOXOmyvpCCKxYsQK33norQkJC4Ofnhw4dOuDll19GSUlJje/z/fff484770RYWBhUKhWio6MxfPhw/PLLL878eETkAjLeW4qI6pPU1FSMGzcOL7/8Mpo2bYry8nL8+eefSE1NRVxcHPbv3w+NRgMAMJlMGDlyJL766iv07dsX999/P/z8/LB582Z88cUXaNeuHTZu3IiIiAjr/oUQePTRR5GamoouXbrgwQcfRGRkJHJycvD9999j165d2Lp1K3r16iVVC4joRgkionrkk08+EQDEjh07bJZPnTpVABCrVq2yLps3b54AIKZMmVJlP6tXrxZyuVwMHjzYZvmbb74pAIhnn31WmM3mKtstX75c/PXXXw76NEQkBZ6WIiK30LdvXwDAsWPHAABlZWV488030apVK6SkpFRZf8iQIRg7dizWrVuHP//807pNSkoK2rRpg7feegsymazKdqNHj0Z8fLwTPwkRORvDDRG5hRMnTgAAGjRoAADYsmULLl68iJEjR8LHx6fabcaMGQMA+Omnn6zbFBQUYOTIkVAoFM4vmogkUf2/CEREEissLER+fj7Ky8vx119/Yc6cOVCr1bjnnnsAAAcPHgQAdOrUqcZ9VL526NAhm987dOjgzNKJSGIMN0RULyUkJNg8j4uLw2effYbGjRsDAIqKigAAgYGBNe6j8jWtVmvz+7W2ISL3x3BDRPXSokWL0KpVKxQWFmLZsmX4/fffoVarra9XBpTK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\n"},"metadata":{}},{"output_type":"stream","name":"stdout","text":["AUC ROC: 0.9349818848\n"]}]},{"cell_type":"code","source":[],"metadata":{"id":"OsxJzr8IMOuQ","executionInfo":{"status":"ok","timestamp":1764532437418,"user_tz":-180,"elapsed":4,"user":{"displayName":"Александр Ли","userId":"11169366018002229978"}}},"execution_count":37,"outputs":[]}]}