ответвлено от main/is_dnn
1 строка
59 KiB
Plaintext
1 строка
59 KiB
Plaintext
{"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":[]}]} |