diff --git a/_notebooks/2020-07-09-Resnet_gumma.ipynb b/_notebooks/2020-07-09-Resnet_gumma.ipynb new file mode 100644 index 0000000..3bc72d4 --- /dev/null +++ b/_notebooks/2020-07-09-Resnet_gumma.ipynb @@ -0,0 +1,693 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "ResnetKeras.ipynb", + "provenance": [], + "collapsed_sections": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "accelerator": "GPU" + }, + "cells": [ + { + "cell_type": "code", + "metadata": { + "id": "DTwaXPPfTPjp", + "colab_type": "code", + "colab": {} + }, + "source": [ + "import tensorflow as tf\n", + "import matplotlib.pyplot as plt\n", + "from tensorflow.keras import Input\n", + "from tensorflow.keras.models import Model\n", + "from tensorflow.keras.layers import *\n", + "from tensorflow.keras.datasets import cifar10\n", + "from tensorflow.keras.datasets import mnist\n", + "plt.style.use(\"ggplot\")" + ], + "execution_count": 1, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "Dh3KpkIjVRPu", + "colab_type": "code", + "colab": {} + }, + "source": [ + "def ResidualBlock(x, in_depth, out_depth, kernel_size=3):\n", + " strides = ((2, 2) if in_depth != out_depth else (1, 1))\n", + " out = Conv2D(filters=in_depth, kernel_size=kernel_size, padding=\"same\", activation=\"relu\")(x)\n", + " out = BatchNormalization()(out)\n", + " out = Conv2D(filters=out_depth, kernel_size=kernel_size, strides=strides, padding=\"same\", activation=\"relu\")(out)\n", + " out = BatchNormalization()(out)\n", + " shortcut = Conv2D(filters=out_depth, kernel_size=1, strides=strides, padding=\"same\")(x)\n", + " out = Add()([shortcut, out])\n", + " out = Activation(\"relu\")(out)\n", + " return out" + ], + "execution_count": 2, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "Mv6Y32CC55Rf", + "colab_type": "code", + "colab": {} + }, + "source": [ + "def BottleneckBlock(x, in_depth, out_depth):\n", + " out = Conv2D(filters=in_depth, kernel_size=1, padding=\"same\", activation=\"relu\")(x)\n", + " out = BatchNormalization()(out)\n", + " out = Conv2D(filters=in_depth, kernel_size=3, padding=\"same\", strides=(2, 2), activation=\"relu\")(out)\n", + " out = BatchNormalization()(out)\n", + " out = Conv2D(filters=out_depth, kernel_size=1, padding=\"same\", activation=\"relu\")(out)\n", + " out = BatchNormalization()(out)\n", + " shortcut = Conv2D(filters=out_depth, kernel_size=1, strides=(2, 2), padding=\"same\")(x)\n", + " out = Add()([shortcut, out])\n", + " out = Activation(\"relu\")(out)\n", + " return out" + ], + "execution_count": 9, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "_NFQhlkO9Wkb", + "colab_type": "code", + "colab": {} + }, + "source": [ + "def ResNet50(inputs, out_classes=10):\n", + " out = Conv2D(filters=64, kernel_size=7, padding=\"same\", strides=(2, 2))(inputs)\n", + " out = MaxPooling2D(pool_size=(3, 3), strides=(2, 2))(out)\n", + "\n", + " out = BottleneckBlock(out, 64, 256)\n", + " out = BottleneckBlock(out, 64, 256)\n", + " out = BottleneckBlock(out, 64, 256)\n", + "\n", + " out = BottleneckBlock(out, 128, 512)\n", + " out = BottleneckBlock(out, 128, 512)\n", + " out = BottleneckBlock(out, 128, 512)\n", + " out = BottleneckBlock(out, 128, 512)\n", + "\n", + " out = BottleneckBlock(out, 256, 1024)\n", + " out = BottleneckBlock(out, 256, 1024)\n", + " out = BottleneckBlock(out, 256, 1024)\n", + " out = BottleneckBlock(out, 256, 1024)\n", + " out = BottleneckBlock(out, 256, 1024)\n", + " out = BottleneckBlock(out, 256, 1024)\n", + "\n", + " out = BottleneckBlock(out, 512, 2048)\n", + " out = BottleneckBlock(out, 512, 2048)\n", + " out = BottleneckBlock(out, 512, 2048) \n", + " out = GlobalAveragePooling2D()(out)\n", + "\n", + " out = Flatten()(out)\n", + " out = Dropout(0.5)(out)\n", + " out = Dense(out_classes, activation=\"softmax\")(out)\n", + " return out" + ], + "execution_count": 10, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "mzQy7hH1ZPUv", + "colab_type": "code", + "colab": {} + }, + "source": [ + "def ResNet34(inputs, out_classes=10):\n", + " out = Conv2D(filters=64, kernel_size=7, padding=\"same\", strides=(2, 2))(inputs)\n", + " out = MaxPooling2D(pool_size=(3, 3), strides=(2, 2))(out)\n", + "\n", + " out = ResidualBlock(out, 64, 64)\n", + " out = ResidualBlock(out, 64, 64)\n", + " out = ResidualBlock(out, 64, 128)\n", + "\n", + " out = ResidualBlock(out, 128, 128)\n", + " out = ResidualBlock(out, 128, 128)\n", + " out = ResidualBlock(out, 128, 128)\n", + " out = ResidualBlock(out, 128, 256)\n", + "\n", + " out = ResidualBlock(out, 256, 256)\n", + " out = ResidualBlock(out, 256, 256)\n", + " out = ResidualBlock(out, 256, 256)\n", + " out = ResidualBlock(out, 256, 256)\n", + " out = ResidualBlock(out, 256, 256)\n", + " out = ResidualBlock(out, 256, 512)\n", + "\n", + " out = ResidualBlock(out, 512, 512)\n", + " out = ResidualBlock(out, 512, 512)\n", + " out = ResidualBlock(out, 512, 512)\n", + " out = GlobalAveragePooling2D()(out)\n", + " \n", + " out = Flatten()(out)\n", + " out = Dropout(0.5)(out)\n", + " out = Dense(out_classes, activation=\"softmax\")(out)\n", + " return out" + ], + "execution_count": 5, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "tg9tf05_ZG35", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 52 + }, + "outputId": "10e4ece7-fee6-4811-89d3-4d29eb66c011" + }, + "source": [ + "EPOCHS, BATCH_SIZE = 150, 256\n", + "(x_train, y_train), (x_test, y_test) = cifar10.load_data()" + ], + "execution_count": 6, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz\n", + "170500096/170498071 [==============================] - 13s 0us/step\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "uLHpwLS_o0tI", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "outputId": "bcf8026a-67c2-4577-ff62-48bc7081daf7" + }, + "source": [ + "inputs = Input(shape=(32, 32, 3))\n", + "#outputs = ResNet34(inputs)\n", + "outputs = ResNet50(inputs)\n", + "resnet = Model(inputs=inputs, outputs=outputs)\n", + "resnet.summary()" + ], + "execution_count": 11, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Model: \"model_1\"\n", + "__________________________________________________________________________________________________\n", + "Layer (type) Output Shape Param # Connected to \n", + "==================================================================================================\n", + "input_2 (InputLayer) [(None, 32, 32, 3)] 0 \n", + "__________________________________________________________________________________________________\n", + "conv2d_49 (Conv2D) (None, 16, 16, 64) 9472 input_2[0][0] \n", + "__________________________________________________________________________________________________\n", + "max_pooling2d_1 (MaxPooling2D) (None, 7, 7, 64) 0 conv2d_49[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_50 (Conv2D) (None, 7, 7, 64) 4160 max_pooling2d_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_32 (BatchNo (None, 7, 7, 64) 256 conv2d_50[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_51 (Conv2D) (None, 4, 4, 64) 36928 batch_normalization_32[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_33 (BatchNo (None, 4, 4, 64) 256 conv2d_51[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_52 (Conv2D) (None, 4, 4, 256) 16640 batch_normalization_33[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_53 (Conv2D) (None, 4, 4, 256) 16640 max_pooling2d_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_34 (BatchNo (None, 4, 4, 256) 1024 conv2d_52[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_16 (Add) (None, 4, 4, 256) 0 conv2d_53[0][0] \n", + " batch_normalization_34[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_16 (Activation) (None, 4, 4, 256) 0 add_16[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_54 (Conv2D) (None, 4, 4, 64) 16448 activation_16[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_35 (BatchNo (None, 4, 4, 64) 256 conv2d_54[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_55 (Conv2D) (None, 2, 2, 64) 36928 batch_normalization_35[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_36 (BatchNo (None, 2, 2, 64) 256 conv2d_55[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_56 (Conv2D) (None, 2, 2, 256) 16640 batch_normalization_36[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_57 (Conv2D) (None, 2, 2, 256) 65792 activation_16[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_37 (BatchNo (None, 2, 2, 256) 1024 conv2d_56[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_17 (Add) (None, 2, 2, 256) 0 conv2d_57[0][0] \n", + " batch_normalization_37[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_17 (Activation) (None, 2, 2, 256) 0 add_17[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_58 (Conv2D) (None, 2, 2, 64) 16448 activation_17[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_38 (BatchNo (None, 2, 2, 64) 256 conv2d_58[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_59 (Conv2D) (None, 1, 1, 64) 36928 batch_normalization_38[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_39 (BatchNo (None, 1, 1, 64) 256 conv2d_59[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_60 (Conv2D) (None, 1, 1, 256) 16640 batch_normalization_39[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_61 (Conv2D) (None, 1, 1, 256) 65792 activation_17[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_40 (BatchNo (None, 1, 1, 256) 1024 conv2d_60[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_18 (Add) (None, 1, 1, 256) 0 conv2d_61[0][0] \n", + " batch_normalization_40[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_18 (Activation) (None, 1, 1, 256) 0 add_18[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_62 (Conv2D) (None, 1, 1, 128) 32896 activation_18[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_41 (BatchNo (None, 1, 1, 128) 512 conv2d_62[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_63 (Conv2D) (None, 1, 1, 128) 147584 batch_normalization_41[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_42 (BatchNo (None, 1, 1, 128) 512 conv2d_63[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_64 (Conv2D) (None, 1, 1, 512) 66048 batch_normalization_42[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_65 (Conv2D) (None, 1, 1, 512) 131584 activation_18[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_43 (BatchNo (None, 1, 1, 512) 2048 conv2d_64[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_19 (Add) (None, 1, 1, 512) 0 conv2d_65[0][0] \n", + " batch_normalization_43[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_19 (Activation) (None, 1, 1, 512) 0 add_19[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_66 (Conv2D) (None, 1, 1, 128) 65664 activation_19[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_44 (BatchNo (None, 1, 1, 128) 512 conv2d_66[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_67 (Conv2D) (None, 1, 1, 128) 147584 batch_normalization_44[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_45 (BatchNo (None, 1, 1, 128) 512 conv2d_67[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_68 (Conv2D) (None, 1, 1, 512) 66048 batch_normalization_45[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_69 (Conv2D) (None, 1, 1, 512) 262656 activation_19[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_46 (BatchNo (None, 1, 1, 512) 2048 conv2d_68[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_20 (Add) (None, 1, 1, 512) 0 conv2d_69[0][0] \n", + " batch_normalization_46[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_20 (Activation) (None, 1, 1, 512) 0 add_20[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_70 (Conv2D) (None, 1, 1, 128) 65664 activation_20[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_47 (BatchNo (None, 1, 1, 128) 512 conv2d_70[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_71 (Conv2D) (None, 1, 1, 128) 147584 batch_normalization_47[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_48 (BatchNo (None, 1, 1, 128) 512 conv2d_71[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_72 (Conv2D) (None, 1, 1, 512) 66048 batch_normalization_48[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_73 (Conv2D) (None, 1, 1, 512) 262656 activation_20[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_49 (BatchNo (None, 1, 1, 512) 2048 conv2d_72[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_21 (Add) (None, 1, 1, 512) 0 conv2d_73[0][0] \n", + " batch_normalization_49[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_21 (Activation) (None, 1, 1, 512) 0 add_21[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_74 (Conv2D) (None, 1, 1, 128) 65664 activation_21[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_50 (BatchNo (None, 1, 1, 128) 512 conv2d_74[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_75 (Conv2D) (None, 1, 1, 128) 147584 batch_normalization_50[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_51 (BatchNo (None, 1, 1, 128) 512 conv2d_75[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_76 (Conv2D) (None, 1, 1, 512) 66048 batch_normalization_51[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_77 (Conv2D) (None, 1, 1, 512) 262656 activation_21[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_52 (BatchNo (None, 1, 1, 512) 2048 conv2d_76[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_22 (Add) (None, 1, 1, 512) 0 conv2d_77[0][0] \n", + " batch_normalization_52[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_22 (Activation) (None, 1, 1, 512) 0 add_22[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_78 (Conv2D) (None, 1, 1, 256) 131328 activation_22[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_53 (BatchNo (None, 1, 1, 256) 1024 conv2d_78[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_79 (Conv2D) (None, 1, 1, 256) 590080 batch_normalization_53[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_54 (BatchNo (None, 1, 1, 256) 1024 conv2d_79[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_80 (Conv2D) (None, 1, 1, 1024) 263168 batch_normalization_54[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_81 (Conv2D) (None, 1, 1, 1024) 525312 activation_22[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_55 (BatchNo (None, 1, 1, 1024) 4096 conv2d_80[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_23 (Add) (None, 1, 1, 1024) 0 conv2d_81[0][0] \n", + " batch_normalization_55[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_23 (Activation) (None, 1, 1, 1024) 0 add_23[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_82 (Conv2D) (None, 1, 1, 256) 262400 activation_23[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_56 (BatchNo (None, 1, 1, 256) 1024 conv2d_82[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_83 (Conv2D) (None, 1, 1, 256) 590080 batch_normalization_56[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_57 (BatchNo (None, 1, 1, 256) 1024 conv2d_83[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_84 (Conv2D) (None, 1, 1, 1024) 263168 batch_normalization_57[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_85 (Conv2D) (None, 1, 1, 1024) 1049600 activation_23[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_58 (BatchNo (None, 1, 1, 1024) 4096 conv2d_84[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_24 (Add) (None, 1, 1, 1024) 0 conv2d_85[0][0] \n", + " batch_normalization_58[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_24 (Activation) (None, 1, 1, 1024) 0 add_24[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_86 (Conv2D) (None, 1, 1, 256) 262400 activation_24[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_59 (BatchNo (None, 1, 1, 256) 1024 conv2d_86[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_87 (Conv2D) (None, 1, 1, 256) 590080 batch_normalization_59[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_60 (BatchNo (None, 1, 1, 256) 1024 conv2d_87[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_88 (Conv2D) (None, 1, 1, 1024) 263168 batch_normalization_60[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_89 (Conv2D) (None, 1, 1, 1024) 1049600 activation_24[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_61 (BatchNo (None, 1, 1, 1024) 4096 conv2d_88[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_25 (Add) (None, 1, 1, 1024) 0 conv2d_89[0][0] \n", + " batch_normalization_61[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_25 (Activation) (None, 1, 1, 1024) 0 add_25[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_90 (Conv2D) (None, 1, 1, 256) 262400 activation_25[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_62 (BatchNo (None, 1, 1, 256) 1024 conv2d_90[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_91 (Conv2D) (None, 1, 1, 256) 590080 batch_normalization_62[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_63 (BatchNo (None, 1, 1, 256) 1024 conv2d_91[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_92 (Conv2D) (None, 1, 1, 1024) 263168 batch_normalization_63[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_93 (Conv2D) (None, 1, 1, 1024) 1049600 activation_25[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_64 (BatchNo (None, 1, 1, 1024) 4096 conv2d_92[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_26 (Add) (None, 1, 1, 1024) 0 conv2d_93[0][0] \n", + " batch_normalization_64[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_26 (Activation) (None, 1, 1, 1024) 0 add_26[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_94 (Conv2D) (None, 1, 1, 256) 262400 activation_26[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_65 (BatchNo (None, 1, 1, 256) 1024 conv2d_94[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_95 (Conv2D) (None, 1, 1, 256) 590080 batch_normalization_65[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_66 (BatchNo (None, 1, 1, 256) 1024 conv2d_95[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_96 (Conv2D) (None, 1, 1, 1024) 263168 batch_normalization_66[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_97 (Conv2D) (None, 1, 1, 1024) 1049600 activation_26[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_67 (BatchNo (None, 1, 1, 1024) 4096 conv2d_96[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_27 (Add) (None, 1, 1, 1024) 0 conv2d_97[0][0] \n", + " batch_normalization_67[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_27 (Activation) (None, 1, 1, 1024) 0 add_27[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_98 (Conv2D) (None, 1, 1, 256) 262400 activation_27[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_68 (BatchNo (None, 1, 1, 256) 1024 conv2d_98[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_99 (Conv2D) (None, 1, 1, 256) 590080 batch_normalization_68[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_69 (BatchNo (None, 1, 1, 256) 1024 conv2d_99[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_100 (Conv2D) (None, 1, 1, 1024) 263168 batch_normalization_69[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_101 (Conv2D) (None, 1, 1, 1024) 1049600 activation_27[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_70 (BatchNo (None, 1, 1, 1024) 4096 conv2d_100[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_28 (Add) (None, 1, 1, 1024) 0 conv2d_101[0][0] \n", + " batch_normalization_70[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_28 (Activation) (None, 1, 1, 1024) 0 add_28[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_102 (Conv2D) (None, 1, 1, 512) 524800 activation_28[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_71 (BatchNo (None, 1, 1, 512) 2048 conv2d_102[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_103 (Conv2D) (None, 1, 1, 512) 2359808 batch_normalization_71[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_72 (BatchNo (None, 1, 1, 512) 2048 conv2d_103[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_104 (Conv2D) (None, 1, 1, 2048) 1050624 batch_normalization_72[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_105 (Conv2D) (None, 1, 1, 2048) 2099200 activation_28[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_73 (BatchNo (None, 1, 1, 2048) 8192 conv2d_104[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_29 (Add) (None, 1, 1, 2048) 0 conv2d_105[0][0] \n", + " batch_normalization_73[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_29 (Activation) (None, 1, 1, 2048) 0 add_29[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_106 (Conv2D) (None, 1, 1, 512) 1049088 activation_29[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_74 (BatchNo (None, 1, 1, 512) 2048 conv2d_106[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_107 (Conv2D) (None, 1, 1, 512) 2359808 batch_normalization_74[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_75 (BatchNo (None, 1, 1, 512) 2048 conv2d_107[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_108 (Conv2D) (None, 1, 1, 2048) 1050624 batch_normalization_75[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_109 (Conv2D) (None, 1, 1, 2048) 4196352 activation_29[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_76 (BatchNo (None, 1, 1, 2048) 8192 conv2d_108[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_30 (Add) (None, 1, 1, 2048) 0 conv2d_109[0][0] \n", + " batch_normalization_76[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_30 (Activation) (None, 1, 1, 2048) 0 add_30[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_110 (Conv2D) (None, 1, 1, 512) 1049088 activation_30[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_77 (BatchNo (None, 1, 1, 512) 2048 conv2d_110[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_111 (Conv2D) (None, 1, 1, 512) 2359808 batch_normalization_77[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_78 (BatchNo (None, 1, 1, 512) 2048 conv2d_111[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_112 (Conv2D) (None, 1, 1, 2048) 1050624 batch_normalization_78[0][0] \n", + "__________________________________________________________________________________________________\n", + "conv2d_113 (Conv2D) (None, 1, 1, 2048) 4196352 activation_30[0][0] \n", + "__________________________________________________________________________________________________\n", + "batch_normalization_79 (BatchNo (None, 1, 1, 2048) 8192 conv2d_112[0][0] \n", + "__________________________________________________________________________________________________\n", + "add_31 (Add) (None, 1, 1, 2048) 0 conv2d_113[0][0] \n", + " batch_normalization_79[0][0] \n", + "__________________________________________________________________________________________________\n", + "activation_31 (Activation) (None, 1, 1, 2048) 0 add_31[0][0] \n", + "__________________________________________________________________________________________________\n", + "global_average_pooling2d_1 (Glo (None, 2048) 0 activation_31[0][0] \n", + "__________________________________________________________________________________________________\n", + "flatten_1 (Flatten) (None, 2048) 0 global_average_pooling2d_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "dropout_1 (Dropout) (None, 2048) 0 flatten_1[0][0] \n", + "__________________________________________________________________________________________________\n", + "dense_1 (Dense) (None, 10) 20490 dropout_1[0][0] \n", + "==================================================================================================\n", + "Total params: 38,152,842\n", + "Trainable params: 38,107,530\n", + "Non-trainable params: 45,312\n", + "__________________________________________________________________________________________________\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Mw9tE3AF_L-D", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 720 + }, + "outputId": "cf07c5d1-9141-441a-b18a-400b096d469f" + }, + "source": [ + "resnet.compile(optimizer=\"adam\", loss=\"sparse_categorical_crossentropy\", metrics=[\"accuracy\"])\n", + "hist = resnet.fit(x_train, y_train, epochs=EPOCHS, batch_size=BATCH_SIZE, shuffle=True)" + ], + "execution_count": 12, + "outputs": [ + { + "output_type": "stream", + "text": [ + "Epoch 1/150\n", + "196/196 [==============================] - 51s 263ms/step - loss: 3.1830 - accuracy: 0.1316\n", + "Epoch 2/150\n", + "196/196 [==============================] - 48s 245ms/step - loss: 2.2433 - accuracy: 0.1488\n", + "Epoch 3/150\n", + "196/196 [==============================] - 49s 250ms/step - loss: 2.2406 - accuracy: 0.1504\n", + "Epoch 4/150\n", + "196/196 [==============================] - 48s 246ms/step - loss: 2.2367 - accuracy: 0.1508\n", + "Epoch 5/150\n", + "196/196 [==============================] - 49s 249ms/step - loss: 2.2032 - accuracy: 0.1622\n", + "Epoch 6/150\n", + "196/196 [==============================] - 49s 247ms/step - loss: 2.1442 - accuracy: 0.1803\n", + "Epoch 7/150\n", + "196/196 [==============================] - 49s 249ms/step - loss: 2.1199 - accuracy: 0.1909\n", + "Epoch 8/150\n", + "196/196 [==============================] - 49s 248ms/step - loss: 2.1119 - accuracy: 0.1965\n", + "Epoch 9/150\n", + "196/196 [==============================] - 49s 248ms/step - loss: 2.0970 - accuracy: 0.2002\n", + "Epoch 10/150\n", + "196/196 [==============================] - 49s 249ms/step - loss: 2.0810 - accuracy: 0.2069\n", + "Epoch 11/150\n", + "112/196 [================>.............] - ETA: 20s - loss: 2.0759 - accuracy: 0.2073" + ], + "name": "stdout" + }, + { + "output_type": "error", + "ename": "KeyboardInterrupt", + "evalue": "ignored", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mresnet\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcompile\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0moptimizer\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"adam\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mloss\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"sparse_categorical_crossentropy\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmetrics\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"accuracy\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mhist\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mresnet\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mepochs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mEPOCHS\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbatch_size\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mBATCH_SIZE\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mshuffle\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py\u001b[0m in \u001b[0;36m_method_wrapper\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 64\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_method_wrapper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 65\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_in_multi_worker_mode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;31m# pylint: disable=protected-access\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 66\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mmethod\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 67\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[0;31m# Running inside `run_distribute_coordinator` already.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_batch_size, validation_freq, max_queue_size, workers, use_multiprocessing)\u001b[0m\n\u001b[1;32m 853\u001b[0m \u001b[0mcontext\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0masync_wait\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 854\u001b[0m \u001b[0mlogs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtmp_logs\u001b[0m \u001b[0;31m# No error, now safe to assign to logs.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 855\u001b[0;31m \u001b[0mcallbacks\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mon_train_batch_end\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstep\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlogs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 856\u001b[0m \u001b[0mepoch_logs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcopy\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcopy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlogs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 857\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/callbacks.py\u001b[0m in \u001b[0;36mon_train_batch_end\u001b[0;34m(self, batch, logs)\u001b[0m\n\u001b[1;32m 387\u001b[0m \"\"\"\n\u001b[1;32m 388\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_should_call_train_batch_hooks\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 389\u001b[0;31m \u001b[0mlogs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_process_logs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlogs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 390\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_call_batch_hook\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mModeKeys\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTRAIN\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'end'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbatch\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlogs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlogs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 391\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/callbacks.py\u001b[0m in \u001b[0;36m_process_logs\u001b[0;34m(self, logs)\u001b[0m\n\u001b[1;32m 263\u001b[0m \u001b[0;34m\"\"\"Turns tensors into numpy arrays or Python scalars.\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 264\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mlogs\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 265\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mtf_utils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto_numpy_or_python_type\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlogs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 266\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 267\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/utils/tf_utils.py\u001b[0m in \u001b[0;36mto_numpy_or_python_type\u001b[0;34m(tensors)\u001b[0m\n\u001b[1;32m 521\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mt\u001b[0m \u001b[0;31m# Don't turn ragged or sparse tensors to NumPy.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 522\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 523\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mnest\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmap_structure\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0m_to_single_numpy_or_python_type\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtensors\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 524\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/tensorflow/python/util/nest.py\u001b[0m in \u001b[0;36mmap_structure\u001b[0;34m(func, *structure, **kwargs)\u001b[0m\n\u001b[1;32m 615\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 616\u001b[0m return pack_sequence_as(\n\u001b[0;32m--> 617\u001b[0;31m \u001b[0mstructure\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mx\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mentries\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 618\u001b[0m expand_composites=expand_composites)\n\u001b[1;32m 619\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/tensorflow/python/util/nest.py\u001b[0m in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 615\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 616\u001b[0m return pack_sequence_as(\n\u001b[0;32m--> 617\u001b[0;31m \u001b[0mstructure\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mx\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mentries\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 618\u001b[0m expand_composites=expand_composites)\n\u001b[1;32m 619\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/utils/tf_utils.py\u001b[0m in \u001b[0;36m_to_single_numpy_or_python_type\u001b[0;34m(t)\u001b[0m\n\u001b[1;32m 517\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_to_single_numpy_or_python_type\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 518\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTensor\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 519\u001b[0;31m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnumpy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 520\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndim\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 521\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mt\u001b[0m \u001b[0;31m# Don't turn ragged or sparse tensors to NumPy.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/ops.py\u001b[0m in \u001b[0;36mnumpy\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 959\u001b[0m \"\"\"\n\u001b[1;32m 960\u001b[0m \u001b[0;31m# TODO(slebedev): Consider avoiding a copy for non-CPU or remote tensors.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 961\u001b[0;31m \u001b[0mmaybe_arr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_numpy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# pylint: disable=protected-access\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 962\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mmaybe_arr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcopy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmaybe_arr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mndarray\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0mmaybe_arr\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 963\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/ops.py\u001b[0m in \u001b[0;36m_numpy\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 925\u001b[0m \u001b[0;31m# pylint: disable=protected-access\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 926\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 927\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_numpy_internal\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 928\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mcore\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_NotOkStatusException\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 929\u001b[0m \u001b[0msix\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mraise_from\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcore\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_status_to_exception\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcode\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmessage\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "OPlU7aHqvY21", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 282 + }, + "outputId": "06896514-57f3-4717-e671-d831238851cd" + }, + "source": [ + "plt.plot(range(1, EPOCHS+1), hist.history[\"accuracy\"], color=\"red\")\n", + "plt.xlabel(\"epochs\")\n", + "plt.ylabel(\"accuracy\")\n", + "plt.show()" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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9tlnc++993LWWWfx008/Ae5/nIE8lrGxsZjNZg4dOgS4T8CdO3cOmmMI7pW3du/eTXV1NZqmeTIG03Gs1dBxS01N5fvvv0fTNHbt2kVERETAmjw2b97MihUrmDJlCqGhoV7Z165di8PhID8/n7y8PLp37+73fF26dGHevHnMmTOHOXPmYDabeeGFF4iNjQ2q41ifNnVH88aNG1m8eLFnTYcbbrgh0JHYsWMHTzzxBF26dPF827nlllvo0aMHs2fPprCwMCiGUwJkZ2fz6aef8sgjj3DkyBFeffVVysvLOe2007jnnnswGo0By7Z//37mzp2L0+mkQ4cOTJw4EU3TguoYLlmyhLVr16LX6+nWrRv/+Mc/sFqtAT2Or776Ktu2baOsrIyYmBhuuukm+vfvX+9x0zSN+fPn8+uvvxISEsLEiRNJSUkJSMZly5bhdDo9f549evTgrrvuAtxNSqtXr0an0zF27FjOO++8gGSsHfgAcPfdd/P88897hqQG4jj6qk0VBSGEEMfXZpqPhBBCnJgUBSGEEB5SFIQQQnhIURBCCOEhRUEIIYSHFAUhAiA/P5+bbroJl8sV6ChCeJGiIIQQwkOKghBCCI82M/eRECditVpZsGAB27dvJywsjGuuuYarr76aJUuWkJubi06nY9OmTSQlJTFhwgTP7JcHDhxg3rx57N+/H5PJxOjRoz3TVdjtdj766CN++uknKioq6NKlC48//rjnM3/44QcyMjKw2+1cc801nrvsc3JymDdvHnl5eYSEhDBkyBDGjBnj92Mi2qDALOMgRHBxuVzaww8/rC1dulRzOBza4cOHtbvvvlvbtGmTlpGRod18883ajz/+qDkcDm3FihXaxIkTNYfDoTkcDm3SpEnaxx9/rDkcDm3r1q3a7bffrh08eFDTNE175513tOnTp2sWi0VzuVzajh07PAvAjBw5Unvrrbe06upqbd++fdott9ziWfhp6tSp2nfffadpmqZVVVVpO3fuDNixEW2LNB8JAezZs4fS0lJuvPFGzxKPaWlprF27FoDTTz+dgQMHYjAYGD58OA6Hg927d7N7925sNhsjRozAYDBw9tln069fP9asWYOqqqxevZqxY8diMpnQ6XScccYZXnMbjRw5kpCQELp160bXrl35/fffAfdCQYcPH6a0tJSwsDB69uwZkOMi2h5pPhICKCgooKioiLFjx3qeU1WVXr16ER8f77VAk06nw2w2e1bLio+PR6f78/tV+/btsVqtlJWV4XA4SExMbPBzY2NjPT+HhoZis9kA+Mc//kFGRgb3338/HTp04MYbb+T8889vql9XiAZJURAC94m9Q4cO/Otf/zrmtSVLlnjN0a+qKhaLxTPdcWFhIaqqegpDYWEhSUlJtGvXDqPRyOHDh49ZfetEkpKSmDx5Mqqq8ssvv/DKK68wf/58wsLCTv6XFMIH0nwkBNC9e3fCw8NZvnw5drsdVVX5448/POv77t27l59//hmXy8Xnn3+O0WikR48e9OjRg9DQUFauXInT6SQ7O5sNGzZw4YUXotPpGDZsGO+++y5WqxVVVdm1axcOh+OEeb7//ntKS0vR6XSelfjqXo0I0Vxk6mwhalitVt59912ys7NxOp107NiRUaNGsWPHDq/RR4mJifzjzvGwRwAAAKlJREFUH//wLFGam5vrNfrolltu4YILLgDco4/+85//8OOPP2Kz2ejWrRuPPfYYxcXFTJo0iQ8//NCzRvOTTz7J0KFDSUtL41//+hdbtmyhurqa9u3bc/PNN3veU4jmJEVBiBNYsmQJhw8f5t577w10FCGanVyPCiGE8JCiIIQQwkOaj4QQQnjIlYIQQggPKQpCCCE8pCgIIYTwkKIghBDCQ4qCEEIIj/8P80xumQqR060AAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [] + } + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "G2T4AaxqjjKR", + "colab_type": "code", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 282 + }, + "outputId": "52eadd38-746a-4527-d684-14f09367f225" + }, + "source": [ + "plt.plot(range(1, EPOCHS+1), hist.history[\"loss\"], color=\"blue\")\n", + "plt.xlabel(\"epochs\")\n", + "plt.ylabel(\"loss\")\n", + "plt.show()" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [] + } + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "GXcuf14JlxJr", + "colab_type": "code", + "colab": {} + }, + "source": [ + "" + ], + "execution_count": null, + "outputs": [] + } + ] +} \ No newline at end of file