text_classification.ipynb 92.0 KB
Notebook
Newer Older
M
MaoXianxin 已提交
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
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import os\n",
    "import re\n",
    "import shutil\n",
    "import string\n",
    "\n",
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "\n",
    "from tensorflow.keras import layers\n",
    "from tensorflow.keras import losses\n",
    "from tensorflow.keras import preprocessing\n",
    "from tensorflow.keras.layers.experimental.preprocessing import TextVectorization"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found 8000 files belonging to 4 classes.\n",
      "Using 6400 files for training.\n"
     ]
    }
   ],
   "source": [
    "batch_size = 32\n",
    "seed = 42\n",
    "\n",
    "raw_train_ds = tf.keras.preprocessing.text_dataset_from_directory(\n",
    "    'stack_overflow/train',\n",
    "    batch_size=batch_size,\n",
    "    validation_split=0.2,\n",
    "    subset='training',\n",
    "    seed=seed\n",
    ")"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Question b'\"my tester is going to the wrong constructor i am new to programming so if i ask a question that can be easily fixed, please forgive me. my program has a tester class with a main. when i send that to my regularpolygon class, it sends it to the wrong constructor. i have two constructors. 1 without perameters..public regularpolygon().    {.       mynumsides = 5;.       mysidelength = 30;.    }//end default constructor...and my second, with perameters. ..public regularpolygon(int numsides, double sidelength).    {.        mynumsides = numsides;.        mysidelength = sidelength;.    }// end constructor...in my tester class i have these two lines:..regularpolygon shape = new regularpolygon(numsides, sidelength);.        shape.menu();...numsides and sidelength were declared and initialized earlier in the testing class...so what i want to happen, is the tester class sends numsides and sidelength to the second constructor and use it in that class. but it only uses the default constructor, which therefor ruins the whole rest of the program. can somebody help me?..for those of you who want to see more of my code: here you go..public double vertexangle().    {.        system.out.println(\"\"the vertex angle method: \"\" + mynumsides);// prints out 5.        system.out.println(\"\"the vertex angle method: \"\" + mysidelength); // prints out 30..        double vertexangle;.        vertexangle = ((mynumsides - 2.0) / mynumsides) * 180.0;.        return vertexangle;.    }//end method vertexangle..public void menu().{.    system.out.println(mynumsides); // prints out what the user puts in.    system.out.println(mysidelength); // prints out what the user puts in.    gotographic();.    calcr(mynumsides, mysidelength);.    calcr(mynumsides, mysidelength);.    print(); .}// end menu...this is my entire tester class:..public static void main(string[] arg).{.    int numsides;.    double sidelength;.    scanner keyboard = new scanner(system.in);..    system.out.println(\"\"welcome to the regular polygon program!\"\");.    system.out.println();..    system.out.print(\"\"enter the number of sides of the polygon ==> \"\");.    numsides = keyboard.nextint();.    system.out.println();..    system.out.print(\"\"enter the side length of each side ==> \"\");.    sidelength = keyboard.nextdouble();.    system.out.println();..    regularpolygon shape = new regularpolygon(numsides, sidelength);.    shape.menu();.}//end main...for testing it i sent it numsides 4 and sidelength 100.\"\\n'\n",
      "Label 1\n",
      "Question b'\"blank code slow skin detection this code changes the color space to lab and using a threshold finds the skin area of an image. but it\\'s ridiculously slow. i don\\'t know how to make it faster ?    ..from colormath.color_objects import *..def skindetection(img, treshold=80, color=[255,20,147]):..    print img.shape.    res=img.copy().    for x in range(img.shape[0]):.        for y in range(img.shape[1]):.            rgbimg=rgbcolor(img[x,y,0],img[x,y,1],img[x,y,2]).            labimg=rgbimg.convert_to(\\'lab\\', debug=false).            if (labimg.lab_l > treshold):.                res[x,y,:]=color.            else: .                res[x,y,:]=img[x,y,:]..    return res\"\\n'\n",
      "Label 3\n",
      "Question b'\"option and validation in blank i want to add a new option on my system where i want to add two text files, both rental.txt and customer.txt. inside each text are id numbers of the customer, the videotape they need and the price...i want to place it as an option on my code. right now i have:...add customer.rent return.view list.search.exit...i want to add this as my sixth option. say for example i ordered a video, it would display the price and would let me confirm the price and if i am going to buy it or not...here is my current code:..  import blank.io.*;.    import blank.util.arraylist;.    import static blank.lang.system.out;..    public class rentalsystem{.    static bufferedreader input = new bufferedreader(new inputstreamreader(system.in));.    static file file = new file(\"\"file.txt\"\");.    static arraylist<string> list = new arraylist<string>();.    static int rows;..    public static void main(string[] args) throws exception{.        introduction();.        system.out.print(\"\"nn\"\");.        login();.        system.out.print(\"\"nnnnnnnnnnnnnnnnnnnnnn\"\");.        introduction();.        string repeat;.        do{.            loadfile();.            system.out.print(\"\"nwhat do you want to do?nn\"\");.            system.out.print(\"\"n                    - - - - - - - - - - - - - - - - - - - - - - -\"\");.            system.out.print(\"\"nn                    |     1. add customer    |   2. rent return |n\"\");.            system.out.print(\"\"n                    - - - - - - - - - - - - - - - - - - - - - - -\"\");.            system.out.print(\"\"nn                    |     3. view list       |   4. search      |n\"\");.            system.out.print(\"\"n                    - - - - - - - - - - - - - - - - - - - - - - -\"\");.            system.out.print(\"\"nn                                             |   5. exit        |n\"\");.            system.out.print(\"\"n                                              - - - - - - - - - -\"\");.            system.out.print(\"\"nnchoice:\"\");.            int choice = integer.parseint(input.readline());.            switch(choice){.                case 1:.                    writedata();.                    break;.                case 2:.                    rentdata();.                    break;.                case 3:.                    viewlist();.                    break;.                case 4:.                    search();.                    break;.                case 5:.                    system.out.println(\"\"goodbye!\"\");.                    system.exit(0);.                default:.                    system.out.print(\"\"invalid choice: \"\");.                    break;.            }.            system.out.print(\"\"ndo another task? [y/n] \"\");.            repeat = input.readline();.        }while(repeat.equals(\"\"y\"\"));..        if(repeat!=\"\"y\"\") system.out.println(\"\"ngoodbye!\"\");..    }..    public static void writedata() throws exception{.        system.out.print(\"\"nname: \"\");.        string cname = input.readline();.        system.out.print(\"\"address: \"\");.        string add = input.readline();.        system.out.print(\"\"phone no.: \"\");.        string pno = input.readline();.        system.out.print(\"\"rental amount: \"\");.        string ramount = input.readline();.        system.out.print(\"\"tapenumber: \"\");.        string tno = input.readline();.        system.out.print(\"\"title: \"\");.        string title = input.readline();.        system.out.print(\"\"date borrowed: \"\");.        string dborrowed = input.readline();.        system.out.print(\"\"due date: \"\");.        string ddate = input.readline();.        createline(cname, add, pno, ramount,tno, title, dborrowed, ddate);.        rentdata();.    }..    public static void createline(string name, string address, string phone , string rental, string tapenumber, string title, string borrowed, string due) throws exception{.        filewriter fw = new filewriter(file, true);.        fw.write(\"\"nname: \"\"+name + \"\"naddress: \"\" + address +\"\"nphone no.: \"\"+ phone+\"\"nrentalamount: \"\"+rental+\"\"ntape no.: \"\"+ tapenumber+\"\"ntitle: \"\"+ title+\"\"ndate borrowed: \"\"+borrowed +\"\"ndue date: \"\"+ due+\"\":rn\"\");.        fw.close();.    }..    public static void loadfile() throws exception{.        try{.            list.clear();.            fileinputstream fstream = new fileinputstream(file);.            bufferedreader br = new bufferedreader(new inputstreamreader(fstream));.            rows = 0;.            while( br.ready()).            {.                list.add(br.readline());.                rows++;.            }.            br.close();.        } catch(exception e){.            system.out.println(\"\"list not yet loaded.\"\");.        }.    }..    public static void viewlist(){.        system.out.print(\"\"n~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\"\");.        system.out.print(\"\" |list of all costumers|\"\");.        system.out.print(\"\"~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\"\");.        for(int i = 0; i <rows; i++){.            system.out.println(list.get(i));.        }.    }.        public static void rentdata()throws exception.    {   system.out.print(\"\"n~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\"\");.        system.out.print(\"\" |rent data list|\"\");.        system.out.print(\"\"~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\"\");.        system.out.print(\"\"nenter customer name: \"\");.        string cname = input.readline();.        system.out.print(\"\"date borrowed: \"\");.        string dborrowed = input.readline();.        system.out.print(\"\"due date: \"\");.        string ddate = input.readline();.        system.out.print(\"\"return date: \"\");.        string rdate = input.readline();.        system.out.print(\"\"rent amount: \"\");.        string ramount = input.readline();..        system.out.print(\"\"you pay:\"\"+ramount);...    }.    public static void search()throws exception.    {   system.out.print(\"\"n~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\"\");.        system.out.print(\"\" |search costumers|\"\");.        system.out.print(\"\"~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\"\");.        system.out.print(\"\"nenter costumer name: \"\");.        string cname = input.readline();.        boolean found = false;..        for(int i=0; i < rows; i++){.            string temp[] = list.get(i).split(\"\",\"\");..            if(cname.equals(temp[0])){.            system.out.println(\"\"search result:nyou are \"\" + temp[0] + \"\" from \"\" + temp[1] + \"\".\"\"+ temp[2] + \"\".\"\"+ temp[3] + \"\".\"\"+ temp[4] + \"\".\"\"+ temp[5] + \"\" is \"\" + temp[6] + \"\".\"\"+ temp[7] + \"\" is \"\" + temp[8] + \"\".\"\");.                found = true;.            }.        }..        if(!found){.            system.out.print(\"\"no results.\"\");.        }..    }..        public static boolean evaluate(string uname, string pass){.        if (uname.equals(\"\"admin\"\")&&pass.equals(\"\"12345\"\")) return true;.        else return false;.    }..    public static string login()throws exception{.        bufferedreader input=new bufferedreader(new inputstreamreader(system.in));.        int counter=0;.        do{.            system.out.print(\"\"username:\"\");.            string uname =input.readline();.            system.out.print(\"\"password:\"\");.            string pass =input.readline();..            boolean accept= evaluate(uname,pass);..            if(accept){.                break;.                }else{.                    system.out.println(\"\"incorrect username or password!\"\");.                    counter ++;.                    }.        }while(counter<3);..            if(counter !=3) return \"\"login successful\"\";.            else return \"\"login failed\"\";.            }.        public static void introduction() throws exception{..        system.out.println(\"\"                  - - - - - - - - - - - - - - - - - - - - - - - - -\"\");.        system.out.println(\"\"                  !                  r e n t a l                  !\"\");.        system.out.println(\"\"                   ! ~ ~ ~ ~ ~ !  =================  ! ~ ~ ~ ~ ~ !\"\");.        system.out.println(\"\"                  !                  s y s t e m                  !\"\");.        system.out.println(\"\"                  - - - - - - - - - - - - - - - - - - - - - - - - -\"\");.        }..}\"\\n'\n",
      "Label 1\n"
     ]
    }
   ],
   "source": [
    "for text_batch, label_batch in raw_train_ds.take(1):\n",
    "    for i in range(3):\n",
    "        print(\"Question\", text_batch.numpy()[i])\n",
    "        print(\"Label\", label_batch.numpy()[i])"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Label 0 corresponds to  csharp\n",
      "Label 1 corresponds to  java\n"
     ]
    }
   ],
   "source": [
    "print(\"Label 0 corresponds to \", raw_train_ds.class_names[0])\n",
    "print(\"Label 1 corresponds to \", raw_train_ds.class_names[1])"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found 8000 files belonging to 4 classes.\n",
      "Using 1600 files for validation.\n"
     ]
    }
   ],
   "source": [
    "raw_val_ds = tf.keras.preprocessing.text_dataset_from_directory(\n",
    "    'stack_overflow/train',\n",
    "    batch_size=batch_size,\n",
    "    validation_split=0.2,\n",
    "    subset='validation',\n",
    "    seed=seed\n",
    ")"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found 8000 files belonging to 4 classes.\n"
     ]
    }
   ],
   "source": [
    "raw_test_ds = tf.keras.preprocessing.text_dataset_from_directory(\n",
    "    'stack_overflow/test',\n",
    "    batch_size=batch_size\n",
    ")"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "outputs": [],
   "source": [
    "def custom_standardization(input_data):\n",
    "    lowercase = tf.strings.lower(input_data)\n",
    "    stripped_html = tf.strings.regex_replace(lowercase, '<br />', ' ')\n",
    "    return tf.strings.regex_replace(stripped_html,\n",
    "                                    '[%s]' % re.escape(string.punctuation),\n",
    "                                    '')"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "outputs": [],
   "source": [
    "max_features = 10000\n",
    "sequence_length = 125\n",
    "\n",
    "vectorize_layer = TextVectorization(\n",
    "    standardize=custom_standardization,\n",
    "    max_tokens=max_features,\n",
    "    output_mode='int',\n",
    "    output_sequence_length=sequence_length\n",
    ")"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "outputs": [],
   "source": [
    "train_text = raw_train_ds.map(lambda x, y: x)\n",
    "vectorize_layer.adapt(train_text)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "outputs": [],
   "source": [
    "def vectorize_text(text, label):\n",
    "    text = tf.expand_dims(text, -1)\n",
    "    return vectorize_layer(text), label"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Quenstion tf.Tensor(b'\"unit testing of setters and getters teacher wanted us to do a comprehensive unit test. for me, this will be the first time that i use junit. i am confused about testing set and get methods. do you think should i test them? if the answer is yes; is this code enough for testing?..  public void testsetandget(){.    int a = 10;.    class firstclass = new class();.    firstclass.setvalue(10);.    int value = firstclass.getvalue();.    assert.asserttrue(\"\"error\"\", value==a);.  }...in my code, i think if there is an error, we can\\'t know that the error is deriving because of setter or getter.\"\\n', shape=(), dtype=string)\n",
      "Label java\n",
      "Vectorized review (<tf.Tensor: shape=(1, 125), dtype=int64, numpy=\n",
      "array([[1011,  773,    9, 2456,    8, 1863, 2362,  690, 1267,    4,   40,\n",
      "           5,    1, 1011,  196,   12,   74,   13,   72,   33,    2,   98,\n",
      "         105,   14,    3,   70, 9611,    3,   34,  888,  202,  773,  107,\n",
      "           8,   41,  242,   40,   58,  291,   90,    3,  196,  191,   10,\n",
      "           2,  182,    6,  668,    6,   13,   30, 1187,   12,  773,   22,\n",
      "          42,    1,   28,    5,  140,   29, 5213,   15,   29,    1,   28,\n",
      "          51,    1,    1,    1,    7,   23,   30,    3,  291,   10,   67,\n",
      "           6,   32,   65,  185,  166,  102,   14,    2,   65,    6,    1,\n",
      "         193,    9, 2784,   45, 2410,    0,    0,    0,    0,    0,    0,\n",
      "           0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n",
      "           0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,\n",
      "           0,    0,    0,    0]])>, <tf.Tensor: shape=(), dtype=int32, numpy=1>)\n"
     ]
    }
   ],
   "source": [
    "text_batch, label_batch = next(iter(raw_train_ds))\n",
    "first_review, first_label = text_batch[0], label_batch[0]\n",
    "print(\"Quenstion\", first_review)\n",
    "print(\"Label\", raw_train_ds.class_names[first_label])\n",
    "print(\"Vectorized review\", vectorize_text(first_review, first_label))"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0 --->  \n",
      "1 --->  [UNK]\n",
      "1287 --->  scissors\n",
      " 313 --->  source\n",
      "9999 --->  essential\n",
      "Vocabulary size: 10000\n"
     ]
    }
   ],
   "source": [
    "print(\"0 ---> \", vectorize_layer.get_vocabulary()[0])\n",
    "print(\"1 ---> \", vectorize_layer.get_vocabulary()[1])\n",
    "print(\"1287 ---> \", vectorize_layer.get_vocabulary()[1287])\n",
    "print(\" 313 ---> \",vectorize_layer.get_vocabulary()[313])\n",
    "print(\"9999 ---> \", vectorize_layer.get_vocabulary()[9999])\n",
    "print('Vocabulary size: {}'.format(len(vectorize_layer.get_vocabulary())))"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "outputs": [],
   "source": [
    "train_ds = raw_train_ds.map(vectorize_text)\n",
    "val_ds = raw_val_ds.map(vectorize_text)\n",
    "test_ds = raw_test_ds.map(vectorize_text)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "outputs": [],
   "source": [
    "AUTOTUNE = tf.data.experimental.AUTOTUNE\n",
    "\n",
    "train_ds = train_ds.cache().prefetch(buffer_size=AUTOTUNE)\n",
    "val_ds = val_ds.cache().prefetch(buffer_size=AUTOTUNE)\n",
    "test_ds = test_ds.cache().prefetch(buffer_size=AUTOTUNE)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"sequential\"\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "embedding (Embedding)        (None, None, 16)          160016    \n",
      "_________________________________________________________________\n",
      "dropout (Dropout)            (None, None, 16)          0         \n",
      "_________________________________________________________________\n",
      "global_average_pooling1d (Gl (None, 16)                0         \n",
      "_________________________________________________________________\n",
      "dropout_1 (Dropout)          (None, 16)                0         \n",
      "_________________________________________________________________\n",
      "dense (Dense)                (None, 4)                 68        \n",
      "=================================================================\n",
      "Total params: 160,084\n",
      "Trainable params: 160,084\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "embedding_dim = 16\n",
    "\n",
    "model = tf.keras.Sequential([\n",
    "    layers.Embedding(max_features + 1, embedding_dim),\n",
    "    layers.Dropout(0.2),\n",
    "    layers.GlobalAveragePooling1D(),\n",
    "    layers.Dropout(0.2),\n",
    "    layers.Dense(4)\n",
    "])\n",
    "\n",
    "model.summary()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "outputs": [],
   "source": [
    "model.compile(loss=losses.SparseCategoricalCrossentropy(from_logits=True),\n",
    "              optimizer='adam',\n",
    "              metrics=['accuracy'])"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/20\n",
      "200/200 [==============================] - 1s 3ms/step - loss: 1.3760 - accuracy: 0.3744 - val_loss: 1.3576 - val_accuracy: 0.4963\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n",
      "Epoch 2/20\n",
      "200/200 [==============================] - 0s 2ms/step - loss: 1.3257 - accuracy: 0.5397 - val_loss: 1.2865 - val_accuracy: 0.5525\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n",
      "Epoch 3/20\n",
      "200/200 [==============================] - 0s 2ms/step - loss: 1.2353 - accuracy: 0.6103 - val_loss: 1.1830 - val_accuracy: 0.6400\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n",
      "Epoch 4/20\n",
      "200/200 [==============================] - 0s 2ms/step - loss: 1.1251 - accuracy: 0.6742 - val_loss: 1.0748 - val_accuracy: 0.6869\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n",
      "Epoch 5/20\n",
      "200/200 [==============================] - 0s 2ms/step - loss: 1.0174 - accuracy: 0.7111 - val_loss: 0.9797 - val_accuracy: 0.7156\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n",
      "Epoch 6/20\n",
      "200/200 [==============================] - 0s 2ms/step - loss: 0.9270 - accuracy: 0.7353 - val_loss: 0.9020 - val_accuracy: 0.7331\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n",
      "Epoch 7/20\n",
      "200/200 [==============================] - 0s 2ms/step - loss: 0.8522 - accuracy: 0.7534 - val_loss: 0.8399 - val_accuracy: 0.7387\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n",
      "Epoch 8/20\n",
      "200/200 [==============================] - 0s 2ms/step - loss: 0.7892 - accuracy: 0.7744 - val_loss: 0.7893 - val_accuracy: 0.7487\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n",
      "Epoch 9/20\n",
      "200/200 [==============================] - 0s 2ms/step - loss: 0.7347 - accuracy: 0.7875 - val_loss: 0.7482 - val_accuracy: 0.7613\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n",
      "Epoch 10/20\n",
      "200/200 [==============================] - 0s 2ms/step - loss: 0.6885 - accuracy: 0.8033 - val_loss: 0.7133 - val_accuracy: 0.7675\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n",
      "Epoch 11/20\n",
      "200/200 [==============================] - 1s 3ms/step - loss: 0.6449 - accuracy: 0.8105 - val_loss: 0.6848 - val_accuracy: 0.7738\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n",
      "Epoch 12/20\n",
      "200/200 [==============================] - 0s 2ms/step - loss: 0.6120 - accuracy: 0.8261 - val_loss: 0.6599 - val_accuracy: 0.7812\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n",
      "Epoch 13/20\n",
      "200/200 [==============================] - 0s 2ms/step - loss: 0.5794 - accuracy: 0.8372 - val_loss: 0.6392 - val_accuracy: 0.7875\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n",
      "Epoch 14/20\n",
      "200/200 [==============================] - 0s 2ms/step - loss: 0.5476 - accuracy: 0.8458 - val_loss: 0.6207 - val_accuracy: 0.7925\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n",
      "Epoch 15/20\n",
      "200/200 [==============================] - 1s 3ms/step - loss: 0.5242 - accuracy: 0.8514 - val_loss: 0.6047 - val_accuracy: 0.7931\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n",
      "Epoch 16/20\n",
      "200/200 [==============================] - 0s 2ms/step - loss: 0.4992 - accuracy: 0.8622 - val_loss: 0.5905 - val_accuracy: 0.7981\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n",
      "Epoch 17/20\n",
      "200/200 [==============================] - 0s 2ms/step - loss: 0.4761 - accuracy: 0.8694 - val_loss: 0.5774 - val_accuracy: 0.8050\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n",
      "Epoch 18/20\n",
      "200/200 [==============================] - 0s 2ms/step - loss: 0.4561 - accuracy: 0.8767 - val_loss: 0.5663 - val_accuracy: 0.8075\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n",
      "Epoch 19/20\n",
      "200/200 [==============================] - 1s 3ms/step - loss: 0.4362 - accuracy: 0.8856 - val_loss: 0.5560 - val_accuracy: 0.8081\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n",
      "Epoch 20/20\n",
      "200/200 [==============================] - 0s 2ms/step - loss: 0.4135 - accuracy: 0.8883 - val_loss: 0.5471 - val_accuracy: 0.8112\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n"
     ]
    }
   ],
   "source": [
    "epochs = 20\n",
    "history = model.fit(\n",
    "    train_ds,\n",
    "    validation_data=val_ds,\n",
    "    epochs=epochs\n",
    ")"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "250/250 [==============================] - 0s 2ms/step - loss: 0.5962 - accuracy: 0.7815\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n",
      "Loss:  0.5962439775466919\n",
      "Accuracy:  0.781499981880188\n"
     ]
    }
   ],
   "source": [
    "loss, accuracy = model.evaluate(test_ds)\n",
    "\n",
    "print(\"Loss: \", loss)\n",
    "print(\"Accuracy: \", accuracy)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "outputs": [
    {
     "data": {
      "text/plain": "dict_keys(['loss', 'accuracy', 'val_loss', 'val_accuracy'])"
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "history_dict = history.history\n",
    "history_dict.keys()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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DX93EamkYcOGMWPGjCLbZsyYUa6J3yDMGtqkSZNKPXfxRHDNNddw5JFHVupYmUqJoBQdOoRk0K4dDBoU+g9EJP2GDh3KrFmzti9Cs3z5cj777DP69+/P2LFjyc/PZ7/99uPqq68u8fFt27Zl9erVAEycOJGOHTvSr1+/7VNVQzhHoHfv3nTr1o2TTjqJjRs38tJLL/HYY49x6aWX0r17dz744ANGjhzJP/8Z1tF69tln6dGjB126dGHUqFH88MMP25/v6quvpmfPnnTp0oWlS5eW+vrinq4664ePlmWvvcJkdT/7GQwbFk5EGzQo7qhE4nPBBbBwYfUes3t3mDw5+f7ddtuNAw44gKeeeorBgwczY8YMTjnlFMyMiRMnsttuu7F161aOOOIIFi1aRNeuXUs8zmuvvcaMGTNYuHAhW7ZsoWfPnvTq1QuAIUOGcPbZZwPw29/+ljvvvJNzzz2X448/nuOOO46hQ4cWOdamTZsYOXIkzz77LB07duSMM87glltu4YILLgCgWbNmvP7669x8881MmjSJO+64I+nri3u6atUIyqFJE3j6aejSBUaMgE8+iTsikeyT2DyU2Cz00EMP0bNnT3r06MHixYuLNOMUN2/ePE488UQaNGhA48aNOf7447fve/vtt+nfvz9dunRh+vTpLF68uNR43n33Xdq1a0fHjh0BOPPMM5k7d+72/UOGDAGgV69e2yeqS+aFF15gxIgRQMnTVU+ZMoW1a9eSm5tL7969mTZtGhMmTOCtt96iUaNGpR67PFQjKKcGDeD//i/0HZx2WuhMLraWhUhWKO2XeyoNHjyYCy+8kNdff52NGzfSq1cvPvroIyZNmsT8+fPZddddGTlyZNLpp8sycuRIZs6cSbdu3bj77ruZM2dOleItmMq6KtNYjxs3jmOPPZYnn3ySvn378vTTT2+frnrWrFmMHDmSiy66iDPOOKNKsapGUAEdO4YpKF56Kay2JCLp07BhQw477DBGjRq1vTawfv16dt55Z3bZZRe+/PJLnnrqqVKPccghhzBz5ky+//57NmzYwOOPP75934YNG9hzzz3ZvHnz9qmjARo1asSGDRt2OFanTp1Yvnw5y5YtA+C+++7j0EMPrdRri3u6atUIKui00+D55+H668NJZxky+kskKwwbNowTTzxxexNRwbTN++67L61ataJv376lPr5n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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "acc = history_dict['accuracy']\n",
    "val_acc = history_dict['val_accuracy']\n",
    "loss = history_dict['loss']\n",
    "val_loss = history_dict['val_loss']\n",
    "\n",
    "epochs = range(1, len(acc) + 1)\n",
    "\n",
    "# \"bo\" is for \"blue dot\"\n",
    "plt.plot(epochs, loss, 'bo', label='Training loss')\n",
    "# b is for \"solid blue line\"\n",
    "plt.plot(epochs, val_loss, 'b', label='Validation loss')\n",
    "plt.title('Training and validation loss')\n",
    "plt.xlabel('Epochs')\n",
    "plt.ylabel('Loss')\n",
    "plt.legend()\n",
    "\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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vXv3Tvl1qhoSkZRt2rSJTp06KQnkKDOjU6dOtT5jUyIQkVpREshtdfn7KBGIiOQ5JQIRSZvp06GwEJo1C8/Tp9dvf6tWrWLgwIEMHDiQffbZh27duu2Y37JlS7WvLS0t5cc//nGN7zFs2LD6BdkIqbFYRNJi+nSYMAE2bAjzy5eHeYDi4rrts1OnTixYsACAq666inbt2nHppZfuWF9RUUHz5omLtaKiIoqKimp8j5dffrluwTViOiMQkbS4/PKdSaDShg1heUMaP348559/PocddhiXXXYZr776KocffjiDBg1i2LBhLFmyBIB//vOfnHzyyUBIIueccw7Dhw+nT58+3HrrrTv2165dux3bDx8+nDFjxtC/f3+Ki4txdwBmz55N//79GTJkCD/+8Y937DdWWVkZRx55JIMHD2bw4MFVEsz111/PwQcfzIABA5g8eTIAS5cu5fjjj2fAgAEMHjyY9957r2EPVDV0RiAiafHBB7VbXh/l5eW8/PLLFBQUsHbtWl588UWaN2/OM888wy9/+UseffTRXV7z9ttv8/zzz7Nu3Tr69evHxIkTd7n2/rXXXuPNN99k33335YgjjuCll16iqKiI8847jxdeeIHevXszbty4hDF16dKFp59+mtatW/Puu+8ybtw4SktLmTNnDv/3f//HK6+8Qtu2bfniiy8AKC4uZvLkyZxyyils2rSJ7du3N/yBSkKJQETSomfPUB2UaHlD+973vkdBQQEAa9as4ayzzuLdd9/FzNi6dWvC15x00km0atWKVq1a0aVLFz799FO6d+9eZZuhQ4fuWDZw4EDKyspo164dffr02XGd/rhx4ygpKdll/1u3bmXSpEksWLCAgoIC3nnnHQCeeeYZzj77bNq2bQvAnnvuybp16/joo4845ZRTgHBTWCapakhE0mLKFIjKuh3atg3LG9puu+22Y/pXv/oVxxxzDG+88QaPP/540mvqW7VqtWO6oKCAioqKOm2TzM0338zee+/NwoULKS0trbExO5uUCEQkLYqLoaQEevUCs/BcUlL3huJUrVmzhm7dugFw3333Nfj++/Xrx7JlyygrKwNg5syZSePo2rUrzZo1Y9q0aWzbtg2Ab37zm9x7771siBpQvvjiC9q3b0/37t157LHHANi8efOO9ZmgRCAiaVNcDGVlsH17eE53EgC47LLL+MUvfsGgQYNq9Qs+VW3atOH2229nxIgRDBkyhPbt29OhQ4ddtrvgggu4//77GTBgAG+//faOs5YRI0YwatQoioqKGDhwIDfddBMA06ZN49Zbb+WQQw5h2LBhfPLJJw0eezJW2QreWBQVFXlpaWm2wxDJS2+99RYHHHBAtsPIuq+++op27drh7lx44YX07duXiy++ONth7ZDo72Rm89w94fWzOiMQEamlO++8k4EDB3LQQQexZs0azjvvvGyHVC9pTQRmNsLMlpjZUjObXM123zUzN7Oa7/YQEcmyiy++mAULFrB48WKmT5++4wqgxipticDMCoDbgJHAgcA4MzswwXbtgZ8Ar6QrFhERSS6dZwRDgaXuvszdtwAzgNEJtrsGuB7QSBciIlmQzkTQDfgwZr48WraDmQ0Gerj736vbkZlNMLNSMytduXJlw0cqIpLHstZYbGbNgD8Al9S0rbuXuHuRuxfttdde6Q9ORCSPpDMRfAT0iJnvHi2r1B74L+CfZlYGfB2YpQZjEUnmmGOO4cknn6yy7JZbbmHixIlJXzN8+HAqLzk/8cQTWb169S7bXHXVVTuu50/mscceY/HixTvmr7zySp555plaRJ+70pkI5gJ9zay3mbUExgKzKle6+xp37+zuhe5eCPwHGOXuuklARBIaN24cM2bMqLJsxowZSTt+izd79mw6duxYp/eOTwRXX301xx9/fJ32lWvS1umcu1eY2STgSaAAuMfd3zSzq4FSd59V/R5EJJdddBFEQwM0mIED4ZZbkq8fM2YMV1xxBVu2bKFly5aUlZXx8ccfc+SRRzJx4kTmzp3Lxo0bGTNmDL/5zW92eX1hYSGlpaV07tyZKVOmcP/999OlSxd69OjBkCFDgHCPQElJCVu2bOFrX/sa06ZNY8GCBcyaNYt//etfXHvttTz66KNcc801nHzyyYwZM4Znn32WSy+9lIqKCg499FDuuOMOWrVqRWFhIWeddRaPP/44W7du5eGHH6Z///5VYiorK+PMM89k/fr1AEydOnXH4DjXX389Dz74IM2aNWPkyJH87ne/Y+nSpZx//vmsXLmSgoICHn74Yfbbb796Hfe0thG4+2x339/d93P3KdGyKxMlAXcfrrMBEanOnnvuydChQ5kzZw4QzgZOO+00zIwpU6ZQWlrKokWL+Ne//sWiRYuS7mfevHnMmDGDBQsWMHv2bObOnbtj3amnnsrcuXNZuHAhBxxwAHfffTfDhg1j1KhR3HjjjSxYsKBKwbtp0ybGjx/PzJkzef3116moqOCOO+7Ysb5z587Mnz+fiRMnJqx+quyuev78+cycOXPHKGqx3VUvXLiQyy67DAjdVV944YUsXLiQl19+ma5du9bvoKJuqEWkjqr75Z5OldVDo0ePZsaMGdx9990APPTQQ5SUlFBRUcGKFStYvHgxhxxySMJ9vPjii5xyyik7bgQbNWrUjnVvvPEGV1xxBatXr+arr77ihBNOqDaeJUuW0Lt3b/bff38AzjrrLG677TYuuugiICQWgCFDhvDXv/51l9fnQnfVedHFREOPmyoi2TN69GieffZZ5s+fz4YNGxgyZAjvv/8+N910E88++yyLFi3ipJNOStr9dE3Gjx/P1KlTef311/n1r39d5/1UquzKOlk31rnQXXWTTwSV46YuXw7uO8dNVTIQaZzatWvHMcccwznnnLOjkXjt2rXstttudOjQgU8//XRH1VEyRx11FI899hgbN25k3bp1PP744zvWrVu3jq5du7J161amxxQU7du3Z926dbvsq1+/fpSVlbF06VIg9CJ69NFHp/x5cqG76iafCDI1bqqIZM64ceNYuHDhjkQwYMAABg0aRP/+/TnjjDM44ogjqn394MGDOf300xkwYAAjR47k0EMP3bHummuu4bDDDuOII46o0rA7duxYbrzxRgYNGlRlPOHWrVtz77338r3vfY+DDz6YZs2acf7556f8WXKhu+om3w11s2bhTCCeWegjXURSp26oGwd1Qx0n2fio6Rg3VUSkMWryiSCT46aKiDRGTT4RZGvcVJGmqrFVJ+ebuvx98uI+guJiFfwiDaF169asWrWKTp06YWbZDkfiuDurVq2q9f0FeZEIRKRhdO/enfLyctQdfO5q3bo13bt3r9VrlAhEJGUtWrSgd+/e2Q5DGliTbyMQEZHqKRGIiOQ5JQIRkTzX6O4sNrOVwPJsx5FEZ+DzbAdRDcVXP7keH+R+jIqvfuoTXy93TzjWb6NLBLnMzEqT3cKdCxRf/eR6fJD7MSq++klXfKoaEhHJc0oEIiJ5TomgYZVkO4AaKL76yfX4IPdjVHz1k5b41EYgIpLndEYgIpLnlAhERPKcEkEtmVkPM3vezBab2Ztm9pME2ww3szVmtiB6XJnhGMvM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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(epochs, acc, 'bo', label='Training acc')\n",
    "plt.plot(epochs, val_acc, 'b', label='Validation acc')\n",
    "plt.title('Training and validation accuracy')\n",
    "plt.xlabel('Epochs')\n",
    "plt.ylabel('Accuracy')\n",
    "plt.legend(loc='lower right')\n",
    "\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "250/250 [==============================] - 1s 4ms/step - loss: 0.5962 - accuracy: 0.7815\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n",
      "0.781499981880188\n"
     ]
    }
   ],
   "source": [
    "export_model = tf.keras.Sequential([\n",
    "    vectorize_layer,\n",
    "    model,\n",
    "])\n",
    "\n",
    "export_model.compile(\n",
    "    loss = losses.SparseCategoricalCrossentropy(from_logits=True), optimizer='adam', metrics=['accuracy']\n",
    ")\n",
    "\n",
    "loss, accuracy = export_model.evaluate(raw_test_ds)\n",
    "print(accuracy)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "outputs": [
    {
     "data": {
      "text/plain": "array([0, 3, 2])"
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "examples = [\n",
    "    \"how to specify the connection string if the excel file name contains white space?using blank string connstring = \"\"provider=microsoft.ace.oledb.12.0;data source=d:\\data\\[proj_resource details 20110118.xlsx];extended properties=excel 12.0\"\";...i mentioned [ ] still it is throwing exception.how can i solve this problem..plz mention the correct path\",\n",
    "    \"http get response parsing in blank and store in a string i have this below response from a http get request..response=you are about to purchase abcd package for 20 usd. charge :1usd&amp;encoding=0&amp;sessionop=end...i'm trying to get only \"\"you are about to purchase abcd package for 20 usd. charge :1usd\"\" to a string in blank so that i can display it to the customer, but i'm not sure how...any help would be appreciated. thank you\",\n",
    "    \"why is length equal to 0 in browser before it is defined? i would expect the value of an undefined variable in blank to behave like this when it is logged:....but on jsfiddle it is showing the length is 0 before it is ever defined.....after more research. it also seems to default to 0 in chrome.....when i would expect it to generate an error like with any other randomword....when i run the same commands in node locally, it seems to behave how i would expect. with throwing an error for length:....why is length equal to 0 in these cases?\"\n",
    "]\n",
    "\n",
    "import numpy as np\n",
    "np.argmax(export_model.predict(examples), axis=1)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "outputs": [],
   "source": [],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}