374 lines
59 KiB
Text
374 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+Ca4AgIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATHAzUsRscDDT85qj/8n7zT6TYrix6CfnvN+wUpKC1V0xrRtoPnnhWs9rbvF7P87RGP45rVzyoPcDHTrkfQ0SjisgAIAJAgQAMOE5QHv27NG8efOUnZ0tn8+nHTt2RD3vnNOTTz6prKwsDRs2TIWFhTpy5Ei85gUADBCeA9Te3q68vDyVl5f3+PyGDRv0wgsv6OWXX9a+ffs0YsQIFRUV6cyZM1c8LABg4PD8IYTi4mIVFxf3+JxzTs8//7wef/xxzZ8/X5L0yiuvKDMzUzt27NBdd911ZdMCAAaMuL4H1NDQoObmZhUWFkYeCwQCys/PV3V1dY9rOjo6FA6HozYAwMAX1wA1NzdLkjIzoz+em5mZGXnu68rKyhQIBCJbTk5OPEcCAPRR5p+CKy0tVSgUimyNjY3WIwEAekFcAxQMBiVJLS0tUY+3tLREnvs6v9+v1NTUqA0AMPDFNUC5ubkKBoOqqKiIPBYOh7Vv3z4VFBTE81AAgH7O86fgTp06pbq6usjXDQ0NOnjwoNLS0jRmzBitWbNGv/zlLzVhwgTl5ubqiSeeUHZ2thYsWBDPuQEA/ZznAO3fv1933HFH5Ou1a9dKkpYuXarNmzfr0UcfVXt7u1asWKHW1lbddttt2rVrl4YOHRq/qQEA/Z7POef97pAJFA6HFQgENEvzNdiXbD0OLqFtyS2e1/zv515KwCQXuvPjf4ht4exj8R3E2KCbJ8a0buv/2ux5zTU+73cjvWHnSs9rbnzwT57XoHedc52q1E6FQqFLvq9v/ik4AMDViQABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACY8/zoGDDyDMjNiWjflJ3+O8yQ923ZqlOc1g/+bL6ZjnYtpVe9IGjHC85rPnontZvex3Nm6/twXntfc9PxJz2u6PK9AX8UVEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABggpuRQk3/+YaY1r11/a/jPEnPKlq/7XnNuU8bEzBJ/CSlpHhe8+maKZ7X/Nt3e+efkST9rWtorx0LAwNXQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACW5GCp39Ych6hEual3bA85oXK2bHdKwfZdfEtM6rUYP+6nnNghFVCZgkfqb7fZ7XfPyzkZ7XTFjmeQn6KK6AAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAAT3IwU+ufv/g/rES7pPw4/5X3NpJ0JmOTq8cm5057XrDhyj+c1N/38pOc15zyvQF/FFRAAwAQBAgCY8BygPXv2aN68ecrOzpbP59OOHTuinl+2bJl8Pl/UNnfu3HjNCwAYIDwHqL29XXl5eSovL7/oPnPnzlVTU1Nk27p16xUNCQAYeDx/CKG4uFjFxcWX3Mfv9ysYDMY8FABg4EvIe0CVlZXKyMjQxIkTtWrVKp08efFPunR0dCgcDkdtAICBL+4Bmjt3rl555RVVVFTomWeeUVVVlYqLi9X
|
||
|
"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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
|
||
|
"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
|
||
|
}
|