ki-dhbw/tasks/16 - wie gut ist das.ipynb
2025-02-13 14:23:29 +01:00

595 lines
106 KiB
Text

{
"cells": [
{
"cell_type": "code",
"execution_count": 66,
"metadata": {
"id": "I2keZzFjqmcc"
},
"outputs": [],
"source": [
"import tensorflow as tf\n",
"\n",
"from tensorflow.keras import datasets, layers, models\n",
"from tensorflow import keras\n",
"import matplotlib.pyplot as plt\n",
"import random\n",
"import numpy as np\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "MRfXcFGdqsPZ",
"outputId": "6e36b70f-6853-412b-e728-bfea5c8c8ffd"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1360\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",
"c = random.randint(50, 50000)\n",
"print(c)\n",
"n = 1000\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"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "SQQ6sLQZrV25",
"outputId": "cc273cbd-fd3c-49ef-ac30-8fdc51dc2d62"
},
"outputs": [
{
"data": {
"text/plain": [
"(28, 28)"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"selection_img[1].shape"
]
},
{
"cell_type": "code",
"execution_count": 69,
"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 0x7f6944673020>"
]
},
"execution_count": 69,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAaAAAAGdCAYAAABU0qcqAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAGxtJREFUeJzt3X9w1PW97/HXhiQraLIxhmQTCRjwByoQbynEXJRiyRDSGS4I546onQEPgwMGb4FavekoaNszsdhaj16q58xtSZ0rYr3Dj5E50tFgwrUm9BBhuNy2uSQTSyhJUM5hNwQJgXzuH1xXFxLpd9nlnR/Px8x3hux+P/m+/fodnnzZZeNzzjkBAHCVJVkPAAAYnggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwkWw9wMV6e3t17NgxpaWlyefzWY8DAPDIOafOzk7l5eUpKan/+5wBF6Bjx44pPz/fegwAwBVqbW3VmDFj+n1+wAUoLS1NknSPvqNkpRhPAwDw6px69KH+JfL7eX8SFqCNGzfqhRdeUHt7uwoLC/XKK69o+vTpl133xV+7JStFyT4CBACDzv//hNHLvYySkDchvPXWW1q7dq3Wr1+vjz/+WIWFhSotLdXx48cTcTgAwCCUkAC9+OKLWr58uR555BHdcccdeu211zRq1Cj9+te/TsThAACDUNwDdPbsWTU0NKikpOTLgyQlqaSkRHV1dZfs393drXA4HLUBAIa+uAfos88+0/nz55WTkxP1eE5Ojtrb2y/Zv7KyUoFAILLxDjgAGB7M/yFqRUWFQqFQZGttbbUeCQBwFcT9XXBZWVkaMWKEOjo6oh7v6OhQMBi8ZH+/3y+/3x/vMQAAA1zc74BSU1M1depUVVdXRx7r7e1VdXW1iouL4304AMAglZB/B7R27VotWbJE3/zmNzV9+nS99NJL6urq0iOPPJKIwwEABqGEBOiBBx7Qp59+qnXr1qm9vV133XWXdu3adckbEwAAw5fPOeesh/iqcDisQCCgWZrPJyEAwCB0zvWoRjsUCoWUnp7e737m74IDAAxPBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADARNwD9Oyzz8rn80VtEydOjPdhAACDXHIivumdd96p999//8uDJCfkMACAQSwhZUhOTlYwGEzEtwYADBEJeQ3o8OHDysvL0/jx4/Xwww/ryJEj/e7b3d2tcDgctQEAhr64B6ioqEhVVVXatWuXXn31VbW0tOjee+9VZ2dnn/tXVlYqEAhEtvz8/HiPBAAYgHzOOZfIA5w8eVLjxo3Tiy++qGXLll3yfHd3t7q7uyNfh8Nh5efna5bmK9mXksjRAAAJcM71qEY7FAqFlJ6e3u9+CX93QEZGhm699VY1NTX1+bzf75ff70/0GACAASbh/w7o1KlTam5uVm5ubqIPBQAYROIeoCeeeEK1tbX65JNP9NFHH+n+++/XiBEj9OCDD8b7UACAQSzufwV39OhRPfjggzpx4oRGjx6te+65R/X19Ro9enS8DwUAGMTiHqAtW7bE+1sCAIYgPgsOAGCCAAEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABAECAJggQAAAEwQIAGCCAAEATCRbDwAMRyOuv97zmvbFEz2vGflZr+c1kpTxUav3RSnefztx/lTPa3ynz3g/zqhrPK+RJN+p057XnPvrsZiONRxxBwQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmODDSIErlHTXHZ7X3PnrP3lesy7jv3le03DmJs9rJOnboxo9r0lL8v7BpzkjRnpec+Tc557X3JQ8yvMaSfq/Pd4/+PTdU5M8r/m3c9d6XvPGv97teY0k3br8X2NalwjcAQEATBAgAIAJAgQAMEGAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJvgwUuCr7p7iecnPtvyT5zX/9NlMz2vWPfz3ntektH7meY0kvfXNMs9rzl3Dn2evpqTYPot0QOGKAQCYIEAAABOeA7Rnzx7NmzdPeXl58vl82r59e9TzzjmtW7dOubm5GjlypEpKSnT48OF4zQsAGCI8B6irq0uFhYXauHFjn89v2LBBL7/8sl577TXt3btX1157rUpLS3XmjPcf7AQAGLo8vwmhrKxMZWV9v0DpnNNLL72kp59+WvPnz5ckvf7668rJydH27du1ePHiK5sWADBkxPU1oJaWFrW3t6ukpCTyWCAQUFFRkerq6vpc093drXA4HLUBAIa+uAaovb1dkpSTkxP1eE5OTuS5i1VWVioQCES2/Pz8eI4EABigzN8FV1FRoVAoFNlaW1utRwIAXAVxDVAwGJQkdXR0RD3e0dERee5ifr9f6enpURsAYOiLa4AKCgoUDAZVXV0deSwcDmvv3r0qLi6O56EAAIOc53fBnTp1Sk1NTZGvW1padODAAWVmZmrs2LFavXq1fvKTn+iWW25RQUGBnnnmGeXl5WnBggXxnBsAMMh5DtC+fft03333Rb5eu3atJGnJkiWqqqrSk08+qa6uLj366KM6efKk7rnnHu3atUvXXHNN/KYGAAx6Puecsx7iq8LhsAKBgGZpvpJ9KdbjYJAaMXp0TOtu33XC85p5GQc8r3n+7x70vMbt/z+e1wAWzrke1WiHQqHQ176ub/4uOADA8ESAAAAmCBAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATnn8cAzAYnLs5L6Z1zwd3eV7z7uk0z2tu/uemy+90kepPJnte4zvgfTZJyv+Hj2JaB3jBHRAAwAQBAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIPI8WQlPxpOKZ1d+75+zhPYut/P/aPMa27r+lxz2vS3qqP6VgYvrgDAgCYIEAAABMECABgggABAEwQIACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBM8GGkGJLON7XEtK7gwTgPEkfJY270vmbviJiOteWFn3les6Jmoec15zuOe16DoYM7IACACQIEADBBgAAAJggQAMAEAQIAmCBAAAATBAgAYIIAAQBMECAAgAkCBAAwQYAAACYIEADABB9G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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.imshow(selection_img[19])"
]
},
{
"cell_type": "code",
"execution_count": 77,
"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": 71,
"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_5\"</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[1mModel: \"sequential_5\"\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_12 (<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_8 (<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_13 (<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_9 (<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_14 (<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_5 (<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_12 (<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_13 (<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_12 (\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_8 (\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_13 (\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_9 (\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_14 (\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_5 (\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_12 (\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_13 (\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": 78,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "uslCpPtpt2tD",
"outputId": "0f1211aa-afb1-45e1-c6fb-c4865b93892f"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1/9\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 2s/step - accuracy: 0.1120 - loss: 48.5177 - val_accuracy: 0.1275 - val_loss: 28.9219\n",
"Epoch 2/9\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 598ms/step - accuracy: 0.1330 - loss: 28.9148 - val_accuracy: 0.1592 - val_loss: 24.3249\n",
"Epoch 3/9\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 626ms/step - accuracy: 0.1660 - loss: 24.4470 - val_accuracy: 0.1298 - val_loss: 18.6818\n",
"Epoch 4/9\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 579ms/step - accuracy: 0.1290 - loss: 18.8173 - val_accuracy: 0.1308 - val_loss: 14.6285\n",
"Epoch 5/9\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 632ms/step - accuracy: 0.1310 - loss: 14.5580 - val_accuracy: 0.1820 - val_loss: 10.9390\n",
"Epoch 6/9\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 641ms/step - accuracy: 0.1940 - loss: 10.8034 - val_accuracy: 0.2025 - val_loss: 8.2526\n",
"Epoch 7/9\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 585ms/step - accuracy: 0.2130 - loss: 8.1689 - val_accuracy: 0.2245 - val_loss: 5.8517\n",
"Epoch 8/9\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 617ms/step - accuracy: 0.2380 - loss: 5.7613 - val_accuracy: 0.2664 - val_loss: 4.2264\n",
"Epoch 9/9\n",
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 623ms/step - accuracy: 0.2920 - loss: 4.1206 - val_accuracy: 0.3445 - val_loss: 3.0474\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=9, batch_size=2**11, \n",
" validation_data=(test_images, test_labels))"
]
},
{
"cell_type": "code",
"execution_count": 73,
"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 0x7f69446500e0>"
]
},
"execution_count": 73,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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DWVkZKh///6l7nvw4EEVFhY6g9q18vHxUfv27V3asrOzlZycrE8++UQ5OTmy2Wy6cOGCc5wZGRm64YYbnOHnf3Xt2lVt27bVkiVLNHbsWC1btkyhoaG6/fbbr6vWq8EcIABAxWKx/HobyojNYrnqMnv37i2Hw6GNGzfqxIkT+uyzzxQXFydJevbZZ7Vu3TpNnjxZn332mTIyMtSuXTsVFRW5/eP4/vvvdd9996l9+/Zas2aN9uzZozlz5kiS83h+fn6X3f9K30m/3l6T5PIG+OLi4lKPY/mfn098fLwyMjI0c+ZMff7558rIyFD9+vWvqq7fPPbYY1q8eLGkX29/JSQklDhPWSAAAQBwDaxWqx544AEtX75cK1euVMuWLdWpUydJv05IfuSRR9S3b1+1a9dOjRo1ck4odteePXtkt9s1bdo03XLLLbrpppv0ww+uV8jat2+vtLS0UvcPDw+Xn5/fZb9v0KCBJCkrK8vZlpGRcVW1bd++XSNHjlRsbKzatm0rX19fnT171qWukydP6ptvvrnsMR566CEdP35cf//733XgwAHnbbqyRgACAOAaxcXFaePGjXrrrbecV3+kX0PH2rVrlZGRoX379unPf/7zNT82fuONN6q4uFizZs3S0aNHtXTpUr355psufZKSkrR79249/fTT+uqrr3To0CHNnTtXZ8+eldVq1fPPP68xY8bo7bff1nfffacvvvhCCxcudB6/SZMmmjBhgo4cOaKNGzdq2rRpV1VbeHi4li5dqoMHD2rnzp2Ki4tzuepzxx136Pbbb1e/fv20efNmHTt2TB9++KFSU1OdferWrasHHnhAzz33nO655x7dcMMN1/RzchcBCACAa9SjRw/Vq1dPhw8f1p///Gdn+/Tp01W3bl3deuut6t27t2JiYpxXh9wVERGh6dOna8qUKbr55pu1fPlypaSkuPS56aab9O9//1v79u1T165d1a1bN73//vuqVu3Xqb4vvfSS/vKXv2jcuHFq3bq1BgwYoJycHElS9erVtXLlSh06dEjt27fXlClT9Oqrr15VbQsXLtTPP/+sTp066eGHH9bIkSPVsGFDlz5r1qxRly5dNGjQILVp00ZjxoxxPp32m0cffVRFRUUaMmTINf2MroXF4bjKRQ9MJC8vT7Vr11Zubq4CAgKMLgcAqrSLFy/q2LFjat68uaxWq9HlwABLly7VM888ox9++EE+Pj5X7Hulvy/u/P7mKTAAAGCICxcuKCsrS6+99pqefPLJ3w0/nsQtMAAADLR8+XLVrFmz1O23tXyqqqlTp6pVq1Zq1KiRkpKSyvXc3AIrBbfAAKD8mP0WWH5+vrKzs0v9rnr16goNDS3niio2boEBAFAF1KpVq8xf+4CSuAUGAKgQuCGBq+GpvycEIACAoby9vSXpmlZJhvlcuHBB0q+3B68Ht8AAAIaqVq2aatSooTNnzqh69erOVzMA/5fD4dCFCxeUk5OjOnXqOIPztSIAAQAMZbFY1LhxYx07dkzHjx83uhxUcHXq1FGjRo2u+zgEIACA4Xx8fBQeHs5tMFxR9erVr/vKz28IQACACsHLy8uUj8HDGBXiRuucOXPUrFkzWa1WRUVFadeuXZftW1xcrIkTJyosLExWq1UREREuL1X7X6+99posFotGjx5dBpUDAIDKyPAAtHr1aiUmJmr8+PFKT09XRESEYmJinC9p+1/JycmaN2+eZs2apQMHDmjo0KHq27ev9u7dW6Lv7t27NW/ePLVv376shwEAACoRwwPQ9OnT9fjjjyshIUFt2rTRm2++qRo1auitt94qtf/SpUv1wgsvKDY2Vi1atNBTTz2l2NhYTZs2zaXf+fPnFRcXpwULFqhu3brlMRQAAFBJGDoHqKioSHv27HF5/4eXl5eio6O1Y8eOUvcpLCwscY/Yz89P27Ztc2kbNmyY7r33XkVHR+vVV1+9Yh2FhYUqLCx0fs7NzZX065LaAACgcvjt9/bVLJZoaAA6e/asbDabgoKCXNqDgoJ06NChUveJiYnR9OnTdfvttyssLExpaWlau3atbDabs8+qVauUnp6u3bt3X1UdKSkpevnll0u0N2nSxI3RAACAiiA/P1+1a9e+Yp9K9xTYzJkz9fjjj6tVq1ayWCwKCwtTQkKC85bZiRMnNGrUKG3evPmqnyZISkpSYmKi87PdbtdPP/2k+vXry2KxeLT+vLw8NWnSRCdOnKiSL1plfJVfVR9jVR+fVPXHyPgqv7Iao8PhUH5+voKDg3+3r6EBKDAwUN7e3iXegpudnX3ZRY4aNGig9evX6+LFi/rxxx8VHByssWPHqkWLFpKkPXv2KCcnR506dXLuY7PZtHXrVs2ePVuFhYUl1hDw9fWVr6+vS1udOnU8MMLLCwgIqLJ/sSXGVxVU9TFW9fFJVX+MjK/yK4sx/t6Vn98YOgnax8dHnTt3VlpamrPNbrcrLS1N3bp1u+K+VqtVISEhunTpktasWaM+ffpIknr27Kn9+/crIyPDuUVGRiouLk4ZGRkeW0AJAABUXobfAktMTFR8fLwiIyPVtWtXzZgxQwUFBUpISJAkDR48WCEhIUpJSZEk7dy5U6dOnVKHDh106tQpTZgwQXa7XWPGjJEk1apVSzfffLPLOfz9/VW/fv0S7QAAwJwMD0ADBgzQmTNnNG7cOJ0+fVodOnRQamqqc2J0Zmamy4vxLl68qOTkZB09elQ1a9ZUbGysli5dWua3rDzF19dX48ePL3HLrapgfJVfVR9jVR+fVPXHyPgqv4owRovjap4VAwAAqEIMXwgRAACgvBGAAACA6RCAAACA6RCAAACA6RCAytGcOXPUrFkzWa1WRUVFadeuXUaX5DFbt25V7969FRwcLIvFovXr1xtdkkelpKSoS5cuqlWrlho2bKj7779fhw8fNrosj5k7d67at2/vXJSsW7du+vDDD40uq8y89tprslgsGj16tNGleMyECRNksVhctlatWhldlkedOnVKDz30kOrXry8/Pz+1a9dOX375pdFleUyzZs1K/De0WCwaNmyY0aV5hM1m00svvaTmzZvLz89PYWFheuWVV67qvV1lgQBUTlavXq3ExESNHz9e6enpioiIUExMjHJycowuzSMKCgoUERGhOXPmGF1Kmfj00081bNgwffHFF9q8ebOKi4t1zz33qKCgwOjSPOKGG27Qa6+9pj179ujLL79Ujx491KdPH/3nP/8xujSP2717t+bNm6f27dsbXYrHtW3bVllZWc7tf18SXZn9/PPPuu2221S9enV9+OGHOnDggKZNm6a6desaXZrH7N692+W/3+bNmyVJ/fv3N7gyz5gyZYrmzp2r2bNn6+DBg5oyZYqmTp2qWbNmGVOQA+Wia9eujmHDhjk/22w2R3BwsCMlJcXAqsqGJMe6deuMLqNM5eTkOCQ5Pv30U6NLKTN169Z1/OMf/zC6DI/Kz893hIeHOzZv3uy44447HKNGjTK6JI8ZP368IyIiwugyyszzzz/v6N69u9FllKtRo0Y5wsLCHHa73ehSPOLee+91DBkyxKXtgQcecMTFxRlSD1eAykFRUZH27Nmj6OhoZ5uXl5eio6O1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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.94, 1])\n",
"plt.legend(loc='lower right')\n",
"\n",
"#test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)"
]
},
{
"cell_type": "code",
"execution_count": 74,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "HCN3gqhtvGzj",
"outputId": "fa85df97-a484-419c-8b14-5b5c1a528be3"
},
"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_6\"</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[1mModel: \"sequential_6\"\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",
"│ flatten_6 (<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\">784</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dense_14 (<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\">50,240</span> │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dense_15 (<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\">256</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">16,640</span> │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dense_16 (<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\">128</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">32,896</span> │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dense_17 (<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\">1,290</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",
"│ flatten_6 (\u001b[38;5;33mFlatten\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m784\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dense_14 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m50,240\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dense_15 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m16,640\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dense_16 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m32,896\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dense_17 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m10\u001b[0m) │ \u001b[38;5;34m1,290\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\">101,066</span> (394.79 KB)\n",
"</pre>\n"
],
"text/plain": [
"\u001b[1m Total params: \u001b[0m\u001b[38;5;34m101,066\u001b[0m (394.79 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\">101,066</span> (394.79 KB)\n",
"</pre>\n"
],
"text/plain": [
"\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m101,066\u001b[0m (394.79 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": [
"fc_model = models.Sequential()\n",
"fc_model.add(layers.Flatten(input_shape=(28, 28, 1)))\n",
"fc_model.add(layers.Dense(64, activation='relu'))\n",
"fc_model.add(layers.Dense(256, activation='relu'))\n",
"fc_model.add(layers.Dense(128, activation='relu'))\n",
"fc_model.add(layers.Dense(10))\n",
"fc_model.summary()"
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "o-lxxt6q1O7S",
"outputId": "0f9e418d-faab-4487-8d1e-420ee9f355ed"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1/19\n",
"\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 23ms/step - accuracy: 0.4177 - loss: 15.6053 - val_accuracy: 0.7225 - val_loss: 1.2895\n",
"Epoch 2/19\n",
"\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 20ms/step - accuracy: 0.7484 - loss: 1.1079 - val_accuracy: 0.8024 - val_loss: 0.7737\n",
"Epoch 3/19\n",
"\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 21ms/step - accuracy: 0.8176 - loss: 0.7050 - val_accuracy: 0.8383 - val_loss: 0.6190\n",
"Epoch 4/19\n",
"\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 20ms/step - accuracy: 0.8530 - loss: 0.5398 - val_accuracy: 0.8599 - val_loss: 0.5313\n",
"Epoch 5/19\n",
"\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 21ms/step - accuracy: 0.8783 - loss: 0.4372 - val_accuracy: 0.8771 - val_loss: 0.4639\n",
"Epoch 6/19\n",
"\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 20ms/step - accuracy: 0.8949 - loss: 0.3731 - val_accuracy: 0.8882 - val_loss: 0.4265\n",
"Epoch 7/19\n",
"\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 19ms/step - accuracy: 0.9082 - loss: 0.3144 - val_accuracy: 0.8944 - val_loss: 0.3981\n",
"Epoch 8/19\n",
"\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9165 - loss: 0.2879 - val_accuracy: 0.9004 - val_loss: 0.3754\n",
"Epoch 9/19\n",
"\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 21ms/step - accuracy: 0.9275 - loss: 0.2425 - val_accuracy: 0.9061 - val_loss: 0.3531\n",
"Epoch 10/19\n",
"\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 19ms/step - accuracy: 0.9331 - loss: 0.2240 - val_accuracy: 0.9078 - val_loss: 0.3421\n",
"Epoch 11/19\n",
"\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 21ms/step - accuracy: 0.9379 - loss: 0.2070 - val_accuracy: 0.9120 - val_loss: 0.3314\n",
"Epoch 12/19\n",
"\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9425 - loss: 0.1831 - val_accuracy: 0.9151 - val_loss: 0.3192\n",
"Epoch 13/19\n",
"\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 19ms/step - accuracy: 0.9485 - loss: 0.1684 - val_accuracy: 0.9179 - val_loss: 0.3143\n",
"Epoch 14/19\n",
"\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 21ms/step - accuracy: 0.9542 - loss: 0.1522 - val_accuracy: 0.9203 - val_loss: 0.3055\n",
"Epoch 15/19\n",
"\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 21ms/step - accuracy: 0.9562 - loss: 0.1423 - val_accuracy: 0.9223 - val_loss: 0.3027\n",
"Epoch 16/19\n",
"\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 21ms/step - accuracy: 0.9596 - loss: 0.1327 - val_accuracy: 0.9239 - val_loss: 0.2996\n",
"Epoch 17/19\n",
"\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 22ms/step - accuracy: 0.9627 - loss: 0.1240 - val_accuracy: 0.9250 - val_loss: 0.2908\n",
"Epoch 18/19\n",
"\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 24ms/step - accuracy: 0.9655 - loss: 0.1138 - val_accuracy: 0.9251 - val_loss: 0.2913\n",
"Epoch 19/19\n",
"\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 25ms/step - accuracy: 0.9674 - loss: 0.1049 - val_accuracy: 0.9282 - val_loss: 0.2847\n"
]
}
],
"source": [
"fc_model.compile(optimizer='adam',\n",
" loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),\n",
" metrics=['accuracy'])\n",
"\n",
"history = fc_model.fit(train_images, train_labels, epochs=19, batch_size=2**11,\n",
" validation_data=(test_images, test_labels))"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f697d01d160>"
]
},
"execution_count": 76,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAkgAAAG2CAYAAACEbnlbAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAdPlJREFUeJzt3Xd4VFX+x/H3pBdIAklIIwSI9F4DiqiIRnBZKSqCqzRBdgGVrD8FpYiusror4qrYlrJKEQtgwcWVKFioBkIRiDQJhCQkQDqpc39/DAxOCiSYZFI+r+eZJ5M75975XgaSD+eee47JMAwDEREREbFysHcBIiIiIjWNApKIiIhIMQpIIiIiIsUoIImIiIgUo4AkIiIiUowCkoiIiEgxCkgiIiIixSggiYiIiBSjgCQiIiJSjAKSiIiISDF2DUjfffcdQ4YMITg4GJPJxLp16666z6ZNm+jevTuurq5cd911LFu2rESbN954g+bNm+Pm5kZERAQ7duyweT03N5cpU6bg6+tLgwYNGDFiBMnJyZV0ViIiIlLb2TUgZWdn06VLF954441ytT9+/Dh33nknt9xyC7GxsTz22GM89NBDfPXVV9Y2q1evJioqirlz57Jr1y66dOlCZGQkZ86csbaZPn06n3/+OR999BGbN2/m9OnTDB8+vNLPT0RERGonU01ZrNZkMrF27VqGDh1aZpsnn3yS9evXs3//fuu2++67j7S0NDZs2ABAREQEvXr14vXXXwfAbDYTGhrKtGnTmDFjBunp6fj7+7Ny5UruvvtuAA4dOkS7du3YunUrffr0qbqTFBERkVrByd4FVMTWrVsZOHCgzbbIyEgee+wxAPLz84mJiWHmzJnW1x0cHBg4cCBbt24FICYmhoKCApvjtG3blmbNml0xIOXl5ZGXl2f93mw2c+7cOXx9fTGZTJV1iiIiIlKFDMMgMzOT4OBgHBzKvpBWqwJSUlISAQEBNtsCAgLIyMjgwoULnD9/nqKiolLbHDp0yHoMFxcXfHx8SrRJSkoq873nz5/PvHnzKudERERExK5OnjxJ06ZNy3y9VgUke5o5cyZRUVHW79PT02nWrBknT57Ey8vLjpWJiIhIeWVkZBAaGkrDhg2v2K5WBaTAwMASd5slJyfj5eWFu7s7jo6OODo6ltomMDDQeoz8/HzS0tJsepF+26Y0rq6uuLq6ltju5eWlgCQiIlLLXG14TK2aB6lv375ER0fbbPv666/p27cvAC4uLvTo0cOmjdlsJjo62tqmR48eODs727SJi4sjPj7e2kZERETqN7v2IGVlZXHkyBHr98ePHyc2NpbGjRvTrFkzZs6cSUJCAu+99x4AkydP5vXXX+eJJ55g/PjxfPPNN3z44YesX7/eeoyoqCjGjBlDz5496d27NwsXLiQ7O5tx48YB4O3tzYQJE4iKiqJx48Z4eXkxbdo0+vbtqzvYREREBLBzQPrpp5+45ZZbrN9fGuMzZswYli1bRmJiIvHx8dbXW7Rowfr165k+fTqvvvoqTZs25d///jeRkZHWNiNHjiQlJYU5c+aQlJRE165d2bBhg83A7VdeeQUHBwdGjBhBXl4ekZGRLFq0qBrOWERERGqDGjMPUm2TkZGBt7c36enpGoMkIiJSS5T393etGoMkIiIiUh0UkERERESKUUASERERKUYBSURERKQYBSQRERGRYhSQRERERIpRQBIREREpRgFJREREpBgFJBEREZFiFJBEREREilFAEhERESlGAUlERESkGAUkERERkWIUkERERESKUUASERERKUYBSURERKQYBSQRERGRYhSQRERERIpRQBIREREpRgFJREREpBgFJBEREZFiFJBEREREilFAEhERESlGAUlERESkGAUkERERkWIUkERERESKUUASERERKUYBSURERKQYBSQRERGRYhSQRERERIpRQBIREREpRgFJREREpBgFJBEREZFiFJBEREREilFAEhERESnG7gHpjTfeoHnz5ri5uREREcGOHTvKbFtQUMCzzz5LeHg4bm5udOnShQ0bNti0ad68OSaTqcRjypQp1jY333xzidcnT55cZecoIiIitYtdA9Lq1auJiopi7ty57Nq1iy5duhAZGcmZM2dKbT9r1izefvttXnvtNQ4cOMDkyZMZNmwYu3fvtrbZuXMniYmJ1sfXX38NwD333GNzrIkTJ9q0e+mll6ruREVERKRWMRmGYdjrzSMiIujVqxevv/46AGazmdDQUKZNm8aMGTNKtA8ODubpp5+26Q0aMWIE7u7uLF++vNT3eOyxx/jiiy84fPgwJpMJsPQgde3alYULF15z7RkZGXh7e5Oeno6Xl9c1H0dERESqT3l/f9utByk/P5+YmBgGDhx4uRgHBwYOHMjWrVtL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du3acf78eevrnTt3JjY2lnPnzpW6f+fOna846Nnf35/ExETr94cPHy7XxMc//vgjd911F3/605/o0qULLVu25JdffrG+3qpVK9zd3a/43p06daJnz568++67rFy5kvHjx1/1fWsTBSS5uoOfQ34WNGpuGaB9BRqgLSJyWaNGjfD19eWdd97hyJEjfPPNN0RFRVlfHzVqFIGBgQwdOpQff/yRY8eO8cknn1hXlJg7dy6rVq2yrkG6b98+XnzxRev+AwYM4PXXX2f37t389NNPTJ48GWdn56vW1apVK77++mu2bNnCwYMHefjhh22m3XFzc+PJJ5/kiSee4L333uPo0aNs27aNxYsX2xznoYce4u9//zuGYdjcXVcXKCDJ1V26vNb1frjC4Luc/EJ+Pm2ZYbxX89Kvp4uI1CcODg588MEHxMTE0LFjR6ZPn84//vEP6+suLi7873//o0mTJgwePJhOnTrx97//3Xpn9s0338xHH33EZ599RteuXRkwYIB1uS2Al19+mdDQUG688UZGjx7N448/bh1HdCWzZs2ie/fuREZGcvPNN1tD2m/Nnj2bv/71r8yZM4d27doxcuTIEovJjxo1CicnJ0aNGoWbW91alNxkVHRCBwEsS414e3uTnp5et+dEOv8rvNoFMMFje8GnWZlNtxxNZfS72wn2dmPLzNIH9omIVFRubi7Hjx+nRYsWde6XcG3366+/Eh4ezs6dO+nevbu9y7G60t+Z8v7+rh0j3MR+9nxg+dqi/xXDEVweoN1DvUciInVaQUEBZ8+eZdasWfTp06dGhaPKoktsUjaz+fLcR93+dNXmP10cf9RT449EROq0H3/8kaCgIHbu3Mlbb71l73KqhHqQpGwnfoC0eHD1grZ/uGLTIrPBbg3QFhGpF26++eYKL7lS26gHScoWu9LytcMwcLnyoL9fkjPJzCvEUwvUiohIHaCAJKXLy4QDn1qeV+DyWjctUCsiInWAfpNJ6X5eCwU54NsKmva6avOYXzVBpIiI1B0KSFK6S5fXuo6+4txHl+z89dIAbd3BJiIitZ8CkpR09ijEbwWTA3S576rNk9JzSUizLFDbtZlP1dcnIiJSxRSQpKRLt/aHDwCv4Ks2v7T+WrsgLVArIiJ1gwKS2DIXXZ4csuv95drlp181/5GISFVo3rw5CxcutHcZ9ZICktg6tgkyEsDN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K513Zmam8fjjjxtbt241jh8/bmzcuNHo3r270apVKyM3N9d6jLr4mV+Snp5ueHh4GG+++Wapx6gNn7kCkh289tprRrNmzQwXFxejd+/exrZt26yv3XTTTcaYMWNs2n/44YdG69atDRcXF6NDhw7G+vXrq7ni3w8o9bF06VJrm+Ln/thjj1n/nAICAozBgwcbu3btqv7if6eRI0caQUFBhouLixESEmKMHDnSOHLkiPX1uvqZG4ZhfPXVVwZgxMXFlXitLn3e3377bal/vy+dn9lsNmbPnm0EBAQYrq6uxq233lrizyQsLMyYO3euzbYr/ayoKa507sePHy/z3/63335rPUbxc7/av5ma4ErnnZOTY9x+++2Gv7+/4ezsbISFhRkTJ04sEXTq4md+ydtvv224u7sbaWlppR6jNnzmJsMwjCrtohIRERGpZTQGSURERKQYBSQRERGRYhSQRERERIpRQBIREREpRgFJREREpBgFJBEREZFiFJBEREREilFAEhGpJCaTiXXr1tm7DBGpBApIIlInjB07FpPJVOJxxx132Ls0EamFnOxdgIhIZbnjjjtYunSpzTZXV1c7VSMitZl6kESkznB1dSUwMNDm0ahRI8By+evNN99k0KBBuLu707JlSz7++GOb/fft28eAAQNwd3fH19eXSZMmkZWVZdNmyZIldOjQAVdXV4KCgpg6darN66mpqQwbNgwPDw9atWrFZ599VrUnLSJVQgFJROqN2bNnM2LECPbs2cP999/Pfffdx8GDBwHIzs4mMjKSRo0asXPnTj766CM2btxoE4DefPNNpkyZwqRJk9i3bx+fffYZ1113nc17zJs3j3vvvZe9e/cyePBg7r//fs6dO1et5ykilcCuS+WKiFSSMWPGGI6Ojoanp6fN4/nnnzcMwzAAY/LkyTb7REREGH/+858NwzCMd955x2jUqJGRlZVlfX39+vWGg4ODdRX24OBg4+mnny6zBsCYNWuW9fusrCwDMP773/9W2nmKSPXQGCQRqTNuueUW3nzzTZttjRs3tj7v27evzWt9+/YlNjYWgIMHD9KlSxc8PT2tr99www2YzWbi4uIwmUycPn2aW2+99Yo1dO7c2frc09MTLy8vzpw5c62nJCJ2ooAkInWGp6dniUtelcXd3b1c7ZydnW2+N5lMmM3mqihJRKqQxiCJSL2xbdu2Et+3a9cOgHbt2rFnzx6ys7Otr//44484ODjQpk0bGjZsSPPmzYmOjq7WmkXEPtSDJCJ1Rl5eHklJSTbbnJyc8PPzA+Cjjz6iZ8+e9OvXjxUrVrBjxw4WL14MwP3338/cuXMZM2YMzzzzDCkpKUybNo0HHniAgIAAAJ555hkmT55MkyZNGDRoEJmZmfz4449Mmzatek9URKqcApKI1BkbNmwgKCjIZlubNm04dOgQYLnD7IMPPuAvf/kLQUFBrFq1ivbt2wPg4eHBV199xaOPPkqvXr3w8PBgxIgRLFiwwHqsMWPGkJubyyuvvMLjjz+On58fd999d/WdoIhUG5NhGIa9ixARqWomk4m1a9cydOhQe5ciIrWAxiCJiIiIFKOAJCIiIlKMxiCJSL2g0QQiUhHqQRIREREpRgFJREREpBgFJBEREZFiFJBEREREilFAEhERESlGAUlERESkGAUkERERkWIUkERERESKUUASERERKeb/AeOO2W1lges6AAAAAElFTkSuQmCC",
"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.8, 1])\n",
"plt.legend(loc='lower right')"
]
}
],
"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
}