373 lines
59 KiB
Text
373 lines
59 KiB
Text
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 127,
|
|
"metadata": {
|
|
"id": "I2keZzFjqmcc"
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"import tensorflow as tf\n",
|
|
"\n",
|
|
"from tensorflow.keras import datasets, layers, models\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"import random\n",
|
|
"import numpy as np"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 128,
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "MRfXcFGdqsPZ",
|
|
"outputId": "6e36b70f-6853-412b-e728-bfea5c8c8ffd"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"test_images: 10000\n",
|
|
"selection images: 1024\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data()\n",
|
|
"\n",
|
|
"selection_img = []\n",
|
|
"selection_labels = []\n",
|
|
"\n",
|
|
"n = 2**10\n",
|
|
"\n",
|
|
"i=0\n",
|
|
"while i < n:\n",
|
|
" p = random.randint(50, 40000)\n",
|
|
" selection_img.append(train_images[p])\n",
|
|
" selection_labels.append(train_labels[p])\n",
|
|
" i += 1\n",
|
|
"assert len(selection_img) == n\n",
|
|
"\n",
|
|
"selection_img = np.array(selection_img)\n",
|
|
"selection_labels = np.array(selection_labels)\n",
|
|
"assert len(selection_img) == n\n",
|
|
"print(f\"test_images: {len(test_images)}\")\n",
|
|
"print(f\"selection images: {len(selection_img)}\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 129,
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/",
|
|
"height": 282
|
|
},
|
|
"id": "Y7MiDICErjtO",
|
|
"outputId": "ad14bbdb-50c9-4eda-85bd-208cb5b25a44"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<matplotlib.image.AxesImage at 0x7fab7b6d9100>"
|
|
]
|
|
},
|
|
"execution_count": 129,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAaAAAAGdCAYAAABU0qcqAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAG9hJREFUeJzt3X9w1PW97/HXBsLyw2QxxGQTCTQgghVIWwoxo1IsuYR4L4dft4O/7gWvAwMGT5FanXRUpO1MFGesRxvxnpkW6j2CyozA6LXc0WDCtQ30EKEcrjWHpFHCJQlKJ7shSAjJ5/7BdetKAL/Lbt5JeD5mvjNk9/vJ992vW59+2c03PuecEwAAvSzJegAAwNWJAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABODrQf4uu7ubh0/flwpKSny+XzW4wAAPHLOqa2tTdnZ2UpKuvh1Tp8L0PHjx5WTk2M9BgDgCjU2Nmr06NEXfb7PBSglJUWSdJvu1GAlG08DAPDqnDr1gd6J/Pv8YhIWoPLycj377LNqbm5WXl6eXnzxRc2YMeOy6778a7fBStZgHwECgH7n/99h9HJvoyTkQwivv/661q5dq3Xr1unDDz9UXl6eioqKdOLEiUQcDgDQDyUkQM8995yWL1+u+++/X9/+9rf18ssva/jw4frtb3+biMMBAPqhuAfo7NmzqqmpUWFh4d8PkpSkwsJCVVdXX7B/R0eHwuFw1AYAGPjiHqDPP/9cXV1dyszMjHo8MzNTzc3NF+xfVlamQCAQ2fgEHABcHcx/ELW0tFShUCiyNTY2Wo8EAOgFcf8UXHp6ugYNGqSWlpaox1taWhQMBi/Y3+/3y+/3x3sMAEAfF/croCFDhmjatGmqqKiIPNbd3a2KigoVFBTE+3AAgH4qIT8HtHbtWi1dulTf//73NWPGDD3//PNqb2/X/fffn4jDAQD6oYQEaMmSJfrss8/05JNPqrm5Wd/5zne0a9euCz6YAAC4evmcc856iK8Kh8MKBAKapfncCQEA+qFzrlOV2qlQKKTU1NSL7mf+KTgAwNWJAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMDHYegAA8CJ03y2e1+x++oWYjvUP9630vGZQ5YcxHetqxBUQAMAEAQIAmIh7gJ566in5fL6obdKkSfE+DACgn0vIe0A333yz3nvvvb8fZDBvNQEAoiWkDIMHD1YwGEzEtwYADBAJeQ/oyJEjys7O1rhx43Tvvffq6NGjF923o6ND4XA4agMADHxxD1B+fr42b96sXbt2aePGjWpoaNDtt9+utra2HvcvKytTIBCIbDk5OfEeCQDQB8U9QMXFxfrRj36kqVOnqqioSO+8845aW1v1xhtv9Lh/aWmpQqFQZGtsbIz3SACAPijhnw4YOXKkbrzxRtXV1fX4vN/vl9/vT/QYAIA+JuE/B3Tq1CnV19crKysr0YcCAPQjcQ/QI488oqqqKn3yySf64x//qIULF2rQoEG6++67430oAEA/Fve/gjt27JjuvvtunTx5Utddd51uu+027d27V9ddd128DwUA6MfiHqDXXnst3t8SwADV/YPvel5T9cyLntcMjvFfdX9dlOx5zYTKmA51VeJecAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACAiYT/QjrgSp1emO95zbE7u2M61qS1H3te032RXzd/tUkaMcLzGt+6E57XDNYgz2tOdn/heY0kTfr1557XdMV0pKsTV0AAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwwd2w0efNePxfPa+pDO6P6Vg3H1/tec3YdX+M6VgDTeNDeZ7X/HnirxMwyYX+8ei8mNZ1/Xt9nCfBV3EFBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCY4Gak6FVn5s3wvObp4MYYjuSLYY3kBruY1g00g6/P9rzmv6/onRuLNnWd9rwmtCojxqP9LcZ1+Ca4AgIAmCBAAAATBAgAYIIA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",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"plt.imshow(selection_img[0])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 130,
|
|
"metadata": {
|
|
"id": "-TWpc3c-tXkx"
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"model = models.Sequential()\n",
|
|
"model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))\n",
|
|
"model.add(layers.MaxPooling2D((2, 2)))\n",
|
|
"model.add(layers.Conv2D(64, (3, 3), activation='relu'))\n",
|
|
"model.add(layers.MaxPooling2D((2, 2)))\n",
|
|
"model.add(layers.Conv2D(64, (3, 3), activation='relu'))\n",
|
|
"model.add(layers.Flatten())\n",
|
|
"model.add(layers.Dense(64, activation='relu'))\n",
|
|
"model.add(layers.Dense(10))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 131,
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "HIsZlqvyt1qr",
|
|
"outputId": "fe8d632b-0fe7-4e36-e70a-bedfc5908deb"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\">Model: \"sequential_15\"</span>\n",
|
|
"</pre>\n"
|
|
],
|
|
"text/plain": [
|
|
"\u001b[1mModel: \"sequential_15\"\u001b[0m\n"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
|
|
"┃<span style=\"font-weight: bold\"> Layer (type) </span>┃<span style=\"font-weight: bold\"> Output Shape </span>┃<span style=\"font-weight: bold\"> Param # </span>┃\n",
|
|
"┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
|
|
"│ conv2d_39 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">26</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">26</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">320</span> │\n",
|
|
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
|
"│ max_pooling2d_26 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">MaxPooling2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">13</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">13</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n",
|
|
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
|
"│ conv2d_40 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">11</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">11</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">18,496</span> │\n",
|
|
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
|
"│ max_pooling2d_27 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">MaxPooling2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">5</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">5</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n",
|
|
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
|
"│ conv2d_41 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">3</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">3</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">36,928</span> │\n",
|
|
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
|
"│ flatten_15 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Flatten</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">576</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n",
|
|
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
|
"│ dense_34 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">64</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">36,928</span> │\n",
|
|
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
|
"│ dense_35 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">10</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">650</span> │\n",
|
|
"└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
|
|
"</pre>\n"
|
|
],
|
|
"text/plain": [
|
|
"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
|
|
"┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n",
|
|
"┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
|
|
"│ conv2d_39 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m26\u001b[0m, \u001b[38;5;34m26\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m320\u001b[0m │\n",
|
|
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
|
"│ max_pooling2d_26 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m13\u001b[0m, \u001b[38;5;34m13\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
|
|
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
|
"│ conv2d_40 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m11\u001b[0m, \u001b[38;5;34m11\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m18,496\u001b[0m │\n",
|
|
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
|
"│ max_pooling2d_27 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m5\u001b[0m, \u001b[38;5;34m5\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
|
|
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
|
"│ conv2d_41 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m3\u001b[0m, \u001b[38;5;34m3\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m36,928\u001b[0m │\n",
|
|
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
|
"│ flatten_15 (\u001b[38;5;33mFlatten\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m576\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
|
|
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
|
"│ dense_34 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m36,928\u001b[0m │\n",
|
|
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
|
"│ dense_35 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m10\u001b[0m) │ \u001b[38;5;34m650\u001b[0m │\n",
|
|
"└─────────────────────────────────┴────────────────────────┴───────────────┘\n"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Total params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">93,322</span> (364.54 KB)\n",
|
|
"</pre>\n"
|
|
],
|
|
"text/plain": [
|
|
"\u001b[1m Total params: \u001b[0m\u001b[38;5;34m93,322\u001b[0m (364.54 KB)\n"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">93,322</span> (364.54 KB)\n",
|
|
"</pre>\n"
|
|
],
|
|
"text/plain": [
|
|
"\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m93,322\u001b[0m (364.54 KB)\n"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Non-trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> (0.00 B)\n",
|
|
"</pre>\n"
|
|
],
|
|
"text/plain": [
|
|
"\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"model.summary()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 135,
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/"
|
|
},
|
|
"id": "uslCpPtpt2tD",
|
|
"outputId": "0f1211aa-afb1-45e1-c6fb-c4865b93892f"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Epoch 1/20\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 1s/step - accuracy: 1.0000 - loss: 0.0022 - val_accuracy: 0.8437 - val_loss: 0.7752\n",
|
|
"Epoch 2/20\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 477ms/step - accuracy: 0.9141 - loss: 0.2693 - val_accuracy: 0.9063 - val_loss: 0.4809\n",
|
|
"Epoch 3/20\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 451ms/step - accuracy: 0.9863 - loss: 0.0455 - val_accuracy: 0.8702 - val_loss: 0.7430\n",
|
|
"Epoch 4/20\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 450ms/step - accuracy: 0.9551 - loss: 0.1380 - val_accuracy: 0.8800 - val_loss: 0.6591\n",
|
|
"Epoch 5/20\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 465ms/step - accuracy: 0.9756 - loss: 0.0863 - val_accuracy: 0.8910 - val_loss: 0.5671\n",
|
|
"Epoch 6/20\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 470ms/step - accuracy: 0.9854 - loss: 0.0454 - val_accuracy: 0.8996 - val_loss: 0.4960\n",
|
|
"Epoch 7/20\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 479ms/step - accuracy: 0.9922 - loss: 0.0204 - val_accuracy: 0.9095 - val_loss: 0.4452\n",
|
|
"Epoch 8/20\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 474ms/step - accuracy: 0.9990 - loss: 0.0117 - val_accuracy: 0.9109 - val_loss: 0.4241\n",
|
|
"Epoch 9/20\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 465ms/step - accuracy: 0.9990 - loss: 0.0084 - val_accuracy: 0.9111 - val_loss: 0.4234\n",
|
|
"Epoch 10/20\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 468ms/step - accuracy: 1.0000 - loss: 0.0088 - val_accuracy: 0.9113 - val_loss: 0.4239\n",
|
|
"Epoch 11/20\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 471ms/step - accuracy: 1.0000 - loss: 0.0091 - val_accuracy: 0.9118 - val_loss: 0.4202\n",
|
|
"Epoch 12/20\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 485ms/step - accuracy: 1.0000 - loss: 0.0089 - val_accuracy: 0.9118 - val_loss: 0.4169\n",
|
|
"Epoch 13/20\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 468ms/step - accuracy: 1.0000 - loss: 0.0086 - val_accuracy: 0.9125 - val_loss: 0.4157\n",
|
|
"Epoch 14/20\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 476ms/step - accuracy: 1.0000 - loss: 0.0079 - val_accuracy: 0.9121 - val_loss: 0.4167\n",
|
|
"Epoch 15/20\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 480ms/step - accuracy: 1.0000 - loss: 0.0071 - val_accuracy: 0.9133 - val_loss: 0.4170\n",
|
|
"Epoch 16/20\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 476ms/step - accuracy: 1.0000 - loss: 0.0058 - val_accuracy: 0.9135 - val_loss: 0.4158\n",
|
|
"Epoch 17/20\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 482ms/step - accuracy: 1.0000 - loss: 0.0045 - val_accuracy: 0.9147 - val_loss: 0.4143\n",
|
|
"Epoch 18/20\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 533ms/step - accuracy: 1.0000 - loss: 0.0035 - val_accuracy: 0.9174 - val_loss: 0.4125\n",
|
|
"Epoch 19/20\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 534ms/step - accuracy: 1.0000 - loss: 0.0029 - val_accuracy: 0.9192 - val_loss: 0.4097\n",
|
|
"Epoch 20/20\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 532ms/step - accuracy: 1.0000 - loss: 0.0025 - val_accuracy: 0.9211 - val_loss: 0.4060\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"model.compile(optimizer='adam',\n",
|
|
" loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),\n",
|
|
" metrics=['accuracy'])\n",
|
|
"\n",
|
|
"history = model.fit(selection_img, selection_labels, epochs=20, batch_size= 2**11, \n",
|
|
" validation_data=(test_images, test_labels))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 136,
|
|
"metadata": {
|
|
"colab": {
|
|
"base_uri": "https://localhost:8080/",
|
|
"height": 300
|
|
},
|
|
"id": "Y8mAWZshvBGJ",
|
|
"outputId": "cc8ec1f2-4dae-479a-ea06-32e09c484f60"
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"<matplotlib.legend.Legend at 0x7fab7b64a900>"
|
|
]
|
|
},
|
|
"execution_count": 136,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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ghs3bqBBgwbo168fZs6cKdYmEBERkYmRCI/Z+Zzc3Fw4OTkhJycHjo6OYpdDREREtaDL97dZXS1FREREVBOdw01AQAA+++wzJCcnG6IeIiIiokeic7iZNGkSNm3ahMaNG6NXr15Yu3YtiouLDVEbERERkc7qFG4SEhJw9OhRtGzZEhMnToSXlxcmTJiA+Ph4Q9RIREREVGuP3KG4tLQU33//PSZPnozS0lIEBQXh3XffxejRoyGRSPRVp96wQzEREZH50eX7u86XgpeWlmLz5s1Yvnw5du7ciSeeeAKvv/46UlJS8PHHH2PXrl1YvXp1XVdPREREVCc6h5v4+HgsX74ca9asgVQqxciRI/HNN9+gRYsWmjYDBw5Ep06d9FooERERUW3oHG46deqEXr16YdGiRRgwYACsra0rtGnUqBGGDRumlwKJiIiIdKFzuLl8+TL8/f2rbWNvb4/ly5fXuSgiIiKiutL5aqmMjAwcOXKkwvQjR47g33//1UtRRERERHWlc7gZP348rl+/XmH6jRs3MH78eL0URURERFRXOoebs2fPokOHDhWmt2/fHmfPntVLUURERER1pXO4USgUSE9PrzA9NTUVVlai3mSciIiISPdw07t3b0RFRSEnJ0czLTs7Gx9//DF69eql1+KIiIiIdKXzoZb//ve/ePrpp+Hv74/27dsDABISEuDh4YFff/1V7wUSERER6ULncOPj44OTJ09i1apVOHHiBGxtbTF69GgMHz680jFviIiIiIypTp1k7O3t8cYbb+i7FiIiIqJHVucewGfPnkVycjJKSkq0pr/44ouPXBQRERFRXdVphOKBAwfi1KlTkEgkKL+pePkdwJVKpX4rJCIiItKBzldLvffee2jUqBEyMjJgZ2eHM2fOYP/+/ejYsSP27t1rgBKJiIiIak/nIzeHDh3C7t274ebmBqlUCqlUim7duiE6Ohrvvvsujh8/bog6iYiIiGpF5yM3SqUSDg4OAAA3NzfcvHkTAODv74+kpCT9VkdERESkI52P3LRp0wYnTpxAo0aNEBoaitmzZ0Mul+PHH39E48aNDVEjERERUa3pHG6mTJmCgoICAMBnn32GF154AU899RRcXV2xbt06vRdIREREpAuJUH650yO4ffs2XFxcNFdMmbLc3Fw4OTkhJycHjo6OYpdDREREtaDL97dOfW5KS0thZWWF06dPa02vX7++WQQbIiIisnw6hRtra2s0bNiQY9kQERGRydL5aqlPPvkEH3/8MW7fvm2IeoiIiIgeic4dihcsWICLFy/C29sb/v7+sLe315ofHx+vt+KIiIiIdKVzuBkwYIAByiAiIiLSD71cLWVOeLUUERGR+THY1VJEREREpk7n01JSqbTay755JRURERGJSedws3nzZq3XpaWlOH78OH7++WfMmDFDb4URERER1YXe+tysXr0a69atw++//66P1RkM+9wQERGZH1H63DzxxBOIjY3V1+qIiIiI6kQv4ebu3bv49ttv4ePjo4/VEREREdWZzn1uHr5BpiAIyMvLg52dHVauXKnX4oiIiIh0pXO4+eabb7TCjVQqRYMGDRAaGgoXFxe9FkdERESkK53DzahRowxQBhEREZF+6NznZvny5Vi/fn2F6evXr8fPP/+sl6KIiIiI6krncBMdHQ03N7cK093d3TFr1iy9FEVERERUVzqHm+TkZDRq1KjCdH9/fyQnJ+ulKCIiIqK60jncuLu74+TJkxWmnzhxAq6urnopioiIiKiudA43w4cPx7vvvos9e/ZAqVRCqVRi9+7deO+99zBs2DBD1EhERERUazpfLfX555/j6tWr6NmzJ6ys1IurVCqMHDmSfW6IiIhIdHW+t9SFCxeQkJAAW1tbBAUFwd/fX9+1GQTvLUVERGR+dPn+1vnITblmzZqhWbNmdV2ciIiIyCB07nMzePBgfPXVVxWmz549Gy+//LJeiiIiIiKqK53Dzf79+9G3b98K0/v06YP9+/frpSgiIiKiutI53OTn50Mul1eYbm1tjdzcXL0URURERFRXOoeboKAgrFu3rsL0tWvXolWrVnopioiIiKiudO5QPHXqVAwaNAiXLl1Cjx49AACxsbFYvXo1NmzYoPcCiYiIiHShc7jp168ftmzZglmzZmHDhg2wtbVFcHAwdu/ejfr16xuiRiIiIqJaq/M4N+Vyc3OxZs0aLF26FHFxcVAqlfqqzSA4zg0REZH50eX7W+c+N+X279+PiIgIeHt7Y86cOejRowcOHz5c19URERER6YVOp6XS0tKwYsUKLF26FLm5uRgyZAiKi4uxZcsWdiYmIiIik1DrIzf9+vVDYGAgTp48iXnz5uHmzZv47rvvDFkbERERkc5qfeTmzz//xLvvvou3336bt10gIiIik1XrIzf//PMP8vLyEBISgtDQUCxYsABZWVmGrI2IiIhIZ7UON0888QSWLFmC1NRUvPnmm1i7di28vb2hUqmwc+dO5OXlGbJOIiIiolp5pEvBk5KSsHTpUvz666/Izs5Gr169sHXrVn3Wp3e8FJyIiMj8GOVScAAIDAzE7NmzkZKSgjVr1jzKqoiIiIj04pHCTTmZTIYBAwbU+ajNwoULERAQABsbG4SGhuLo0aNVtn322WchkUgqPJ5//vm6lk9EREQWRC/h5lGsW7cOkZGRmD59OuLj4xEcHIzw8HBkZGRU2n7Tpk1ITU3VPE6fPg2ZTIaXX37ZyJUTERGRKRI93MydOxfjxo3D6NGj0apVKyxevBh2dnZYtmxZpe3r168PT09PzWPnzp2ws7NjuCEiIiIAIoebkpISxMXFISwsTDNNKpUiLCwMhw4dqtU6li5dimHDhsHe3r7S+cXFxcjNzdV6EBERkeUSNdxkZWVBqVTCw8NDa7qHhwfS0tJqXP7o0aM4ffo0xo4dW2Wb6OhoODk5aR5+fn6PXDcRERGZLtFPSz2KpUuXIigoCJ07d66yTVRUFHJycjSP69evG7FCIiIiMjadbpypb25ubpDJZEhPT9eanp6eDk9Pz2qXLSgowNq1a/HZZ59V206hUEChUDxyrURERGQeRD1yI5fLERISgtjYWM00lUqF2NhYdOnSpdpl169fj+LiYrz66quGLpOIiIjMiKhHbgAgMjISERER6NixIzp37ox58+ahoKAAo0ePBgCMHDkSPj4+iI6O1lpu6dKlGDBgAFxdXcUom4iIiEyU6OFm6NChyMzMxLRp05CWloZ27dph+/btmk7GycnJkEq1DzAlJSXhn3/+wV9//SVGyURERGTCHuneUuaI95YiIiIyP0a7txQRERGRqWG4ISIiIovCcENEREQWheGGiIiILArDDREREVkUhhsiIiKyKAw3REREZFEYboiIiMiiMNwQERGRRWG4ISIiIovCcENEREQWheGGiIiILArDDREREVkUhhsiIiKyKAw3REREZFEYboiIiMiiMNwQERGRRWG4ISIiIovCcENEREQWheGGiIiILArDDREREVkUhhsiIiKyKAw3REREZFEYboiIiMiiMNwQERGRRWG4ISIiIovCcENEREQWheGGiIiILArDDREREVkUhhsiIiKyKAw3REREZFEYboiIiMiiMNwQERGRRWG4ISIiIovCcENEREQWheGGiIiILArDDREREVkUhhsiIiKyKAw3REREZFEYboiIiMiiMNwQERGRRWG4ISIiIovCcENEREQWheGGiIiILArDDREREVkUhhsiIiKyKAw3REREZFEYboiIiMiiMNwQERGRRWG4ISIiIovCcENEREQWheGGiIiILArDDREREVkUhhsiIiKyKAw3REREZFEYboiIiMiiMNwQERGRRWG4ISIiIovCcENEREQWheGGiIiILArDDREREVkUhhsiIiKyKAw3REREZFFEDzcLFy5EQEAAbGxsEBoaiqNHj1bbPjs7G+PHj4eXlxcUCgWaN2+Obdu2GalaIiIiMnVWYr75unXrEBkZicWLFyM0NBTz5s1DeHg4kpKS4O7uXqF9SUkJevXqBXd3d2zYsAE+Pj64du0anJ2djV88ERERmSSJIAiCWG8eGhqKTp06YcGCBQAAlUoFPz8/TJw4ER999FGF9osXL8bXX3+Nc+fOwdrauk7vmZubCycnJ+Tk5MDR0fGR6iciIiLj0OX7W7TTUiUlJYiLi0NYWNj9YqRShIWF4dChQ5Uus3XrVnTp0gXjx4+Hh4cH2rRpg1mzZkGpVFb5PsXFxcjNzdV6EBERkeUSLdxkZWVBqVTCw8NDa7qHhwfS0tIqXeby5cvYsGEDlEoltm3bhqlTp2LOnDn44osvqnyf6OhoODk5aR5+fn563Q4iIiIyLaJ3KNaFSqWCu7s7fvzxR4SEhGDo0KH45JNPsHjx4iqXiYqKQk5OjuZx/fp1I1ZMRERExiZah2I3NzfIZDKkp6drTU9PT4enp2ely3h5ecHa2hoymUwzrWXLlkhLS0NJSQnkcnmFZRQKBRQKhX6LJyIiIpMl2pEbuVyOkJAQxMbGaqapVCrExsaiS5culS7z5JNP4uLFi1CpVJpp58+fh5eXV6XBhoiIiB4/op6WioyMxJIlS/Dzzz8jMTERb7/9NgoKCjB69GgAwMiRIxEVFaVp//bbb+P27dt47733cP78ecTExGDWrFkYP368WJtAREREJkbUcW6GDh2KzMxMTJs2DWlpaWjXrh22b9+u6WScnJwMqfR+/vLz88OOHTvw/vvvo23btvDx8cF7772HyZMni7UJREREZGJEHedGDBznhoiIyPyYxTg3RERERIbA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vPDCC2jbti02btyIuLg4LFy4EAA067O1ta1y+ermAepTXgC07gZeWlpa6XokD/2OIiIikJCQgPnz5+PgwYNISEiAq6trreoqN3bsWKxYsQKA+pTU6NGjK7yPvjHcEBERVcLGxgaDBg3CqlWrsGbNGgQGBqJDhw4A1J17R40ahYEDByIoKAienp6azrm6iouLg0qlwpw5c/DEE0+gefPmuHlT++hW27ZtERsbW+nyzZo1g62tbZXzGzRoAABITU3VTEtISKhVbQcOHMC7776Lvn37onXr1lAoFMjKytKqKyUlBefPn69yHa+++iquXbuGb7/9FmfPntWcOjMkhhsiIqIqjBgxAjExMVi2bJnmqA2gDhSbNm1CQkICTpw4gVdeeaXOl043bdoUpaWl+O6773D58mX8+uuvWLx4sVabqKgoHDt2DO+88w5OnjyJc+fOYdGiRcjKyoKNjQ0mT56MDz/8EL/88gsuXbqEw4cPY+nSpZr1+/n54dNPP8WFCxcQExODOXPm1Kq2Zs2a4ddff0ViYiKOHDmCESNGaB2teeaZZ/D0009j8ODB2LlzJ65cuYI///wT27dv17RxcXHBoEGD8H//93/o3bs3fH196/R70gXDDRERURV69OiB+vXrIykpCa+88opm+ty5c+Hi4oKuXbuiX79+CA8P1xzV0VVwcDDmzp2Lr776Cm3atMGqVasQHR2t1aZ58+b466+/cOLECXTu3BldunTB77//DisrddfZqVOn4j//+Q+mTZuGli1bYujQocjIyAAAWFtbY82aNTh37hzatm2Lr776Cl988UWtalu6dCnu3LmDDh064LXXXsO7774Ld3d3rTYbN25Ep06dMHz4cLRq1Qoffvih5iqucq+//jpKSkowZsyYOv2OdCURBB0u/LcAubm5cHJyQk5ODhwdHcUuh4jIohUVFeHKlSto1KgRbGxsxC6HRPLrr7/i/fffx82bNyGXy6tsV93fiy7f37xaioiIiAyisLAQqamp+PLLL/Hmm29WG2z0iaeliIiIDGjVqlWoV69epY/ysWos1ezZs9GiRQt4enoiKirKaO/L01JERGQwPC2lHmQvPT290nnW1tbw9/c3ckWmi6eliIiIzICDg4NBbzVAFfG0FBERGdxjdpKA6khffycMN0REZDAymQwA6jRyLz1+yv9Oyv9u6oqnpYiIyGCs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p55CXl5epe0tYb8CwJYtW5CdnY1Ro0ZV2cac9+uDyveNLvutLp95U1VUVITJkydj+PDh1d5YUdfPgql47rnn8MsvvyA2NhZfffUV9u3bhz59+kCpVFba3lL27c8//wwHBwcMGjSo2nbmul8fhei3XyDTNn78eJw+fbrG87NdunTRutlp165d0bJlS/zwww/4/PPPDV3mI+nTp4/medu2bREaGgp/f3/89ttvtfofkblaunQp+vTpA29v7yrbmPN+JbXS0lIMGTIEgiBg0aJF1bY118/CsGHDNM+DgoLQtm1bNGnSBHv37kXPnj1FrMywli1bhhEjRtTYyd9c9+uj4JGbWnJzc4NMJkN6errW9PT0dHh6ela6jKenp07tTc2ECRPwxx9/YM+ePfD19dVpWWtra7Rv3x4XL140UHWG4+zsjObNm1dZu7nvVwC4du0adu3apfMNZ811v5bvG132W10+86amPNhcu3YNO3furPaoTWVq+iyYqsaNG8PNza3Kui1h3/79999ISkqq002jzXW/6oLhppbkcjlCQkIQGxurmaZSqRAbG6v1P9sHdenSRas9AOzcubPK9qZCEARMmDABmzdvxu7du9GoUSOd16FUKnHq1Cl4eXkZoELDys/Px6VLl6qs3Vz364OWL18Od3d3PP/88zotZ677tVGjRvD09NTab7m5uThy5EiV+60un3lTUh5sLly4gF27dsHV1VXnddT0WTBVKSkpuHXrVpV1m/u+BdRHXkNCQhAcHKzzsua6X3Uido9mc7J27VpBoVAIK1asEM6ePSu88cYbgrOzs5CWliYIgiC89tprwkcffaRpf+DAAcHKykr473//KyQmJgrTp08XrK2thVOnTom1CbXy9ttvC05OTsLevXuF1NRUzaOwsFDT5uFtnTFjhrBjxw7h0qVLQlxcnDBs2DDBxsZGOHPmjBiboJP//Oc/wt69e4UrV64IBw4cEMLCwgQ3NzchIyNDEATL2a/llEql0LBhQ2Hy5MkV5pnzfs3LyxOOHz8uHD9+XAAgzJ07Vzh+/Ljm6qAvv/xScHZ2Fn7//Xfh5MmTQv/+/YVGjRoJd+/e1ayjR48ewnfffad5XdNnXkzVbW9JSYnw4osvCr6+vkJCQoLW57i4uFizjoe3t6bPgliq29a8vDzhgw8+EA4dOiRcuXJF2LVrl9ChQwehWbNmQlFRkWYd5rJva/o7FgRByMnJEezs7IRFixZVug5z2a+GxHCjo++++05o2LChIJfLhc6dOwuHDx/WzHvmmWeEiIgIrfa//fab0Lx5c0EulwutW7cWYmJijFyx7gBU+li+fLmmzcPbOmnSJM3vxcPDQ+jbt68QHx9v/OLrYOjQoYKXl5cgl8sFHx8fYejQocLFixc18y1lv5bbsWOHAEBISkqqMM+c9+uePXsq/bst3x6VSiVMnTpV8PDwEBQKhdCzZ88KvwN/f39h+vTpWtOq+8yLqbrtvXLlSpWf4z179mjW8fD21vRZEEt121pYWCj07t1baNCggWBtbS34+/sL48aNqxBSzGXf1vR3LAiC8MMPPwi2trZCdnZ2peswl/1qSBJBEASDHhoiIiIiMiL2uSEiIiKLwnBDREREFoXhhoiIiCwKww0RERFZFIYbIiIisigMN0RERGRRGG6IiIjIojDcENFjTyKRYMuWLWKXQUR6wnBDRKIaNWoUJBJJhcdzzz0ndmlEZKasxC6AiOi5557D8uXLtaYpFAqRqiEic8cjN0QkOoVCAU9PT62Hi4sLAPUpo0WLFqFPnz6wtbVF48aNsWHDBq3lT506hR49esDW1haurq544403kJ+fr9Vm2bJlaN26NRQKBby8vDBhwgSt+VlZWRg4cCDs7OzQrFkzbN261bAbTUQGw3BDRCZv6tSpGDx4ME6cOIERI0Zg2LBhSExMBAAUFBQgPDwcLi4uOHbsGNavX49du3ZphZdFixZh/PjxeOONN3Dq1Cls3boVTZs21XqPGTNmYMiQITh58iT69u2LESNG4Pbt20bdTiLSE7Hv3ElEj7eIiAhBJpMJ9vb2Wo+ZM2cKgqC+S/1bb72ltUxoaKjw9ttvC4IgCD/++KPg4uIi5Ofna+bHxMQIUqlUc2dob29v4ZNPPqmyBgDClClTNK/z8/MFAMKff/6pt+0kIuNhnxsiEl337t2xaNEirWn169fXPO/SpYvWvC5duiAhIQEAkJiYiODgYNjb22vmP/nkk1CpVEhKSoJEIsHNmzfRs2fPamto27at5rm9vT0cHR2RkZFR100iIhEx3BCR6Ozt7SucJtIXW1vbWrWztrbWei2RSKBSqQxREhEZGPvcEJHJO3z4cIXXLVu2BAC0bNkSJ06cQEFBgWb+gQMHIJVKERgYCAcHBwQEBCA2NtaoNROReHjkhohEV1xcjLS0NK1pVlZWcHNzAwCsX78eHTt2RLdu3bBq1SocPXoUS5cuBQCMGDEC06dPR0REBD799FNkZmZi4sSJeO211+Dh4QEA+PTTT/HWW2/B3d0dffr0QV5eHg4cOICJEycad0OJyCgYbohIdNu3b4eXl5fWtMDAQJw7dw6A+kqmtWvX4p133oGXlxfWrFmDVq1aAQDs7OywY8cOvPfee+jUqRPs7OwwePBgzJ07V7OuiIgIFBUV4ZtvvsEHH3wANzc3vPTSS8bbQCIyKokgCILYRRARVUUikWDz5s0YMGCA2KUQkZlgnxsiIiKyKAw3REREZFHY54aITBrPnBORrnjkhoiIiCwKww0RERFZFIYbIiIisigMN0RERGRRGG6IiIjIojDcEBERkUVhuCEiIiKLwnBDREREFoXhhoiIiCzK/wMF6FnPRa3skgAAAABJRU5ErkJggg==",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"plt.plot(history.history['accuracy'], label='accuracy')\n",
|
|
"plt.plot(history.history['val_accuracy'], label = 'val_accuracy')\n",
|
|
"plt.xlabel('Epoch')\n",
|
|
"plt.ylabel('Accuracy')\n",
|
|
"plt.ylim([0.5, 1])\n",
|
|
"plt.legend(loc='lower right')\n",
|
|
"\n",
|
|
"#test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"accelerator": "GPU",
|
|
"colab": {
|
|
"provenance": []
|
|
},
|
|
"gpuClass": "standard",
|
|
"kernelspec": {
|
|
"display_name": ".venv",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.12.9"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 1
|
|
}
|