CAN_attack_detection.ipynb 67.7 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859
{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "Untitled3.ipynb.zip",
      "provenance": [],
      "collapsed_sections": []
    },
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.7.6"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "pTOLXzPreVMW"
      },
      "source": [
        "# *Pre process*"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "lAltJ7NjFz5e"
      },
      "source": [
        "import csv\n",
        "\n",
        "f_fuzzy = open('fuzzy_dataset.csv', 'r')\n",
        "f_dos = open('DoS_dataset.csv', 'r')\n",
        "f_spoof = open('gear_dataset.csv', 'r')\n",
        "\n",
        "f2 = open('flattened_dataset.csv', 'w')\n",
        "\n",
        "c_fuzzy = csv.reader(f_fuzzy)\n",
        "c_dos = csv.reader(f_dos)\n",
        "c_spoof = csv.reader(f_spoof)\n",
        "\n",
        "fw = csv.writer(f2)\n",
        "fw.writerow(['TimeStamp', 'CAN_ID', 'DLC', 'D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'Class'])\n",
        "\n",
        "for line in c_fuzzy :\n",
        "  newdata = []\n",
        "  #TimeStamp\n",
        "  newdata.append(line[0])\n",
        "  #CAN_ID \n",
        "  can_id = int(line[1], 16)\n",
        "  newdata.append(can_id)\n",
        "  #DLC\n",
        "  newdata.append(line[2])\n",
        "\n",
        "  ll = len(line)\n",
        "  num = int(line[2])\n",
        "\n",
        "  data = []\n",
        "  if num == 8 :\n",
        "    data = line[3:11]\n",
        "  else :\n",
        "    data = line[3: 3 + num] \n",
        "    for _ in range(8 - num):\n",
        "      data.append('0')\n",
        "      \n",
        "  newdata.extend(list(map(lambda x:int(x, 16), data)))\n",
        "\n",
        "  #Class\n",
        "  if line[-1] == 'T':\n",
        "    newdata.append('F')\n",
        "  else:\n",
        "    newdata.append('R')\n",
        "    \n",
        "  fw.writerow(newdata)\n",
        "\n",
        "for line in c_dos :\n",
        "  newdata = []\n",
        "  #TimeStamp\n",
        "  newdata.append(line[0])\n",
        "  #CAN_ID \n",
        "  can_id = int(line[1], 16)\n",
        "  newdata.append(can_id)\n",
        "  #DLC\n",
        "  newdata.append(line[2])\n",
        "\n",
        "  ll = len(line)\n",
        "  num = int(line[2])\n",
        "\n",
        "  data = []\n",
        "  if num == 8 :\n",
        "    data = line[3:11]\n",
        "  else :\n",
        "    data = line[3: 3 + num] \n",
        "    for _ in range(8 - num):\n",
        "      data.append('0')\n",
        "      \n",
        "  newdata.extend(list(map(lambda x:int(x, 16), data)))\n",
        "\n",
        "  #Class\n",
        "  if line[-1] == 'T':\n",
        "    newdata.append('D')\n",
        "  else:\n",
        "    newdata.append('R')\n",
        "    \n",
        "  fw.writerow(newdata)\n",
        "\n",
        "for line in c_spoof :\n",
        "  newdata = []\n",
        "  #TimeStamp\n",
        "  newdata.append(line[0])\n",
        "  #CAN_ID \n",
        "  can_id = int(line[1], 16)\n",
        "  newdata.append(can_id)\n",
        "  #DLC\n",
        "  newdata.append(line[2])\n",
        "\n",
        "  ll = len(line)\n",
        "  num = int(line[2])\n",
        "\n",
        "  data = []\n",
        "  if num == 8 :\n",
        "    data = line[3:11]\n",
        "  else :\n",
        "    data = line[3: 3 + num] \n",
        "    for _ in range(8 - num):\n",
        "      data.append('0')\n",
        "      \n",
        "  newdata.extend(list(map(lambda x:int(x, 16), data)))\n",
        "\n",
        "  #Class\n",
        "  if line[-1] == 'T':\n",
        "    newdata.append('S')\n",
        "  else:\n",
        "    newdata.append('R')\n",
        "    \n",
        "  fw.writerow(newdata)\n",
        "\n",
        "f_fuzzy.close()\n",
        "f_dos.close()\n",
        "f_spoof.close()\n",
        "f2.close()\n"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "uXQDTXcy-svF",
        "outputId": "e2ef2d92-a7ac-4edd-efe5-f1cd1fdd0640",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 142
        }
      },
      "source": [
        "import pandas as pd\n",
        "DoSData = 'flattened_dataset.csv'\n",
        "data2 = pd.read_csv(DoSData)\n",
        "data2.head(3)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>TimeStamp</th>\n",
              "      <th>CAN_ID</th>\n",
              "      <th>DLC</th>\n",
              "      <th>D0</th>\n",
              "      <th>D1</th>\n",
              "      <th>D2</th>\n",
              "      <th>D3</th>\n",
              "      <th>D4</th>\n",
              "      <th>D5</th>\n",
              "      <th>D6</th>\n",
              "      <th>D7</th>\n",
              "      <th>Class</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>1.478196e+09</td>\n",
              "      <td>1349</td>\n",
              "      <td>8</td>\n",
              "      <td>216</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>138</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>R</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>1.478196e+09</td>\n",
              "      <td>688</td>\n",
              "      <td>5</td>\n",
              "      <td>255</td>\n",
              "      <td>127</td>\n",
              "      <td>0</td>\n",
              "      <td>5</td>\n",
              "      <td>73</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>R</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>1.478196e+09</td>\n",
              "      <td>2</td>\n",
              "      <td>8</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>1</td>\n",
              "      <td>7</td>\n",
              "      <td>21</td>\n",
              "      <td>R</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "      TimeStamp  CAN_ID  DLC   D0   D1  D2   D3  D4  D5  D6  D7 Class\n",
              "0  1.478196e+09    1349    8  216    0   0  138   0   0   0   0     R\n",
              "1  1.478196e+09     688    5  255  127   0    5  73   0   0   0     R\n",
              "2  1.478196e+09       2    8    0    0   0    0   0   1   7  21     R"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 2
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "cOJ-HhIjaGuw"
      },
      "source": [
        "import numpy as np\n",
        "import os\n",
        "import pandas as pd\n",
        "from sklearn.model_selection import train_test_split\n",
        "\n",
        "import matplotlib.pyplot as plt\n",
        "import seaborn as sns\n"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Vqdupl65laNN",
        "outputId": "4ff814be-b707-48be-8455-f4e7548baa6c",
        "colab": {
          "base_uri": "https://localhost:8080/"
        }
      },
      "source": [
        "from google.colab import drive\n",
        "drive.mount('/content/drive')"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Mounted at /content/drive\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "NMIiv0ydmU9M",
        "outputId": "ce8efb61-2749-4b90-a8c8-41752532457c",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 142
        }
      },
      "source": [
        "DATASET = 'flattened_dataset.csv'\n",
        "\n",
        "data = pd.read_csv(DATASET)\n",
        "data.head(3)\n",
        "\n",
        "# Timestamp / CAN_ID / DLC / DATA[0~7] / Flag(T or R)\n",
        "# Flag T : injected message\n",
        "# Flag R : normal message"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>TimeStamp</th>\n",
              "      <th>CAN_ID</th>\n",
              "      <th>DLC</th>\n",
              "      <th>D0</th>\n",
              "      <th>D1</th>\n",
              "      <th>D2</th>\n",
              "      <th>D3</th>\n",
              "      <th>D4</th>\n",
              "      <th>D5</th>\n",
              "      <th>D6</th>\n",
              "      <th>D7</th>\n",
              "      <th>Class</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>1.478196e+09</td>\n",
              "      <td>1349</td>\n",
              "      <td>8</td>\n",
              "      <td>216</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>138</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>R</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>1.478196e+09</td>\n",
              "      <td>688</td>\n",
              "      <td>5</td>\n",
              "      <td>255</td>\n",
              "      <td>127</td>\n",
              "      <td>0</td>\n",
              "      <td>5</td>\n",
              "      <td>73</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>R</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>1.478196e+09</td>\n",
              "      <td>2</td>\n",
              "      <td>8</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>1</td>\n",
              "      <td>7</td>\n",
              "      <td>21</td>\n",
              "      <td>R</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "      TimeStamp  CAN_ID  DLC   D0   D1  D2   D3  D4  D5  D6  D7 Class\n",
              "0  1.478196e+09    1349    8  216    0   0  138   0   0   0   0     R\n",
              "1  1.478196e+09     688    5  255  127   0    5  73   0   0   0     R\n",
              "2  1.478196e+09       2    8    0    0   0    0   0   1   7  21     R"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 4
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "DP5WOQ4u-ZeB",
        "outputId": "1df9f838-df43-43f1-edca-9d2dc73dd832",
        "colab": {
          "base_uri": "https://localhost:8080/"
        }
      },
      "source": [
        "print(data[22300:22310])"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "          TimeStamp  CAN_ID  DLC   D0   D1   D2   D3   D4   D5   D6   D7 Class\n",
            "22300  1.478196e+09    1264    8    0    0    0  128    0  103  209   19     R\n",
            "22301  1.478196e+09     516    8   46   83   79   59  102  176  183  207     F\n",
            "22302  1.478196e+09    1854    8  228  145   60    2  206  144  153  114     F\n",
            "22303  1.478196e+09     688    5  254  255    0    7  142    0    0    0     R\n",
            "22304  1.478196e+09    1465    8  137  118   76  181  133  103  221   15     F\n",
            "22305  1.478196e+09     848    8    5   32  244  104  120    0    0  193     R\n",
            "22306  1.478196e+09    1256    8   98   64   27   38  174  199  230  232     F\n",
            "22307  1.478196e+09     868    8   81  131  115  250   11    5   92  212     F\n",
            "22308  1.478196e+09     955    8  205  183  172  152  197   46    6  100     F\n",
            "22309  1.478196e+09     704    8   21    0    0    0    0    0    0    0     R\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "b5MCnW9uATlv"
      },
      "source": [
        "import csv\n",
        "\n",
        "def Preprocess() :\n",
        "  f1 = open('flattened_dataset.csv', 'r')\n",
        "  fr = csv.reader(f1)\n",
        "  d = [] \n",
        "  for line in fr :\n",
        "    l = []\n",
        "    #l.append(line[0])\n",
        "    l.append(line[1])\n",
        "    l.append(line[2])\n",
        "    l.extend(line[3:11])\n",
        "    class_ = [1,0,0,0]\n",
        "    if line[-1] == 'R' :\n",
        "      class_ = [1,0,0,0]\n",
        "    elif line[-1] == 'F':\n",
        "      class_ = [0,1,0,0]\n",
        "    elif line[-1] == 'D':\n",
        "      class_ = [0,0,1,0]\n",
        "    elif line[-1] == 'S':\n",
        "      class_ = [0,0,0,1]\n",
        "    l.append(class_)\n",
        "    d.append(l)\n",
        "  d = d[1:]\n",
        "  return d\n",
        "\n",
        "datalist = Preprocess()"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "ZAlE8vpReK9-"
      },
      "source": [
        "# *Spilt train-set and test-set*"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Tr2hXz7MLKH-"
      },
      "source": [
        "def CreateSequences(arr, length) : # Three-Dim\n",
        "  data = []\n",
        "  if length == 1 :\n",
        "    for i in range((len(arr))) :\n",
        "      t = [arr[i]]\n",
        "      data.append(t)\n",
        "  else :\n",
        "    for i in range(len(arr)-length-1):\n",
        "      t = arr[i:(i+length)]\n",
        "      data.append(t)\n",
        "    \n",
        "  return data"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "KNa4pIvphsev"
      },
      "source": [
        "import numpy\n",
        "df = pd.DataFrame(datalist, columns=['CAN_ID', 'DLC', 'D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'Class'])\n",
        "n = len(df)\n",
        "\n",
        "X_train = df.iloc[0:n, 0:10].values # 나머지\n",
        "Y_train = df.iloc[0:n, 10].values  # class\n",
        "\n",
        "X_train = X_train.astype(numpy.float32)\n",
        "#Y_train = Y_train.astype(numpy.float32)\n",
        "\n",
        "X_train = CreateSequences(X_train, 1)\n",
        "Y_train = CreateSequences(Y_train, 1)\n",
        "\n",
        "# Data and labels are all numpy array\n",
        "X_train = np.asarray(X_train)\n",
        "Y_train = np.asarray(Y_train)\n",
        "\n",
        "Y_train = np.squeeze(Y_train, axis=1)\n",
        "x_train, x_test, y_train, y_test = train_test_split(X_train, Y_train, test_size=0.3, random_state=321)"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "OPZKbqORgQ4N",
        "outputId": "35b3f0f9-515e-48ca-c7de-3af6ed2e4565",
        "colab": {
          "base_uri": "https://localhost:8080/"
        }
      },
      "source": [
        "print(Y_train.shape)\n",
        "print(x_train.shape)\n",
        "print(y_train.shape)\n",
        "print(x_test.shape)\n",
        "print(y_test.shape)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "(11947773, 4)\n",
            "(8363441, 1, 10)\n",
            "(8363441, 4)\n",
            "(3584332, 1, 10)\n",
            "(3584332, 4)\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "6bAB8v9seCuK"
      },
      "source": [
        "# *Model*"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "j35mqU12m9w4",
        "outputId": "483cd30c-2473-4cc1-d407-2b1f14abeff6",
        "colab": {
          "base_uri": "https://localhost:8080/"
        }
      },
      "source": [
        "# Model\n",
        "from keras.models import Sequential\n",
        "from keras.layers import Dense, LSTM, SimpleRNN, Activation, RepeatVector, TimeDistributed\n",
        "from keras.utils import np_utils\n",
        "from keras.layers.normalization import BatchNormalization\n",
        "\n",
        "model = Sequential()\n",
        "\n",
        "#model.add(LSTM(1, activation='relu', input_shape=(1, 11), input_dim=11, return_sequences=True))\n",
        "# Timestamp마다 출력을 반환하려면 return_sequences=True\n",
        "\"\"\"\n",
        "model.add(LSTM(100, return_sequences=True, activation='tanh', input_shape=(1, 11)))\n",
        "model.add(Dense(50, activation='relu'))\n",
        "model.add(Dense(30, activation='relu'))\n",
        "model.add(Dense(10, activation='relu'))\n",
        "model.add(Dense(1, activation='sigmoid'))\n",
        "\"\"\"\n",
        "\"\"\"\n",
        "model.add(LSTM(32, return_sequences=True, stateful=True, batch_input_shape=(1, 1, 11)))\n",
        "model.add(BatchNormalization())\n",
        "model.add(LSTM(32, return_sequences=True, stateful=True))\n",
        "model.add(BatchNormalization())\n",
        "model.add(LSTM(32, stateful=True))\n",
        "model.add(BatchNormalization())\n",
        "model.add(Dense(50, activation='relu'))\n",
        "model.add(BatchNormalization())\n",
        "model.add(Dense(1, activation='sigmoid'))\n",
        "\"\"\"\n",
        "\n",
        "model.add(LSTM(100, dropout=0.2, recurrent_dropout=0.2, input_shape=(1, 10)))\n",
        "#model.add(Dense(1, activation='sigmoid'))\n",
        "model.add(Dense(4, activation='softmax'))\n",
        "#model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])\n",
        "model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])\n",
        "model.summary()"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "WARNING:tensorflow:Layer lstm will not use cuDNN kernel since it doesn't meet the cuDNN kernel criteria. It will use generic GPU kernel as fallback when running on GPU\n",
            "Model: \"sequential\"\n",
            "_________________________________________________________________\n",
            "Layer (type)                 Output Shape              Param #   \n",
            "=================================================================\n",
            "lstm (LSTM)                  (None, 100)               44400     \n",
            "_________________________________________________________________\n",
            "dense (Dense)                (None, 4)                 404       \n",
            "=================================================================\n",
            "Total params: 44,804\n",
            "Trainable params: 44,804\n",
            "Non-trainable params: 0\n",
            "_________________________________________________________________\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "xNHDmdrorjdd",
        "outputId": "a6dd00a6-a5ac-432f-b0a3-6aed03c31791",
        "colab": {
          "base_uri": "https://localhost:8080/"
        }
      },
      "source": [
        " history = model.fit(x_train, y_train, batch_size=100, epochs=20, validation_data=(x_test, y_test))"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Epoch 1/20\n",
            "83635/83635 [==============================] - 535s 6ms/step - loss: 0.0202 - accuracy: 0.9946 - val_loss: 0.0029 - val_accuracy: 0.9995\n",
            "Epoch 2/20\n",
            "83635/83635 [==============================] - 534s 6ms/step - loss: 0.0143 - accuracy: 0.9963 - val_loss: 0.0020 - val_accuracy: 0.9996\n",
            "Epoch 3/20\n",
            "83635/83635 [==============================] - 533s 6ms/step - loss: 0.0116 - accuracy: 0.9970 - val_loss: 0.0028 - val_accuracy: 0.9995\n",
            "Epoch 4/20\n",
            "83635/83635 [==============================] - 534s 6ms/step - loss: 0.0112 - accuracy: 0.9972 - val_loss: 0.0028 - val_accuracy: 0.9997\n",
            "Epoch 5/20\n",
            "83635/83635 [==============================] - 535s 6ms/step - loss: 0.0110 - accuracy: 0.9972 - val_loss: 0.0029 - val_accuracy: 0.9995\n",
            "Epoch 6/20\n",
            "83635/83635 [==============================] - 534s 6ms/step - loss: 0.0104 - accuracy: 0.9974 - val_loss: 0.0037 - val_accuracy: 0.9997\n",
            "Epoch 7/20\n",
            "83635/83635 [==============================] - 533s 6ms/step - loss: 0.0102 - accuracy: 0.9974 - val_loss: 0.0041 - val_accuracy: 0.9997\n",
            "Epoch 8/20\n",
            "83635/83635 [==============================] - 534s 6ms/step - loss: 0.0102 - accuracy: 0.9975 - val_loss: 0.0017 - val_accuracy: 0.9998\n",
            "Epoch 9/20\n",
            "83635/83635 [==============================] - 534s 6ms/step - loss: 0.0106 - accuracy: 0.9974 - val_loss: 0.0022 - val_accuracy: 0.9996\n",
            "Epoch 10/20\n",
            "83635/83635 [==============================] - 534s 6ms/step - loss: 0.0098 - accuracy: 0.9976 - val_loss: 0.0020 - val_accuracy: 0.9997\n",
            "Epoch 11/20\n",
            "83635/83635 [==============================] - 535s 6ms/step - loss: 0.0094 - accuracy: 0.9977 - val_loss: 0.0057 - val_accuracy: 0.9998\n",
            "Epoch 12/20\n",
            "83635/83635 [==============================] - 535s 6ms/step - loss: 0.0086 - accuracy: 0.9979 - val_loss: 0.0028 - val_accuracy: 0.9995\n",
            "Epoch 13/20\n",
            "83635/83635 [==============================] - 534s 6ms/step - loss: 0.0086 - accuracy: 0.9979 - val_loss: 0.0032 - val_accuracy: 0.9996\n",
            "Epoch 14/20\n",
            "83635/83635 [==============================] - 534s 6ms/step - loss: 0.0080 - accuracy: 0.9981 - val_loss: 0.0019 - val_accuracy: 0.9998\n",
            "Epoch 15/20\n",
            "83635/83635 [==============================] - 535s 6ms/step - loss: 0.0078 - accuracy: 0.9982 - val_loss: 0.0016 - val_accuracy: 0.9998\n",
            "Epoch 16/20\n",
            "83635/83635 [==============================] - 534s 6ms/step - loss: 0.0081 - accuracy: 0.9981 - val_loss: 0.0021 - val_accuracy: 0.9996\n",
            "Epoch 17/20\n",
            "83635/83635 [==============================] - 534s 6ms/step - loss: 0.0075 - accuracy: 0.9983 - val_loss: 0.0012 - val_accuracy: 0.9998\n",
            "Epoch 18/20\n",
            "83635/83635 [==============================] - 534s 6ms/step - loss: 0.0076 - accuracy: 0.9983 - val_loss: 0.0015 - val_accuracy: 0.9998\n",
            "Epoch 19/20\n",
            "83635/83635 [==============================] - 535s 6ms/step - loss: 0.0080 - accuracy: 0.9981 - val_loss: 0.0019 - val_accuracy: 0.9996\n",
            "Epoch 20/20\n",
            "83635/83635 [==============================] - 535s 6ms/step - loss: 0.0077 - accuracy: 0.9982 - val_loss: 0.0020 - val_accuracy: 0.9997\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "dVZF0rWNUjR-",
        "outputId": "1cf0e4a0-101f-472c-c229-fdf4a51de519",
        "colab": {
          "base_uri": "https://localhost:8080/"
        }
      },
      "source": [
        "print(\"\\n Test accuracy : %.4f\"%(model.evaluate(x_test, y_test)[1]))"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "112011/112011 [==============================] - 181s 2ms/step - loss: 0.0020 - accuracy: 0.9997\n",
            "\n",
            " Test accuracy : 0.9997\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "foUA4MEwXzoj",
        "outputId": "4b967d97-ecce-4f8d-b26c-685000a0f44f",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 279
        }
      },
      "source": [
        "import matplotlib.pyplot as plt\n",
        "\n",
        "# 학습셋 오차\n",
        "y_loss = history.history['loss']\n",
        "# 테스트셋 오차\n",
        "y_vloss = history.history['val_loss']\n",
        "\n",
        "plt.plot(y_loss)\n",
        "plt.plot(y_vloss)\n",
        "plt.ylabel('loss')\n",
        "plt.xlabel('epoch')\n",
        "plt.legend(['loss','val_loss'])\n",
        "plt.show()"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "pYRf0HTYhtUm",
        "outputId": "94fbccf0-3d55-49a8-91b9-ddc1be6936f3",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 280
        }
      },
      "source": [
        "y_acc = history.history['accuracy']\n",
        "y_vacc = history.history['val_accuracy']\n",
        "\n",
        "plt.plot(y_acc)\n",
        "plt.plot(y_vacc)\n",
        "plt.ylabel('loss')\n",
        "plt.xlabel('epoch')\n",
        "plt.legend(['accuracy','val_accuracy'])\n",
        "plt.show()"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "FgKqLFcMh13F"
      },
      "source": [
        ""
      ],
      "execution_count": null,
      "outputs": []
    }
  ]
}