Skip to content

Instantly share code, notes, and snippets.

@T-STAR-LTD
Last active February 26, 2021 16:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save T-STAR-LTD/5d7a1b8b4ac28d64b070e629027678c0 to your computer and use it in GitHub Desktop.
Save T-STAR-LTD/5d7a1b8b4ac28d64b070e629027678c0 to your computer and use it in GitHub Desktop.
SAM for tf.keras
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "SAM for tf.keras",
"provenance": [],
"collapsed_sections": [],
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"accelerator": "TPU"
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/T-STAR-LTD/5d7a1b8b4ac28d64b070e629027678c0/sam-for-tf-keras.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "HDAo0_qCnTAC",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "f555aa3c-0410-4a18-c002-112487042c4f"
},
"source": [
"!pip install tensorflow_addons\r\n",
"import tensorflow as tf\r\n",
"import tensorflow.keras.backend as K\r\n",
"import numpy as np\r\n",
"import time\r\n",
"from tensorflow.keras.utils import to_categorical\r\n",
"import time\r\n",
"import datetime\r\n",
"from pytz import timezone\r\n",
"\r\n",
"tz = timezone('Asia/Tokyo')\r\n",
"start_datetime = datetime.datetime.now(tz=tz )\r\n",
"print(start_datetime.isoformat())\r\n",
"\r\n",
"(x_train,y_train), (x_test,y_test) = tf.keras.datasets.cifar10.load_data()\r\n",
"\r\n",
"y_train = to_categorical(y_train)\r\n",
"y_test = to_categorical(y_test)\r\n",
"\r\n",
"train_data, validation_data = (x_train,y_train), (x_test,y_test)\r\n",
"\r\n"
],
"execution_count": 1,
"outputs": [
{
"output_type": "stream",
"text": [
"Collecting tensorflow_addons\n",
"\u001b[?25l Downloading https://files.pythonhosted.org/packages/74/e3/56d2fe76f0bb7c88ed9b2a6a557e25e83e252aec08f13de34369cd850a0b/tensorflow_addons-0.12.1-cp37-cp37m-manylinux2010_x86_64.whl (703kB)\n",
"\r\u001b[K |▌ | 10kB 14.1MB/s eta 0:00:01\r\u001b[K |█ | 20kB 12.2MB/s eta 0:00:01\r\u001b[K |█▍ | 30kB 10.2MB/s eta 0:00:01\r\u001b[K |█▉ | 40kB 8.1MB/s eta 0:00:01\r\u001b[K |██▎ | 51kB 5.3MB/s eta 0:00:01\r\u001b[K |██▉ | 61kB 5.7MB/s eta 0:00:01\r\u001b[K |███▎ | 71kB 5.8MB/s eta 0:00:01\r\u001b[K |███▊ | 81kB 6.1MB/s eta 0:00:01\r\u001b[K |████▏ | 92kB 5.3MB/s eta 0:00:01\r\u001b[K |████▋ | 102kB 5.8MB/s eta 0:00:01\r\u001b[K |█████▏ | 112kB 5.8MB/s eta 0:00:01\r\u001b[K |█████▋ | 122kB 5.8MB/s eta 0:00:01\r\u001b[K |██████ | 133kB 5.8MB/s eta 0:00:01\r\u001b[K |██████▌ | 143kB 5.8MB/s eta 0:00:01\r\u001b[K |███████ | 153kB 5.8MB/s eta 0:00:01\r\u001b[K |███████▌ | 163kB 5.8MB/s eta 0:00:01\r\u001b[K |████████ | 174kB 5.8MB/s eta 0:00:01\r\u001b[K |████████▍ | 184kB 5.8MB/s eta 0:00:01\r\u001b[K |████████▉ | 194kB 5.8MB/s eta 0:00:01\r\u001b[K |█████████▎ | 204kB 5.8MB/s eta 0:00:01\r\u001b[K |█████████▉ | 215kB 5.8MB/s eta 0:00:01\r\u001b[K |██████████▎ | 225kB 5.8MB/s eta 0:00:01\r\u001b[K |██████████▊ | 235kB 5.8MB/s eta 0:00:01\r\u001b[K |███████████▏ | 245kB 5.8MB/s eta 0:00:01\r\u001b[K |███████████▋ | 256kB 5.8MB/s eta 0:00:01\r\u001b[K |████████████▏ | 266kB 5.8MB/s eta 0:00:01\r\u001b[K |████████████▋ | 276kB 5.8MB/s eta 0:00:01\r\u001b[K |█████████████ | 286kB 5.8MB/s eta 0:00:01\r\u001b[K |█████████████▌ | 296kB 5.8MB/s eta 0:00:01\r\u001b[K |██████████████ | 307kB 5.8MB/s eta 0:00:01\r\u001b[K |██████████████▍ | 317kB 5.8MB/s eta 0:00:01\r\u001b[K |███████████████ | 327kB 5.8MB/s eta 0:00:01\r\u001b[K |███████████████▍ | 337kB 5.8MB/s eta 0:00:01\r\u001b[K |███████████████▉ | 348kB 5.8MB/s eta 0:00:01\r\u001b[K |████████████████▎ | 358kB 5.8MB/s eta 0:00:01\r\u001b[K |████████████████▊ | 368kB 5.8MB/s eta 0:00:01\r\u001b[K |█████████████████▎ | 378kB 5.8MB/s eta 0:00:01\r\u001b[K |█████████████████▊ | 389kB 5.8MB/s eta 0:00:01\r\u001b[K |██████████████████▏ | 399kB 5.8MB/s eta 0:00:01\r\u001b[K |██████████████████▋ | 409kB 5.8MB/s eta 0:00:01\r\u001b[K |███████████████████ | 419kB 5.8MB/s eta 0:00:01\r\u001b[K |███████████████████▋ | 430kB 5.8MB/s eta 0:00:01\r\u001b[K |████████████████████ | 440kB 5.8MB/s eta 0:00:01\r\u001b[K |████████████████████▌ | 450kB 5.8MB/s eta 0:00:01\r\u001b[K |█████████████████████ | 460kB 5.8MB/s eta 0:00:01\r\u001b[K |█████████████████████▍ | 471kB 5.8MB/s eta 0:00:01\r\u001b[K |██████████████████████ | 481kB 5.8MB/s eta 0:00:01\r\u001b[K |██████████████████████▍ | 491kB 5.8MB/s eta 0:00:01\r\u001b[K |██████████████████████▉ | 501kB 5.8MB/s eta 0:00:01\r\u001b[K |███████████████████████▎ | 512kB 5.8MB/s eta 0:00:01\r\u001b[K |███████████████████████▊ | 522kB 5.8MB/s eta 0:00:01\r\u001b[K |████████████████████████▎ | 532kB 5.8MB/s eta 0:00:01\r\u001b[K |████████████████████████▊ | 542kB 5.8MB/s eta 0:00:01\r\u001b[K |█████████████████████████▏ | 552kB 5.8MB/s eta 0:00:01\r\u001b[K |█████████████████████████▋ | 563kB 5.8MB/s eta 0:00:01\r\u001b[K |██████████████████████████ | 573kB 5.8MB/s eta 0:00:01\r\u001b[K |██████████████████████████▋ | 583kB 5.8MB/s eta 0:00:01\r\u001b[K |███████████████████████████ | 593kB 5.8MB/s eta 0:00:01\r\u001b[K |███████████████████████████▌ | 604kB 5.8MB/s eta 0:00:01\r\u001b[K |████████████████████████████ | 614kB 5.8MB/s eta 0:00:01\r\u001b[K |████████████████████████████▍ | 624kB 5.8MB/s eta 0:00:01\r\u001b[K |████████████████████████████▉ | 634kB 5.8MB/s eta 0:00:01\r\u001b[K |█████████████████████████████▍ | 645kB 5.8MB/s eta 0:00:01\r\u001b[K |█████████████████████████████▉ | 655kB 5.8MB/s eta 0:00:01\r\u001b[K |██████████████████████████████▎ | 665kB 5.8MB/s eta 0:00:01\r\u001b[K |██████████████████████████████▊ | 675kB 5.8MB/s eta 0:00:01\r\u001b[K |███████████████████████████████▏| 686kB 5.8MB/s eta 0:00:01\r\u001b[K |███████████████████████████████▊| 696kB 5.8MB/s eta 0:00:01\r\u001b[K |████████████████████████████████| 706kB 5.8MB/s \n",
"\u001b[?25hRequirement already satisfied: typeguard>=2.7 in /usr/local/lib/python3.7/dist-packages (from tensorflow_addons) (2.7.1)\n",
"Installing collected packages: tensorflow-addons\n",
"Successfully installed tensorflow-addons-0.12.1\n",
"2021-02-27T00:14:00.050730+09:00\n",
"Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz\n",
"170500096/170498071 [==============================] - 2s 0us/step\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "OEXmnjqrnvTo"
},
"source": [
"def basic_augmentation(x):\r\n",
" x = tf.image.random_flip_left_right(x)\r\n",
" x = tf.pad(x, [ [4,4], [4,4], [0,0]], \"reflect\")\r\n",
" x = tf.image.random_crop(x, [32,32,3])\r\n",
" return x\r\n",
"\r\n",
"\r\n",
"def cutout_augmentation(image, cval=0, cnum = 6, csize = 0.25):\r\n",
" DIM = image.shape[0]\r\n",
" for k in range( cnum ):\r\n",
" # CHOOSE RANDOM LOCATION\r\n",
" x = tf.cast( tf.random.uniform([],0,DIM),tf.int32)\r\n",
" y = tf.cast( tf.random.uniform([],0,DIM),tf.int32)\r\n",
" # COMPUTE SQUARE \r\n",
" WIDTH = tf.cast( csize*DIM,tf.int32)\r\n",
" ya = tf.math.maximum(0,y-WIDTH//2)\r\n",
" yb = tf.math.minimum(DIM,y+WIDTH//2)\r\n",
" xa = tf.math.maximum(0,x-WIDTH//2)\r\n",
" xb = tf.math.minimum(DIM,x+WIDTH//2)\r\n",
" # DROPOUT IMAGE\r\n",
" one = image[ya:yb,0:xa,:]\r\n",
" two = tf.fill([yb-ya,xb-xa,3], tf.cast(cval, image.dtype) ) \r\n",
" three = image[ya:yb,xb:DIM,:]\r\n",
" middle = tf.concat([one,two,three],axis=1)\r\n",
" image = tf.concat([image[0:ya,:,:],middle,image[yb:DIM,:,:]],axis=0)\r\n",
"\r\n",
" # RESHAPE HACK SO TPU COMPILER KNOWS SHAPE OF OUTPUT TENSOR \r\n",
" image = tf.reshape(image,[DIM,DIM,3])\r\n",
" return image\r\n",
"\r\n",
"\r\n",
"def make_dataset( train_data, validation_data, batch_size,cutout_num=1,cutout_size=0.25):\r\n",
" (x_train, label_train)= train_data\r\n",
" (x_test, label_test)=validation_data\r\n",
"\r\n",
" train_len = len(x_train)\r\n",
" test_len = len(x_test)\r\n",
"\r\n",
" ds_train = tf.data.Dataset.from_tensor_slices(train_data)\r\n",
" ds_train = ds_train.shuffle(train_len).batch(batch_size, drop_remainder=True)\r\n",
" ds_validation = tf.data.Dataset.from_tensor_slices(validation_data)\r\n",
" ds_validation = ds_validation.batch(batch_size)\r\n",
"\r\n",
" def data_augmentation(images,labels,aug=True,cutout_num=1,cutout_size=0.25):\r\n",
" image_mean = tf.constant([[[0.49139968, 0.48215841, 0.44653091]]])\r\n",
" image_std = tf.constant([[[0.24703223, 0.24348513, 0.26158784]]])\r\n",
" images = tf.cast(images, tf.float32)/255.0\r\n",
" images = (images-image_mean)/image_std\r\n",
" if aug:\r\n",
" images = tf.map_fn(basic_augmentation, images)\r\n",
" if cutout_num!=0:\r\n",
" images = tf.map_fn(lambda image: cutout_augmentation(image,cval=0.0, csize=cutout_size, cnum=cutout_num), images)\r\n",
"\r\n",
" return images, labels\r\n",
"\r\n",
" ds_train = ds_train.map(lambda image, label: data_augmentation(image, label, True, cutout_num,cutout_size ), num_parallel_calls=tf.data.experimental.AUTOTUNE)\r\n",
" ds_train = ds_train.prefetch(tf.data.experimental.AUTOTUNE)\r\n",
"\r\n",
" ds_validation = ds_validation.map(lambda image, label: data_augmentation(image, label, False ), num_parallel_calls=tf.data.experimental.AUTOTUNE)\r\n",
" ds_validation = ds_validation.prefetch(tf.data.experimental.AUTOTUNE)\r\n",
" return ds_train,ds_validation\r\n",
"\r\n",
"class LRSchedule(tf.keras.optimizers.schedules.LearningRateSchedule):\r\n",
" def __init__(self, **kwargs):\r\n",
" super().__init__()\r\n",
" self.lr = kwargs['lr']\r\n",
" self.total_steps = kwargs['total_steps']\r\n",
" self.warmup = kwargs['warmup']\r\n",
" self.cooldown = kwargs['cooldown']\r\n",
"\r\n",
" def get_config(self):\r\n",
" config = {\"lr\": float(self.lr), \r\n",
" \"warmup\": float(self.warmup),\r\n",
" \"cooldown\": float(self.cooldown),\r\n",
" \"total_steps\": float(self.total_steps),\r\n",
" }\r\n",
" return config\r\n",
"\r\n",
" def __call__(self, step):\r\n",
" step_l = step-self.warmup\r\n",
" flat_steps = self.total_steps-self.warmup-self.cooldown\r\n",
" total_l = self.total_steps-self.warmup\r\n",
" lr2 = tf.where(step <= self.warmup, step*self.lr/self.warmup, self.lr)\r\n",
" return tf.where(step_l <= total_l-self.cooldown,\r\n",
" lr2,\r\n",
" self.lr*(1/2*(1+tf.math.cos((step-(self.total_steps-self.cooldown))*np.pi/self.cooldown)))\r\n",
" )\r\n",
"\r\n",
"def showHistory(history):\r\n",
" import matplotlib.pyplot as plt\r\n",
"\r\n",
" # Setting Parameters\r\n",
" acc = history['acc']\r\n",
" val_acc = history['val_acc']\r\n",
" max_acc = max(val_acc)\r\n",
"\r\n",
" loss = history['loss']\r\n",
" val_loss = history['val_loss']\r\n",
"\r\n",
" epochs = range(len(acc))\r\n",
"\r\n",
" plt.figure(figsize=(16,6))\r\n",
" \r\n",
" # Accracy\r\n",
" plt.subplot(1,2,1)\r\n",
" plt.plot(epochs, acc, 'r', label='Training')\r\n",
" plt.plot(epochs, val_acc, 'b', label='Validation')\r\n",
" plt.title('Accuracy')\r\n",
" plt.grid()\r\n",
" plt.legend()\r\n",
"\r\n",
" # Loss \r\n",
" plt.subplot(1,2,2)\r\n",
" plt.plot(epochs, loss, 'r', label='Training')\r\n",
" plt.plot(epochs, val_loss, 'b', label='Validation')\r\n",
" plt.title('Loss')\r\n",
" plt.ylim(0.0,2.0)\r\n",
" plt.grid()\r\n",
" plt.legend()\r\n",
" plt.show()"
],
"execution_count": 2,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"id": "yuk9ExNr0FQf",
"outputId": "3a26e1a0-7fb6-438d-9fd9-7f65411a2ba7"
},
"source": [
"import pickle\r\n",
"from tensorflow.keras import layers\r\n",
"import tensorflow_addons as tfa\r\n",
"\r\n",
"# https://github.com/google-research/sam\r\n",
"class SAMModel(tf.keras.models.Model):\r\n",
" def __init__(self, *args, rho=0.05, **kwargs):\r\n",
" super().__init__( *args, **kwargs)\r\n",
" self.rho = tf.constant(rho, dtype=tf.float32)\r\n",
"\r\n",
" def train_step(self,data):\r\n",
" x, y = data\r\n",
"\r\n",
" # 1st step\r\n",
" with tf.GradientTape() as tape:\r\n",
" y_pred = self(x, training=True)\r\n",
" loss = self.compiled_loss(y, y_pred, regularization_losses=self.losses)\r\n",
" \r\n",
" trainable_vars = self.trainable_variables\r\n",
" gradients = tape.gradient(loss, trainable_vars)\r\n",
" \r\n",
" norm = tf.linalg.global_norm(gradients)\r\n",
" scale = self.rho / (norm + 1e-12)\r\n",
" e_w_list = []\r\n",
" for v, grad in zip(trainable_vars, gradients):\r\n",
" e_w = grad * scale\r\n",
" v.assign_add(e_w)\r\n",
" e_w_list.append(e_w)\r\n",
"\r\n",
" # 2nd step\r\n",
" with tf.GradientTape() as tape:\r\n",
" y_pred_adv = self(x, training=True)\r\n",
" loss_adv = self.compiled_loss(y, y_pred_adv, regularization_losses=self.losses)\r\n",
" gradients_adv = tape.gradient(loss_adv, trainable_vars)\r\n",
" for v, e_w in zip(trainable_vars, e_w_list):\r\n",
" v.assign_sub(e_w)\r\n",
"\r\n",
" # optimize\r\n",
" self.optimizer.apply_gradients(zip(gradients_adv, trainable_vars))\r\n",
"\r\n",
" self.compiled_metrics.update_state(y, y_pred)\r\n",
" return {m.name: m.result() for m in self.metrics}\r\n",
"\r\n",
"def SAM_wide_res_net(depth,width_factor, input_shape, num_outputs, l2_reg=0.0, rho=0.0):\r\n",
" filters = [16, 1 * 16 * width_factor, 2 * 16 * width_factor, 4 * 16 * width_factor]\r\n",
" n = int((depth-4)/6)\r\n",
"\r\n",
" CONV_KWARGS = {\r\n",
" 'use_bias': False,\r\n",
" 'padding': 'same',\r\n",
" 'kernel_initializer': tf.keras.initializers.VarianceScaling(scale=2.0, mode='fan_out', distribution='normal'),\r\n",
" 'kernel_regularizer': tf.keras.regularizers.l2(l2_reg)\r\n",
" }\r\n",
" BN_KWARGS = {\r\n",
" 'momentum': 0.9,\r\n",
" 'epsilon' : 1e-5 \r\n",
" }\r\n",
" init_range = 1.0 / (num_outputs)**(0.5)\r\n",
" DENSE_KWARGS = {\r\n",
" 'kernel_initializer' : tf.keras.initializers.RandomUniform(minval=-init_range, maxval=init_range) , \r\n",
" 'kernel_regularizer': tf.keras.regularizers.l2(l2_reg),\r\n",
" 'bias_regularizer': tf.keras.regularizers.l2(l2_reg)\r\n",
" }\r\n",
" def res_basic(x, filters, strides, pre_act=False):\r\n",
" shortcut = x\r\n",
" if pre_act:\r\n",
" x = layers.BatchNormalization( **BN_KWARGS )(x)\r\n",
" x = layers.ReLU()(x)\r\n",
" x = layers.Conv2D(filters, 3, strides,**CONV_KWARGS)(x)\r\n",
" x = layers.BatchNormalization( **BN_KWARGS )(x)\r\n",
" x = layers.ReLU()(x)\r\n",
" x = layers.Conv2D(filters, 3, 1,**CONV_KWARGS)(x)\r\n",
" x = layers.BatchNormalization( **BN_KWARGS )(x)\r\n",
" x = layers.ReLU()(x)\r\n",
" \r\n",
" shortcut_shape = K.int_shape(shortcut)\r\n",
" x_shape = K.int_shape(x)\r\n",
" downsample_strides = 2 if shortcut_shape[1] != x_shape[1] else 1\r\n",
" if downsample_strides != 1:\r\n",
" shortcut = layers.AveragePooling2D((downsample_strides,downsample_strides), downsample_strides)(shortcut)\r\n",
" if shortcut_shape[3] != x_shape[3]:\r\n",
" shortcut = tf.pad(shortcut, [ [0,0],[0,0],[0,0],[0,x_shape[3]-shortcut_shape[3]] ] )\r\n",
"\r\n",
" return shortcut+x\r\n",
"\r\n",
" x = inputs = layers.Input(shape=input_shape)\r\n",
" x = layers.Conv2D(filters[0], 3, 1, **CONV_KWARGS)(x)\r\n",
" for i in range(n):\r\n",
" x = res_basic(x, filters[1], strides=1, pre_act = (i == 0) )\r\n",
" for i in range(n):\r\n",
" x = res_basic(x, filters[2], strides=2 if i == 0 else 1 )\r\n",
" for i in range(n):\r\n",
" x = res_basic(x, filters[3], strides=2 if i == 0 else 1 )\r\n",
" x = layers.BatchNormalization( **BN_KWARGS )(x)\r\n",
" x = layers.ReLU()(x)\r\n",
" x = layers.GlobalAveragePooling2D()(x)\r\n",
" x = layers.Dense(units=num_outputs, **DENSE_KWARGS)(x)\r\n",
" x = layers.Activation('softmax')(x)\r\n",
" if rho==0.0:\r\n",
" model = tf.keras.models.Model(inputs,x) \r\n",
" else:\r\n",
" model = SAMModel(inputs,x, rho=rho) \r\n",
" model.build(input_shape)\r\n",
" return model\r\n",
"\r\n",
"def train(model, optimizer, callbacks, epochs, ds_train, ds_validation,verbose=1, label_smoothing=0.0):\r\n",
" \r\n",
" loss = tf.keras.losses.CategoricalCrossentropy(label_smoothing=label_smoothing)\r\n",
" acc = tf.keras.metrics.CategoricalAccuracy(name='acc')\r\n",
" model.compile(optimizer=optimizer,\r\n",
" loss=loss,metrics=[acc], steps_per_execution=10)\r\n",
" history = model.fit(ds_train,epochs=epochs,\r\n",
" validation_data=ds_validation,verbose=verbose, callbacks=callbacks)\r\n",
" \r\n",
" return history.history\r\n",
"\r\n",
"def train_sam():\r\n",
" wrn_depth = 22\r\n",
" wrn_width_factor = 8\r\n",
"\r\n",
" warmup_epochs = 0\r\n",
" cooldown_epochs = 200\r\n",
" EPOCHS = warmup_epochs+cooldown_epochs\r\n",
"\r\n",
" BATCH_SIZE = 128\r\n",
" max_lr = 0.1\r\n",
" min_lr = max_lr/100\r\n",
" wd = 5e-4\r\n",
" label_smoothing = 0.0\r\n",
" sam_rho_list = [0.05]\r\n",
"\r\n",
" cutout_num = 0\r\n",
" cutout_size = 0.5\r\n",
"\r\n",
" def scheduler(epoch, lr):\r\n",
" flat_epochs = EPOCHS - warmup_epochs - cooldown_epochs\r\n",
" if epoch < warmup_epochs:\r\n",
" return min_lr + (max_lr-min_lr)*epoch/warmup_epochs\r\n",
" elif epoch < warmup_epochs+flat_epochs:\r\n",
" return max_lr\r\n",
" else:\r\n",
" epoch = epoch - (warmup_epochs+flat_epochs) + 1\r\n",
" return min_lr + 0.5*(max_lr-min_lr)*(1.0+np.cos(epoch/cooldown_epochs*np.pi))\r\n",
" class CustomLogger(tf.keras.callbacks.Callback):\r\n",
" def on_epoch_end(self, epoch, logs):\r\n",
" lr = K.get_value(self.model.optimizer.lr)\r\n",
" logs['lr'] = lr\r\n",
"\r\n",
" for sam_rho in sam_rho_list:\r\n",
" optimizer = tf.optimizers.SGD(max_lr, momentum=0.9, global_clipnorm=5.0)\r\n",
"\r\n",
" lr_scheduler = tf.keras.callbacks.LearningRateScheduler(scheduler)\r\n",
" logger = CustomLogger()\r\n",
"\r\n",
" ds_train, ds_validation = make_dataset( train_data, validation_data, BATCH_SIZE,cutout_num,cutout_size)\r\n",
"\r\n",
" model = SAM_wide_res_net( wrn_depth, wrn_width_factor, (32,32,3), 10, wd, rho=sam_rho)\r\n",
"\r\n",
" start_time = time.time()\r\n",
" start_datetime = datetime.datetime.now(tz=tz)\r\n",
" print('Start:',start_datetime.isoformat())\r\n",
" print('LR:',max_lr, 'WD:', wd ,'RHO:', sam_rho )\r\n",
" history = train( model, optimizer, [lr_scheduler,logger], EPOCHS,\r\n",
" ds_train, ds_validation, \r\n",
" verbose=1, label_smoothing=label_smoothing)\r\n",
" end_datetime = datetime.datetime.now(tz=tz)\r\n",
" print('End:',end_datetime.strftime(\"%Y/%m/%d %H:%M:%S\"))\r\n",
" print('Time:', time.time()-start_time )\r\n",
"\r\n",
" showHistory(history)\r\n",
" f = open( f'{end_datetime.strftime(\"%Y%m%d%H%M%S\")}.hist', 'wb')\r\n",
" pickle.dump(history, f)\r\n",
"\r\n",
"try:\r\n",
" tpu = tf.distribute.cluster_resolver.TPUClusterResolver() # TPU detection\r\n",
" tf.config.experimental_connect_to_cluster(tpu)\r\n",
" tf.tpu.experimental.initialize_tpu_system(tpu)\r\n",
" strategy = tf.distribute .TPUStrategy(tpu)\r\n",
"except ValueError:\r\n",
" strategy = tf.distribute.get_strategy()\r\n",
"\r\n",
"with strategy.scope():\r\n",
" train_sam()"
],
"execution_count": 3,
"outputs": [
{
"output_type": "stream",
"text": [
"INFO:tensorflow:Initializing the TPU system: grpc://10.101.244.98:8470\n"
],
"name": "stdout"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:Initializing the TPU system: grpc://10.101.244.98:8470\n"
],
"name": "stderr"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:Clearing out eager caches\n"
],
"name": "stdout"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:Clearing out eager caches\n"
],
"name": "stderr"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:Finished initializing TPU system.\n"
],
"name": "stdout"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:Finished initializing TPU system.\n"
],
"name": "stderr"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:Found TPU system:\n"
],
"name": "stdout"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:Found TPU system:\n"
],
"name": "stderr"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:*** Num TPU Cores: 8\n"
],
"name": "stdout"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:*** Num TPU Cores: 8\n"
],
"name": "stderr"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:*** Num TPU Workers: 1\n"
],
"name": "stdout"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:*** Num TPU Workers: 1\n"
],
"name": "stderr"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:*** Num TPU Cores Per Worker: 8\n"
],
"name": "stdout"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:*** Num TPU Cores Per Worker: 8\n"
],
"name": "stderr"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:localhost/replica:0/task:0/device:CPU:0, CPU, 0, 0)\n"
],
"name": "stdout"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:localhost/replica:0/task:0/device:CPU:0, CPU, 0, 0)\n"
],
"name": "stderr"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:CPU:0, CPU, 0, 0)\n"
],
"name": "stdout"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:CPU:0, CPU, 0, 0)\n"
],
"name": "stderr"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:0, TPU, 0, 0)\n"
],
"name": "stdout"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:0, TPU, 0, 0)\n"
],
"name": "stderr"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:1, TPU, 0, 0)\n"
],
"name": "stdout"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:1, TPU, 0, 0)\n"
],
"name": "stderr"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:2, TPU, 0, 0)\n"
],
"name": "stdout"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:2, TPU, 0, 0)\n"
],
"name": "stderr"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:3, TPU, 0, 0)\n"
],
"name": "stdout"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:3, TPU, 0, 0)\n"
],
"name": "stderr"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:4, TPU, 0, 0)\n"
],
"name": "stdout"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:4, TPU, 0, 0)\n"
],
"name": "stderr"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:5, TPU, 0, 0)\n"
],
"name": "stdout"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:5, TPU, 0, 0)\n"
],
"name": "stderr"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:6, TPU, 0, 0)\n"
],
"name": "stdout"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:6, TPU, 0, 0)\n"
],
"name": "stderr"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:7, TPU, 0, 0)\n"
],
"name": "stdout"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU:7, TPU, 0, 0)\n"
],
"name": "stderr"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU_SYSTEM:0, TPU_SYSTEM, 0, 0)\n"
],
"name": "stdout"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:TPU_SYSTEM:0, TPU_SYSTEM, 0, 0)\n"
],
"name": "stderr"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:XLA_CPU:0, XLA_CPU, 0, 0)\n"
],
"name": "stdout"
},
{
"output_type": "stream",
"text": [
"INFO:tensorflow:*** Available Device: _DeviceAttributes(/job:worker/replica:0/task:0/device:XLA_CPU:0, XLA_CPU, 0, 0)\n"
],
"name": "stderr"
},
{
"output_type": "stream",
"text": [
"Start: 2021-02-27T00:14:38.888695+09:00\n",
"LR: 0.1 WD: 0.0005 RHO: 0.05\n",
"Epoch 1/200\n",
"390/390 [==============================] - 44s 114ms/step - loss: 6.8623 - acc: 0.2713 - val_loss: 3.8293 - val_acc: 0.4983\n",
"Epoch 2/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 3.4368 - acc: 0.5233 - val_loss: 2.3085 - val_acc: 0.6268\n",
"Epoch 3/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 2.0818 - acc: 0.6619 - val_loss: 1.4772 - val_acc: 0.7364\n",
"Epoch 4/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 1.4666 - acc: 0.7353 - val_loss: 1.2272 - val_acc: 0.7406\n",
"Epoch 5/200\n",
"390/390 [==============================] - 14s 37ms/step - loss: 1.1623 - acc: 0.7763 - val_loss: 0.9534 - val_acc: 0.8080\n",
"Epoch 6/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 1.0282 - acc: 0.8001 - val_loss: 0.8679 - val_acc: 0.8192\n",
"Epoch 7/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.9610 - acc: 0.8118 - val_loss: 0.8686 - val_acc: 0.8185\n",
"Epoch 8/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.9022 - acc: 0.8287 - val_loss: 0.8185 - val_acc: 0.8353\n",
"Epoch 9/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.8857 - acc: 0.8369 - val_loss: 0.8201 - val_acc: 0.8304\n",
"Epoch 10/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.8643 - acc: 0.8421 - val_loss: 0.8151 - val_acc: 0.8321\n",
"Epoch 11/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.8464 - acc: 0.8510 - val_loss: 0.7870 - val_acc: 0.8437\n",
"Epoch 12/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.8435 - acc: 0.8550 - val_loss: 0.7860 - val_acc: 0.8475\n",
"Epoch 13/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.8212 - acc: 0.8627 - val_loss: 0.7456 - val_acc: 0.8611\n",
"Epoch 14/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.8183 - acc: 0.8667 - val_loss: 0.7412 - val_acc: 0.8689\n",
"Epoch 15/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.8094 - acc: 0.8722 - val_loss: 0.8611 - val_acc: 0.8199\n",
"Epoch 16/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.8061 - acc: 0.8741 - val_loss: 0.8762 - val_acc: 0.8294\n",
"Epoch 17/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.7917 - acc: 0.8773 - val_loss: 0.7522 - val_acc: 0.8660\n",
"Epoch 18/200\n",
"390/390 [==============================] - 14s 37ms/step - loss: 0.7885 - acc: 0.8792 - val_loss: 0.7710 - val_acc: 0.8595\n",
"Epoch 19/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.7807 - acc: 0.8841 - val_loss: 0.7606 - val_acc: 0.8586\n",
"Epoch 20/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.7874 - acc: 0.8847 - val_loss: 0.7738 - val_acc: 0.8538\n",
"Epoch 21/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.7755 - acc: 0.8882 - val_loss: 0.7701 - val_acc: 0.8597\n",
"Epoch 22/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.7725 - acc: 0.8890 - val_loss: 0.7383 - val_acc: 0.8699\n",
"Epoch 23/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.7685 - acc: 0.8923 - val_loss: 0.7381 - val_acc: 0.8694\n",
"Epoch 24/200\n",
"390/390 [==============================] - 14s 37ms/step - loss: 0.7634 - acc: 0.8947 - val_loss: 0.7347 - val_acc: 0.8719\n",
"Epoch 25/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.7554 - acc: 0.8977 - val_loss: 0.7730 - val_acc: 0.8680\n",
"Epoch 26/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.7575 - acc: 0.8968 - val_loss: 0.6883 - val_acc: 0.8921\n",
"Epoch 27/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.7472 - acc: 0.9022 - val_loss: 0.6894 - val_acc: 0.8950\n",
"Epoch 28/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.7567 - acc: 0.8985 - val_loss: 0.7038 - val_acc: 0.8890\n",
"Epoch 29/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.7413 - acc: 0.9040 - val_loss: 0.7166 - val_acc: 0.8894\n",
"Epoch 30/200\n",
"390/390 [==============================] - 14s 37ms/step - loss: 0.7429 - acc: 0.9030 - val_loss: 0.8965 - val_acc: 0.8323\n",
"Epoch 31/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.7443 - acc: 0.9040 - val_loss: 0.6961 - val_acc: 0.8949\n",
"Epoch 32/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.7387 - acc: 0.9068 - val_loss: 0.6912 - val_acc: 0.8957\n",
"Epoch 33/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.7389 - acc: 0.9064 - val_loss: 0.7018 - val_acc: 0.8907\n",
"Epoch 34/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.7308 - acc: 0.9091 - val_loss: 0.6938 - val_acc: 0.8884\n",
"Epoch 35/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.7309 - acc: 0.9091 - val_loss: 0.7158 - val_acc: 0.8874\n",
"Epoch 36/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.7362 - acc: 0.9098 - val_loss: 0.8130 - val_acc: 0.8476\n",
"Epoch 37/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.7252 - acc: 0.9121 - val_loss: 0.7117 - val_acc: 0.8848\n",
"Epoch 38/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.7226 - acc: 0.9134 - val_loss: 0.6824 - val_acc: 0.8994\n",
"Epoch 39/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.7150 - acc: 0.9186 - val_loss: 0.7246 - val_acc: 0.8818\n",
"Epoch 40/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.7267 - acc: 0.9124 - val_loss: 0.7148 - val_acc: 0.8851\n",
"Epoch 41/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.7132 - acc: 0.9175 - val_loss: 0.6658 - val_acc: 0.9058\n",
"Epoch 42/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.7163 - acc: 0.9154 - val_loss: 0.6948 - val_acc: 0.8976\n",
"Epoch 43/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.7174 - acc: 0.9163 - val_loss: 0.6851 - val_acc: 0.8949\n",
"Epoch 44/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.7097 - acc: 0.9183 - val_loss: 0.6317 - val_acc: 0.9158\n",
"Epoch 45/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.7002 - acc: 0.9217 - val_loss: 0.7014 - val_acc: 0.8871\n",
"Epoch 46/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.7034 - acc: 0.9217 - val_loss: 0.7064 - val_acc: 0.8914\n",
"Epoch 47/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.6958 - acc: 0.9256 - val_loss: 0.6814 - val_acc: 0.8988\n",
"Epoch 48/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.7022 - acc: 0.9218 - val_loss: 0.6972 - val_acc: 0.8941\n",
"Epoch 49/200\n",
"390/390 [==============================] - 14s 37ms/step - loss: 0.6945 - acc: 0.9231 - val_loss: 0.6727 - val_acc: 0.9016\n",
"Epoch 50/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.6955 - acc: 0.9245 - val_loss: 0.6730 - val_acc: 0.9003\n",
"Epoch 51/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.6889 - acc: 0.9259 - val_loss: 0.6593 - val_acc: 0.9082\n",
"Epoch 52/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.6918 - acc: 0.9255 - val_loss: 0.6583 - val_acc: 0.9107\n",
"Epoch 53/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.6943 - acc: 0.9257 - val_loss: 0.7045 - val_acc: 0.8884\n",
"Epoch 54/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.6799 - acc: 0.9289 - val_loss: 0.6565 - val_acc: 0.9077\n",
"Epoch 55/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.6816 - acc: 0.9274 - val_loss: 0.6747 - val_acc: 0.9009\n",
"Epoch 56/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.6805 - acc: 0.9293 - val_loss: 0.6663 - val_acc: 0.9065\n",
"Epoch 57/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.6816 - acc: 0.9289 - val_loss: 0.6177 - val_acc: 0.9188\n",
"Epoch 58/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.6719 - acc: 0.9334 - val_loss: 0.6741 - val_acc: 0.8992\n",
"Epoch 59/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.6790 - acc: 0.9290 - val_loss: 0.6330 - val_acc: 0.9142\n",
"Epoch 60/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.6644 - acc: 0.9324 - val_loss: 0.6612 - val_acc: 0.9039\n",
"Epoch 61/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.6583 - acc: 0.9352 - val_loss: 0.6782 - val_acc: 0.8961\n",
"Epoch 62/200\n",
"390/390 [==============================] - 14s 37ms/step - loss: 0.6629 - acc: 0.9345 - val_loss: 0.6852 - val_acc: 0.8956\n",
"Epoch 63/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.6535 - acc: 0.9385 - val_loss: 0.6434 - val_acc: 0.9064\n",
"Epoch 64/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.6489 - acc: 0.9383 - val_loss: 0.6613 - val_acc: 0.9018\n",
"Epoch 65/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.6524 - acc: 0.9382 - val_loss: 0.6434 - val_acc: 0.9105\n",
"Epoch 66/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.6555 - acc: 0.9366 - val_loss: 0.6206 - val_acc: 0.9154\n",
"Epoch 67/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.6448 - acc: 0.9408 - val_loss: 0.6126 - val_acc: 0.9218\n",
"Epoch 68/200\n",
"390/390 [==============================] - 14s 37ms/step - loss: 0.6411 - acc: 0.9408 - val_loss: 0.6611 - val_acc: 0.8996\n",
"Epoch 69/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.6482 - acc: 0.9402 - val_loss: 0.6022 - val_acc: 0.9227\n",
"Epoch 70/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.6411 - acc: 0.9409 - val_loss: 0.6534 - val_acc: 0.9042\n",
"Epoch 71/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.6356 - acc: 0.9417 - val_loss: 0.6634 - val_acc: 0.9031\n",
"Epoch 72/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.6295 - acc: 0.9452 - val_loss: 0.6048 - val_acc: 0.9185\n",
"Epoch 73/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.6256 - acc: 0.9438 - val_loss: 0.6029 - val_acc: 0.9213\n",
"Epoch 74/200\n",
"390/390 [==============================] - 14s 37ms/step - loss: 0.6218 - acc: 0.9460 - val_loss: 0.6143 - val_acc: 0.9168\n",
"Epoch 75/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.6229 - acc: 0.9460 - val_loss: 0.6086 - val_acc: 0.9157\n",
"Epoch 76/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.6161 - acc: 0.9470 - val_loss: 0.5977 - val_acc: 0.9209\n",
"Epoch 77/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.6139 - acc: 0.9478 - val_loss: 0.6095 - val_acc: 0.9182\n",
"Epoch 78/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.6013 - acc: 0.9519 - val_loss: 0.5941 - val_acc: 0.9244\n",
"Epoch 79/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.6115 - acc: 0.9489 - val_loss: 0.6114 - val_acc: 0.9182\n",
"Epoch 80/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.6064 - acc: 0.9505 - val_loss: 0.6103 - val_acc: 0.9156\n",
"Epoch 81/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.5910 - acc: 0.9522 - val_loss: 0.6061 - val_acc: 0.9144\n",
"Epoch 82/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.5946 - acc: 0.9528 - val_loss: 0.5685 - val_acc: 0.9280\n",
"Epoch 83/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.5896 - acc: 0.9528 - val_loss: 0.5758 - val_acc: 0.9258\n",
"Epoch 84/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.5892 - acc: 0.9531 - val_loss: 0.5823 - val_acc: 0.9230\n",
"Epoch 85/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.5830 - acc: 0.9543 - val_loss: 0.5589 - val_acc: 0.9307\n",
"Epoch 86/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.5824 - acc: 0.9554 - val_loss: 0.5523 - val_acc: 0.9313\n",
"Epoch 87/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.5822 - acc: 0.9550 - val_loss: 0.5597 - val_acc: 0.9324\n",
"Epoch 88/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.5762 - acc: 0.9566 - val_loss: 0.5687 - val_acc: 0.9271\n",
"Epoch 89/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.5695 - acc: 0.9578 - val_loss: 0.5667 - val_acc: 0.9244\n",
"Epoch 90/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.5673 - acc: 0.9583 - val_loss: 0.5791 - val_acc: 0.9215\n",
"Epoch 91/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.5647 - acc: 0.9594 - val_loss: 0.5493 - val_acc: 0.9317\n",
"Epoch 92/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.5552 - acc: 0.9599 - val_loss: 0.5440 - val_acc: 0.9326\n",
"Epoch 93/200\n",
"390/390 [==============================] - 14s 37ms/step - loss: 0.5516 - acc: 0.9613 - val_loss: 0.5564 - val_acc: 0.9306\n",
"Epoch 94/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.5485 - acc: 0.9637 - val_loss: 0.5464 - val_acc: 0.9299\n",
"Epoch 95/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.5462 - acc: 0.9616 - val_loss: 0.5607 - val_acc: 0.9240\n",
"Epoch 96/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.5389 - acc: 0.9654 - val_loss: 0.5282 - val_acc: 0.9376\n",
"Epoch 97/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.5404 - acc: 0.9630 - val_loss: 0.5458 - val_acc: 0.9269\n",
"Epoch 98/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.5337 - acc: 0.9654 - val_loss: 0.5494 - val_acc: 0.9273\n",
"Epoch 99/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.5303 - acc: 0.9667 - val_loss: 0.5442 - val_acc: 0.9270\n",
"Epoch 100/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.5223 - acc: 0.9682 - val_loss: 0.5359 - val_acc: 0.9324\n",
"Epoch 101/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.5209 - acc: 0.9691 - val_loss: 0.5611 - val_acc: 0.9199\n",
"Epoch 102/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.5155 - acc: 0.9681 - val_loss: 0.5159 - val_acc: 0.9363\n",
"Epoch 103/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.5142 - acc: 0.9689 - val_loss: 0.5052 - val_acc: 0.9389\n",
"Epoch 104/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.5034 - acc: 0.9719 - val_loss: 0.5001 - val_acc: 0.9377\n",
"Epoch 105/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.5000 - acc: 0.9725 - val_loss: 0.4997 - val_acc: 0.9395\n",
"Epoch 106/200\n",
"390/390 [==============================] - 14s 37ms/step - loss: 0.4989 - acc: 0.9733 - val_loss: 0.5081 - val_acc: 0.9359\n",
"Epoch 107/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.4942 - acc: 0.9729 - val_loss: 0.4925 - val_acc: 0.9415\n",
"Epoch 108/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.4881 - acc: 0.9749 - val_loss: 0.5057 - val_acc: 0.9374\n",
"Epoch 109/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.4842 - acc: 0.9751 - val_loss: 0.4836 - val_acc: 0.9419\n",
"Epoch 110/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.4763 - acc: 0.9765 - val_loss: 0.4764 - val_acc: 0.9436\n",
"Epoch 111/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.4746 - acc: 0.9770 - val_loss: 0.4758 - val_acc: 0.9452\n",
"Epoch 112/200\n",
"390/390 [==============================] - 15s 37ms/step - loss: 0.4675 - acc: 0.9785 - val_loss: 0.5142 - val_acc: 0.9280\n",
"Epoch 113/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.4700 - acc: 0.9772 - val_loss: 0.4730 - val_acc: 0.9422\n",
"Epoch 114/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.4585 - acc: 0.9791 - val_loss: 0.4674 - val_acc: 0.9418\n",
"Epoch 115/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.4570 - acc: 0.9800 - val_loss: 0.4667 - val_acc: 0.9440\n",
"Epoch 116/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.4493 - acc: 0.9815 - val_loss: 0.4604 - val_acc: 0.9442\n",
"Epoch 117/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.4471 - acc: 0.9804 - val_loss: 0.4552 - val_acc: 0.9456\n",
"Epoch 118/200\n",
"390/390 [==============================] - 14s 37ms/step - loss: 0.4423 - acc: 0.9825 - val_loss: 0.4562 - val_acc: 0.9460\n",
"Epoch 119/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.4361 - acc: 0.9832 - val_loss: 0.4489 - val_acc: 0.9492\n",
"Epoch 120/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.4245 - acc: 0.9854 - val_loss: 0.4418 - val_acc: 0.9474\n",
"Epoch 121/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.4268 - acc: 0.9849 - val_loss: 0.4379 - val_acc: 0.9479\n",
"Epoch 122/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.4228 - acc: 0.9858 - val_loss: 0.4354 - val_acc: 0.9477\n",
"Epoch 123/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.4165 - acc: 0.9857 - val_loss: 0.4351 - val_acc: 0.9454\n",
"Epoch 124/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.4123 - acc: 0.9869 - val_loss: 0.4263 - val_acc: 0.9470\n",
"Epoch 125/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.4116 - acc: 0.9855 - val_loss: 0.4232 - val_acc: 0.9503\n",
"Epoch 126/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.4017 - acc: 0.9874 - val_loss: 0.4200 - val_acc: 0.9491\n",
"Epoch 127/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.3959 - acc: 0.9886 - val_loss: 0.4433 - val_acc: 0.9381\n",
"Epoch 128/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.3949 - acc: 0.9877 - val_loss: 0.4158 - val_acc: 0.9487\n",
"Epoch 129/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.3832 - acc: 0.9902 - val_loss: 0.3972 - val_acc: 0.9527\n",
"Epoch 130/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.3825 - acc: 0.9904 - val_loss: 0.4091 - val_acc: 0.9494\n",
"Epoch 131/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.3814 - acc: 0.9906 - val_loss: 0.4031 - val_acc: 0.9511\n",
"Epoch 132/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.3760 - acc: 0.9907 - val_loss: 0.3886 - val_acc: 0.9549\n",
"Epoch 133/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.3682 - acc: 0.9920 - val_loss: 0.4073 - val_acc: 0.9457\n",
"Epoch 134/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.3642 - acc: 0.9925 - val_loss: 0.3830 - val_acc: 0.9550\n",
"Epoch 135/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.3556 - acc: 0.9938 - val_loss: 0.3860 - val_acc: 0.9525\n",
"Epoch 136/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.3555 - acc: 0.9935 - val_loss: 0.3761 - val_acc: 0.9543\n",
"Epoch 137/200\n",
"390/390 [==============================] - 14s 37ms/step - loss: 0.3476 - acc: 0.9942 - val_loss: 0.3777 - val_acc: 0.9563\n",
"Epoch 138/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.3456 - acc: 0.9945 - val_loss: 0.3744 - val_acc: 0.9557\n",
"Epoch 139/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.3402 - acc: 0.9948 - val_loss: 0.3707 - val_acc: 0.9547\n",
"Epoch 140/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.3314 - acc: 0.9958 - val_loss: 0.3670 - val_acc: 0.9552\n",
"Epoch 141/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.3299 - acc: 0.9954 - val_loss: 0.3611 - val_acc: 0.9568\n",
"Epoch 142/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.3235 - acc: 0.9965 - val_loss: 0.3581 - val_acc: 0.9554\n",
"Epoch 143/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.3194 - acc: 0.9965 - val_loss: 0.3513 - val_acc: 0.9583\n",
"Epoch 144/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.3159 - acc: 0.9965 - val_loss: 0.3450 - val_acc: 0.9596\n",
"Epoch 145/200\n",
"390/390 [==============================] - 14s 37ms/step - loss: 0.3134 - acc: 0.9973 - val_loss: 0.3431 - val_acc: 0.9595\n",
"Epoch 146/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.3067 - acc: 0.9972 - val_loss: 0.3481 - val_acc: 0.9566\n",
"Epoch 147/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.3035 - acc: 0.9973 - val_loss: 0.3347 - val_acc: 0.9616\n",
"Epoch 148/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.2963 - acc: 0.9973 - val_loss: 0.3325 - val_acc: 0.9576\n",
"Epoch 149/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.2960 - acc: 0.9978 - val_loss: 0.3270 - val_acc: 0.9605\n",
"Epoch 150/200\n",
"390/390 [==============================] - 14s 37ms/step - loss: 0.2884 - acc: 0.9985 - val_loss: 0.3239 - val_acc: 0.9610\n",
"Epoch 151/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.2863 - acc: 0.9984 - val_loss: 0.3179 - val_acc: 0.9611\n",
"Epoch 152/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.2802 - acc: 0.9988 - val_loss: 0.3153 - val_acc: 0.9623\n",
"Epoch 153/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.2741 - acc: 0.9988 - val_loss: 0.3157 - val_acc: 0.9600\n",
"Epoch 154/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.2727 - acc: 0.9988 - val_loss: 0.3112 - val_acc: 0.9630\n",
"Epoch 155/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.2674 - acc: 0.9988 - val_loss: 0.3116 - val_acc: 0.9621\n",
"Epoch 156/200\n",
"390/390 [==============================] - 14s 37ms/step - loss: 0.2640 - acc: 0.9991 - val_loss: 0.3077 - val_acc: 0.9613\n",
"Epoch 157/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.2603 - acc: 0.9992 - val_loss: 0.3040 - val_acc: 0.9624\n",
"Epoch 158/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.2573 - acc: 0.9992 - val_loss: 0.2984 - val_acc: 0.9633\n",
"Epoch 159/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.2506 - acc: 0.9994 - val_loss: 0.2942 - val_acc: 0.9631\n",
"Epoch 160/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.2450 - acc: 0.9995 - val_loss: 0.2868 - val_acc: 0.9658\n",
"Epoch 161/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.2423 - acc: 0.9994 - val_loss: 0.2904 - val_acc: 0.9622\n",
"Epoch 162/200\n",
"390/390 [==============================] - 14s 37ms/step - loss: 0.2407 - acc: 0.9994 - val_loss: 0.2897 - val_acc: 0.9629\n",
"Epoch 163/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.2349 - acc: 0.9994 - val_loss: 0.2826 - val_acc: 0.9662\n",
"Epoch 164/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.2317 - acc: 0.9995 - val_loss: 0.2826 - val_acc: 0.9649\n",
"Epoch 165/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.2289 - acc: 0.9996 - val_loss: 0.2765 - val_acc: 0.9685\n",
"Epoch 166/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.2261 - acc: 0.9997 - val_loss: 0.2788 - val_acc: 0.9646\n",
"Epoch 167/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.2213 - acc: 0.9995 - val_loss: 0.2718 - val_acc: 0.9644\n",
"Epoch 168/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.2172 - acc: 0.9996 - val_loss: 0.2666 - val_acc: 0.9665\n",
"Epoch 169/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.2133 - acc: 0.9999 - val_loss: 0.2662 - val_acc: 0.9669\n",
"Epoch 170/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.2109 - acc: 0.9995 - val_loss: 0.2616 - val_acc: 0.9674\n",
"Epoch 171/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.2077 - acc: 0.9998 - val_loss: 0.2604 - val_acc: 0.9669\n",
"Epoch 172/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.2037 - acc: 0.9999 - val_loss: 0.2654 - val_acc: 0.9657\n",
"Epoch 173/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.2010 - acc: 0.9998 - val_loss: 0.2559 - val_acc: 0.9684\n",
"Epoch 174/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.1994 - acc: 0.9999 - val_loss: 0.2565 - val_acc: 0.9689\n",
"Epoch 175/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.1962 - acc: 0.9998 - val_loss: 0.2538 - val_acc: 0.9687\n",
"Epoch 176/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.1931 - acc: 0.9998 - val_loss: 0.2535 - val_acc: 0.9690\n",
"Epoch 177/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.1905 - acc: 0.9999 - val_loss: 0.2477 - val_acc: 0.9682\n",
"Epoch 178/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.1884 - acc: 0.9999 - val_loss: 0.2520 - val_acc: 0.9682\n",
"Epoch 179/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.1856 - acc: 0.9998 - val_loss: 0.2439 - val_acc: 0.9695\n",
"Epoch 180/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.1831 - acc: 0.9999 - val_loss: 0.2442 - val_acc: 0.9685\n",
"Epoch 181/200\n",
"390/390 [==============================] - 15s 38ms/step - loss: 0.1809 - acc: 0.9998 - val_loss: 0.2432 - val_acc: 0.9682\n",
"Epoch 182/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.1787 - acc: 0.9999 - val_loss: 0.2411 - val_acc: 0.9698\n",
"Epoch 183/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.1776 - acc: 0.9998 - val_loss: 0.2395 - val_acc: 0.9706\n",
"Epoch 184/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.1734 - acc: 0.9999 - val_loss: 0.2417 - val_acc: 0.9697\n",
"Epoch 185/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.1733 - acc: 1.0000 - val_loss: 0.2389 - val_acc: 0.9698\n",
"Epoch 186/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.1707 - acc: 1.0000 - val_loss: 0.2371 - val_acc: 0.9687\n",
"Epoch 187/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.1692 - acc: 0.9999 - val_loss: 0.2368 - val_acc: 0.9700\n",
"Epoch 188/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.1680 - acc: 0.9998 - val_loss: 0.2373 - val_acc: 0.9686\n",
"Epoch 189/200\n",
"390/390 [==============================] - 14s 37ms/step - loss: 0.1663 - acc: 0.9999 - val_loss: 0.2337 - val_acc: 0.9699\n",
"Epoch 190/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.1649 - acc: 0.9999 - val_loss: 0.2330 - val_acc: 0.9699\n",
"Epoch 191/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.1630 - acc: 0.9999 - val_loss: 0.2327 - val_acc: 0.9696\n",
"Epoch 192/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.1625 - acc: 0.9999 - val_loss: 0.2326 - val_acc: 0.9704\n",
"Epoch 193/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.1621 - acc: 0.9999 - val_loss: 0.2308 - val_acc: 0.9704\n",
"Epoch 194/200\n",
"390/390 [==============================] - 14s 37ms/step - loss: 0.1606 - acc: 1.0000 - val_loss: 0.2303 - val_acc: 0.9706\n",
"Epoch 195/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.1595 - acc: 1.0000 - val_loss: 0.2300 - val_acc: 0.9704\n",
"Epoch 196/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.1577 - acc: 1.0000 - val_loss: 0.2296 - val_acc: 0.9704\n",
"Epoch 197/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.1574 - acc: 1.0000 - val_loss: 0.2293 - val_acc: 0.9712\n",
"Epoch 198/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.1557 - acc: 1.0000 - val_loss: 0.2313 - val_acc: 0.9698\n",
"Epoch 199/200\n",
"390/390 [==============================] - 14s 36ms/step - loss: 0.1557 - acc: 0.9999 - val_loss: 0.2297 - val_acc: 0.9696\n",
"Epoch 200/200\n",
"390/390 [==============================] - 14s 37ms/step - loss: 0.1544 - acc: 0.9999 - val_loss: 0.2300 - val_acc: 0.9707\n",
"End: 2021/02/27 01:04:00\n",
"Time: 2961.8102865219116\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"image/png": "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IiIiEjixkYiqIioiIiIiIhIYMZGI5qkiKiIiIiIiEhgxkYiqIioiIiIiIhIcwU5E1axIREREREQkcIKdiKpZkYiIiIiISODERiKqiqiIiIiIiEhgBDsRrVwZBgwgq1q1aEciIiIiIiIixRTsRLR9e5g6ldTWraMdiYiIiIiIiBRTsBNRERERERERCRwloiIiIiIiIhJRSkRFREREREQkopSIioiIiIiISEQpERUREREREZGIUiIqIiIiIiIiEaVEVERERERERCJKiaiIiIiIiIhElBJRERERERERiSgloiIiImWYc26gc+5H59wy59zNhTxf3jn3auj5r51zTcOeuyW0/0fn3DGRjFtERGRvlIiKiIiUUc65eOBJYBDQFjjdOde2wGEXAJu99y2Bh4HRode2BYYB7YCBwJjQ+URERKJOiaiIiEjZ1RVY5r1f7r3PAiYCgwscMxh4IXT/DeAo55wL7Z/ovc/03v8CLAudT0REJOqUiIqIiJRdDYBVYY9Xh/YVeoz3PgfYCtQs5mtFRESiIiFa//C8efP+cM79WkKnqwX8UULniiTFHXlBjV1xR15QY9+f425SEoHsb5xzI4ARoYepzrkfS+jU+/N3MRqCGjcEN3bFHXlBjX1/jrvIa3PUElHvfe2SOpdzbq73vktJnS9SFHfkBTV2xR15QY1dccecNUCjsMcNQ/sKO2a1cy4BqApsLOZr8d6PA8aVYMxAcP+bKu7IC2rsijvyghq74i6chuaKiIiUXXOAVs65Zs65cljzockFjpkMnBO6fwow3XvvQ/uHhbrqNgNaAbMjFLeIiMheRa0iKiIiInvnvc9xzl0BTAXigfHe+8XOuZHAXO/9ZOA54EXn3DJgE5asEjruNWAJkANc7r3PjcobERERKSBWEtESH1IUIYo78oIau+KOvKDGrrhjjPd+CjClwL47wu5nAEOLeO29wL2lGmDRgvrfVHFHXlBjV9yRF9TYFXchnI3eEREREREREYkMzREVERERERGRiAp0IuqcG+ic+9E5t8w5d3O04ymKc66Rc+5T59wS59xi59zVof13OefWOOcWhG7HRjvWwjjnVjjnFoVinBvaV8M595Fz7qfQtnq04wznnDsw7HNd4Jzb5py7pqx+5s658c65Dc6578L2FfoZO/NY6Hu/0DnXqYzFfb9z7odQbG8556qF9jd1zqWHffZPl7G4i/xuOOduCX3ePzrnjolO1DtjKSz2V8PiXuGcWxDaX5Y+86J+Dpb577n8Obo2R4auzaVP1+YyEXeZvzYH9bociie612bvfSBvWNOGn4HmQDngW6BttOMqItb6QKfQ/crAUqAtcBdwfbTjK0b8K4BaBfbdB9wcun8zMDrace7ju7IOW8eoTH7mwBFAJ+C7fX3GwLHAB4ADugNfl7G4BwAJofujw+JuGn5cGfy8C/1uhP5f/RYoDzQL/dyJL0uxF3j+QeCOMviZF/VzsMx/z3X7U/+ddW2OXPy6Npd+jLo2Rz/uMn9tDup1ORRPVK/NQa6IdgWWee+Xe++zgInA4CjHVCjv/Vrv/Teh+9uB74EG0Y3qbxsMvBC6/wJwYhRj2ZejgJ+9979GO5CieO8/w7pdhivqMx4MTPDmK6Cac65+ZCLdXWFxe++nee9zQg+/wtYuLFOK+LyLMhiY6L3P9N7/AizDfv5Exd5id8454FTgfxENqhj28nOwzH/P5U/RtTm6dG0uQbo2R1ZQr81BvS5D9K/NQU5EGwCrwh6vJgAXEOdcU+BQ4OvQritCpe3xZW0ITRgPTHPOzXPOjQjtq+u9Xxu6vw6oG53QimUYu/8ACMJnDkV/xkH67p+P/eUsXzPn3Hzn3AznXO9oBbUXhX03gvR59wbWe+9/CttX5j7zAj8HY+F7LrsE8r+brs1RoWtz9OjaHDmBuC5DdK7NQU5EA4I0GL4AAAL0SURBVMc5VwmYBFzjvd8GPAW0ADoCa7HSfVl0uPe+EzAIuNw5d0T4k95q9WWy/bKzBeBPAF4P7QrKZ76bsvwZF8U5dxu2duHLoV1rgcbe+0OB64BXnHNVohVfIQL53SjgdHb/xa7MfeaF/BzcKYjfcwk+XZsjT9fm6NG1OeLK/HUZondtDnIiugZoFPa4YWhfmeScS8T+A7/svX8TwHu/3nuf673PA54hisP99sZ7vya03QC8hcW5Pr8UH9puiF6EezUI+MZ7vx6C85mHFPUZl/nvvnPuXOD/gDNDP8AIDZ/ZGLo/D5vP0TpqQRawl+9Gmf+8AZxzCcBJwKv5+8raZ17Yz0EC/D2XQgXqv5uuzVGja3MU6NocWUG4LkN0r81BTkTnAK2cc81Cf1kbBkyOckyFCo0Pfw743nv/UNj+8DHVQ4DvCr422pxzFZ1zlfPvY5Pdv8M+63NCh50DvBOdCPdpt79EBeEzD1PUZzwZGB7qXNYd2Bo2fCLqnHMDgRuBE7z3aWH7azvn4kP3mwOtgOXRiXJPe/luTAaGOefKO+eaYXHPjnR8xdAf+MF7vzp/R1n6zIv6OUhAv+dSJF2bI0DX5qgK5M8sXZujokxfl0MxRPfa7MtAx6a/esM6Ny3F/ppwW7Tj2Uuch2Ml7YXAgtDtWOBFYFFo/2SgfrRjLST25lhXsm+BxfmfM1AT+AT4CfgYqBHtWAuJvSKwEagatq9MfubYBXktkI2Nt7+gqM8Y61T2ZOh7vwjoUsbiXobNH8j/rj8dOvbk0HdoAfANcHwZi7vI7wZwW+jz/hEYVNa+K6H9/wUuKXBsWfrMi/o5WOa/57r96f/WujaXfuy6NkcmVl2box93mb82B/W6HIonqtdmFzqpiIiIiIiISEQEeWiuiIiIiIiIBJASUREREREREYkoJaIiIiIiIiISUUpERUREREREJKKUiIqIiIiIiEhEKREVERERERGRiFIiKiIiIiIiIhGlRFREREREREQi6v8B/DDQjMDraaYAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 1152x432 with 2 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "7JRS4RuVXs2N"
},
"source": [
""
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment