diff --git a/Aufgaben/15 - Neural Networks - CNN mit Keras.ipynb b/Aufgaben/15 - Neural Networks - CNN mit Keras.ipynb new file mode 100644 index 0000000..31cd766 --- /dev/null +++ b/Aufgaben/15 - Neural Networks - CNN mit Keras.ipynb @@ -0,0 +1,601 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "id": "I2keZzFjqmcc" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2025-02-13 12:26:06.111195: I tensorflow/core/util/port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.\n", + "2025-02-13 12:26:06.111860: I external/local_xla/xla/tsl/cuda/cudart_stub.cc:32] Could not find cuda drivers on your machine, GPU will not be used.\n", + "2025-02-13 12:26:06.115624: I external/local_xla/xla/tsl/cuda/cudart_stub.cc:32] Could not find cuda drivers on your machine, GPU will not be used.\n", + "2025-02-13 12:26:06.129146: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:477] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n", + "WARNING: All log messages before absl::InitializeLog() is called are written to STDERR\n", + "E0000 00:00:1739445966.152086 49700 cuda_dnn.cc:8310] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n", + "E0000 00:00:1739445966.158703 49700 cuda_blas.cc:1418] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n", + "2025-02-13 12:26:06.181996: I tensorflow/core/platform/cpu_feature_guard.cc:210] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n", + "To enable the following instructions: AVX2 AVX_VNNI FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n" + ] + } + ], + "source": [ + "import tensorflow as tf\n", + "\n", + "from tensorflow.keras import datasets, layers, models\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "MRfXcFGdqsPZ", + "outputId": "6e36b70f-6853-412b-e728-bfea5c8c8ffd" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz\n", + "\u001b[1m11490434/11490434\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 0us/step\n" + ] + } + ], + "source": [ + "(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "SQQ6sLQZrV25", + "outputId": "cc273cbd-fd3c-49ef-ac30-8fdc51dc2d62" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(28, 28)" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_images[1].shape" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 282 + }, + "id": "Y7MiDICErjtO", + "outputId": "ad14bbdb-50c9-4eda-85bd-208cb5b25a44" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.imshow(train_images[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "id": "-TWpc3c-tXkx" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/plex/Dokumente/code/py/ki-dhbw/.venv/lib/python3.12/site-packages/keras/src/layers/convolutional/base_conv.py:107: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n", + " super().__init__(activity_regularizer=activity_regularizer, **kwargs)\n", + "2025-02-13 12:26:22.622094: E external/local_xla/xla/stream_executor/cuda/cuda_driver.cc:152] failed call to cuInit: INTERNAL: CUDA error: Failed call to cuInit: UNKNOWN ERROR (303)\n" + ] + } + ], + "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": 6, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "HIsZlqvyt1qr", + "outputId": "fe8d632b-0fe7-4e36-e70a-bedfc5908deb" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
Model: \"sequential\"\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1mModel: \"sequential\"\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
+       "┃ Layer (type)                     Output Shape                  Param # ┃\n",
+       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
+       "│ conv2d (Conv2D)                 │ (None, 26, 26, 32)     │           320 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ max_pooling2d (MaxPooling2D)    │ (None, 13, 13, 32)     │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ conv2d_1 (Conv2D)               │ (None, 11, 11, 64)     │        18,496 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ max_pooling2d_1 (MaxPooling2D)  │ (None, 5, 5, 64)       │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ conv2d_2 (Conv2D)               │ (None, 3, 3, 64)       │        36,928 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ flatten (Flatten)               │ (None, 576)            │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense (Dense)                   │ (None, 64)             │        36,928 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_1 (Dense)                 │ (None, 10)             │           650 │\n",
+       "└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
+       "
\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 (\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 (\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_1 (\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_1 (\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_2 (\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 (\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 (\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_1 (\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": [ + "
 Total params: 93,322 (364.54 KB)\n",
+       "
\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": [ + "
 Trainable params: 93,322 (364.54 KB)\n",
+       "
\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": [ + "
 Non-trainable params: 0 (0.00 B)\n",
+       "
\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": 24, + "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[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 226ms/step - accuracy: 0.9998 - loss: 6.2877e-04 - val_accuracy: 0.9889 - val_loss: 0.0591\n", + "Epoch 2/9\n", + "\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 217ms/step - accuracy: 0.9994 - loss: 0.0017 - val_accuracy: 0.9910 - val_loss: 0.0513\n", + "Epoch 3/9\n", + "\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 220ms/step - accuracy: 0.9996 - loss: 0.0014 - val_accuracy: 0.9886 - val_loss: 0.0612\n", + "Epoch 4/9\n", + "\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 221ms/step - accuracy: 0.9993 - loss: 0.0019 - val_accuracy: 0.9912 - val_loss: 0.0504\n", + "Epoch 5/9\n", + "\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 215ms/step - accuracy: 0.9998 - loss: 6.4059e-04 - val_accuracy: 0.9893 - val_loss: 0.0592\n", + "Epoch 6/9\n", + "\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 216ms/step - accuracy: 0.9993 - loss: 0.0023 - val_accuracy: 0.9913 - val_loss: 0.0571\n", + "Epoch 7/9\n", + "\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 220ms/step - accuracy: 0.9990 - loss: 0.0032 - val_accuracy: 0.9915 - val_loss: 0.0426\n", + "Epoch 8/9\n", + "\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 219ms/step - accuracy: 0.9995 - loss: 0.0013 - val_accuracy: 0.9909 - val_loss: 0.0450\n", + "Epoch 9/9\n", + "\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 216ms/step - accuracy: 0.9996 - loss: 0.0013 - val_accuracy: 0.9903 - val_loss: 0.0540\n" + ] + } + ], + "source": [ + "model.compile(optimizer='adam',\n", + " loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),\n", + " metrics=['accuracy'])\n", + "\n", + "history = model.fit(train_images, train_labels, epochs=9, batch_size=2**11, \n", + " validation_data=(test_images, test_labels))" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 300 + }, + "id": "Y8mAWZshvBGJ", + "outputId": "cc8ec1f2-4dae-479a-ea06-32e09c484f60" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAG2CAYAAACXuTmvAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAS3pJREFUeJzt3XlcVOX+B/DPzMDMALIpyCagILkiLihptild0vKaed2iJGyzXONXJklupaT3anrVTL2m5m655M3Cq7SY5haIaS65o8jiyqYMw8z5/XFgYFiU0YEDnM/79TovOM8858z3oDCfec5zzigEQRBAREREJCNKqQsgIiIiqm0MQERERCQ7DEBEREQkOwxAREREJDsMQERERCQ7DEBEREQkOwxAREREJDsMQERERCQ7DEBEREQkOwxAREREJDuSBqA9e/agX79+8Pb2hkKhwLZt2+67zc8//4zOnTtDo9GgZcuWWLlyZYU+ixYtQvPmzaHVahEWFoZDhw5Zv3giIiKqtyQNQPn5+QgJCcGiRYuq1f/ChQt47rnn8PTTTyMlJQXjx4/H66+/jp07d5r6bNy4ETExMZgyZQqSk5MREhKCiIgIZGVl1dRhEBERUT2jqCsfhqpQKLB161a88MILVfb54IMPsGPHDhw/ftzUNnToUNy+fRsJCQkAgLCwMHTt2hULFy4EABiNRvj6+mLMmDGYOHFijR4DERER1Q82Uhdgif379yM8PNysLSIiAuPHjwcAFBYWIikpCbGxsabHlUolwsPDsX///ir3q9PpoNPpTOtGoxE3b95EkyZNoFAorHsQREREVCMEQUBubi68vb2hVN77JFe9CkAZGRnw8PAwa/Pw8EBOTg7u3r2LW7duwWAwVNrn1KlTVe43Pj4e06ZNq5GaiYiIqHZdvnwZzZo1u2efehWAakpsbCxiYmJM69nZ2fDz88Ply5fh5ORktec5cO4GFvx4BhobFdS2CmhslNCoVFDbKIsXldhWvK6xUUJtK/YxtdmqoFEpobZRQGOjgq2NEhqVEhpb8+05ckXWZjAKKCwyFi8G6IqM0BmM0BcZoSsyQF8kQGcwlvYxGKDTG6E3GqHTG1FoMKKwSIDOYCiznzJ9i4ziPsq0mfcxQlckQG8w1srxamyVcNTYoFHJorWBg0aFRhpbNNLYwFFjAwdt6XojrQ0aaVRw1NrCQW0DB60NGqltoFTyd5HqP7Pf/5LfTYMR+jK/8/oiATpjyffGin2K/wYUFq+39XLE3zv6WLXOnJwc+Pr6wtHR8b5961UA8vT0RGZmpllbZmYmnJycYGdnB5VKBZVKVWkfT0/PKver0Wig0WgqtDs5OVk1AN1BLo5d0wPQW22fVSkJUJqSUGRb5vviIKVWlbTfu5+m7L5sSwNXaT+V2X6USvGXpcgowFj8teK60dRu7b4GIyrdptK+QnFfQ3FfobhfmfXy+zUY68S0uRojACgyCNAViX/kSgJJkSTHrQCgKl4A2ADKcn+11GXfBKjM/2+bfbUpfbMhCEC+rgi5Oj3yCoqQW1CEXF0Rcgv0KNCLAUsP4KZeXJBXBKDogY6gkcYGjlqb0q9aWzhqxQAlttsWt5e02Yrfl1nX2vJNjVwYjQKMxX93Cg3l3ygYzX4nC8u94Sj5Xlf+sXLruns8VvY5ygaXmvi793ejLV5+wnqvsWVV5/elXgWg7t274/vvvzdr27VrF7p37w4AUKvV6NKlCxITE02TqY1GIxITEzF69OjaLreCsIDGWPJKF/Gds774HXTxu2edvsz3RcbidYPpP3pl7eX3U1bJf+bcB/yjTXQvSgXMAkXpqKWqTPgu166qum/59sraKuurVlk/GOgNRuQVFCFPV4ScgtKAlKcrDUlmbQV6MUCVWy8JjHk6sf1h2CgVxSNMYiByLB5xcizbVmbdQWMDBcQwK17mIqDkcpeSNqG4TVwXHzRrL34MxY8X76bcdubrKOlX8ljx+j2fx1RjaZvpOe/zPEZBgMEo9jUYBRgFsa10KQ0U5b83CAIEQYDRWOZ7AcX7EZ/L7Pv77rPc8xtL6hPbBUF8Q2U03nt/9YFCAfPfZ5WyzJmMsuvFb0YqtItLW6+aCT/VJWkAysvLw9mzZ03rFy5cQEpKCho3bgw/Pz/ExsYiLS0NX331FQBg5MiRWLhwISZMmIARI0bgxx9/xKZNm7Bjxw7TPmJiYhAVFYXQ0FB069YN8+bNQ35+PqKjo2v9+MrzcraDl7NdjexbEITiUwSlpxvMQlY1AlfJKYuqglhl25a8UyjQG+75y6tSKsRFoYCNUgGVSvxepaxsXVnav+TxCutKqJQw9bVRKqAs09d8XVnhcZUFfcuvKxUKNPT34jYqpdnIX/nwYaNquPdQtVUp4eqghquD+oH3IQjiqTwxGOnFEFRQhJwyISnPNOpU2ie3oKg4XOmRWxycBAEoMgq4fUeP23f0AO5a72CpXrBVKaoIGSrTCGjF8FG6XlUAKf+mRF12SkaFx0q3s1EqGsSIpKQB6Pfff8fTTz9tWi+ZhxMVFYWVK1ciPT0dqamppsdbtGiBHTt24N1338X8+fPRrFkz/Oc//0FERISpz5AhQ3Dt2jVMnjwZGRkZ6NixIxISEipMjG5oFApF8TtnFaCVpoai4gBWZBRgqyoNPKoG8stCVF0KhQJaWxW0tiq4O1Y8vV5dRqOAO3qDWSgqG5LEUSrz9bwywUmhEE8iKopDu7he3AiYtSkU5t+jwnbm6yU7KX2s4n5Q6fOXrpfWoahyP6jiMaWi9Kv4N6b4e4UCSoX4HOIbFvPvlQpF8QIolYoq1mH6u6VUACpF6fcVnq/c96bnK96vonhflT2HUqEoXjd/DlXxmy61SgwenEdWM+rMfYDqkpycHDg7OyM7O9uqc4CIiIio5ljy+t1wx7GJiIiIqsAARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLJjI3UBRETUgBiNgFEPGAoBg754KSxuK9du6ldU/LUQMBbdY1t9aR+VGrBzAbQuxV+dy3zvAmicACXf41PVGICIiBoKQQBuXQQyjwP6gqpDhUUBpVz7/UKLYJD6p1BMAWidzEOR1rlcaCrb5lqmzQlQ2UpVONUSBiAiEmWnAWd3Axd/BTSOgHdnwKcz4N4aUKqkro4qo8sF0pKBK4eBK7+LX+9cl7qqchTiaI1KDahsSr9XlnxvW7yoAaWt+brKtritfD8boKgAuHsbKMgGCm4X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4g3DXJubf2SHg9vDPWdBjhi+zhaP8pQflXBtXmaUpycDbE0q+XR006mzI+KVZ0UFgGd7Mez4FI/uNAlk+CSq5+rFVWCAeM+ea9euYfLkycjIyEDHjh2RkJAADw/xM6NSU1OhLPNiX1BQgLi4OJw/fx6NGjVC3759sXr1alP4AcSJy7Gxsbhy5QoaN26MgQMHYsaMGdUOPzUq/Q/g+GYx7FxNrjjkrrQV5y34diuesBzG+QUPS6kq/syqTkDP8eLNwq4cFgPK+V/EkYJbF8UleZW4jUdw6eiQf4/7n4YSBHH+SMlprcsHzO/7YqMVg05J6GkSWDPHShUpFEDjFuLSfqDYZjSI/z6cqEwka5LfCbouqrERoCNrgW/fKV23a1x6ZZbvo+KLdB25nbhsFOSIk49LJlRnmc8lg9JGHCEIeEoMRT6hgI1anH9y/qfi+/Ikipfpl9U4sHTycvPHAFu72joiIiLZqjenwOqqGgtAty4Ce/5VejqrSUsOudc1eVnmH9lxu9wkZVsHoElAxcuybezE02dBz4g3JGwcUKtlExERA9BDqzNXgZH0bl4o85Ede4A710sfc3uk+LRWOODXg6N3REQSqzdzgIjqvJL5I11eFe9anPUncP2MeIVQTV49RkRENYoBiKi6lErxLr+ewVJXQkRED4nXUxMREZHsMAARERGR7DAAERERkewwABEREZHsMAARERGR7DAAERERkewwABEREZHsMAARERGR7DAAERERkewwABEREZHsMAARERGR7DAAERERkewwABEREZHsMAARERGR7DAAERERkewwABEREZHsMAARERGR7DAAERERkewwABEREZHsMAARERGR7DAAERERkewwABEREZHsMAARERGR7DAAERERkewwABEREZHsMAARERGR7DAAERERkewwABEREZHsMAARERGR7DAAERERkewwABEREZHsMAARERGR7DAAERERkewwABEREZHsMAARERGR7DAAERERkewwABEREZHsMAARERGR7DAAERERkewwABEREZHsMAARERGR7DAAERERkewwABEREZHsMAARERGR7DAAERERkewwABEREZHsSB6AFi1ahObNm0Or1SIsLAyHDh2qsq9er8f06dMRGBgIrVaLkJAQJCQkmPUxGAz46KOP0KJFC9jZ2SEwMBAff/wxBEGo6UMhIiKiekLSALRx40bExMRgypQpSE5ORkhICCIiIpCVlVVp/7i4OCxZsgQLFizAiRMnMHLkSAwYMABHjhwx9Zk1axYWL16MhQsX4uTJk5g1axZmz56NBQsW1NZhERERUR2nECQcGgkLC0PXrl2xcOFCAIDRaISvry/GjBmDiRMnVujv7e2NSZMmYdSoUaa2gQMHws7ODmvWrAEAPP/88/Dw8MDy5cur7HM/OTk5cHZ2RnZ2NpycnB7mEImIiKiWWPL6LdkIUGFhIZKSkhAeHl5ajFKJ8PBw7N+/v9JtdDodtFqtWZudnR327t1rWu/RowcSExPx119/AQCOHj2KvXv3ok+fPlXWotPpkJOTY7YQERFRw2Uj1RNfv34dBoMBHh4eZu0eHh44depUpdtERERg7ty5eOKJJxAYGIjExERs2bIFBoPB1GfixInIyclB69atoVKpYDAYMGPGDERGRlZZS3x8PKZNm2adAyMiIqI6T/JJ0JaYP38+goKC0Lp1a6jVaowePRrR0dFQKksPY9OmTVi7di3WrVuH5ORkrFq1Cv/617+watWqKvcbGxuL7Oxs03L58uXaOBwiIiKSiGQjQG5ublCpVMjMzDRrz8zMhKenZ6XbuLu7Y9u2bSgoKMCNGzfg7e2NiRMnIiAgwNTn/fffx8SJEzF06FAAQHBwMC5duoT4+HhERUVVul+NRgONRmOlIyMiIqK6TrIRILVajS5duiAxMdHUZjQakZiYiO7du99zW61WCx8fHxQVFWHz5s3o37+/6bE7d+6YjQgBgEqlgtFotO4BEBERUb0l2QgQAMTExCAqKgqhoaHo1q0b5s2bh/z8fERHRwMAhg8fDh8fH8THxwMADh48iLS0NHTs2BFpaWmYOnUqjEYjJkyYYNpnv379MGPGDPj5+aFdu3Y4cuQI5s6dixEjRkhyjERERFT3SBqAhgwZgmvXrmHy5MnIyMhAx44dkZCQYJoYnZqaajaaU1BQgLi4OJw/fx6NGjVC3759sXr1ari4uJj6LFiwAB999BHeeecdZGVlwdvbG2+99RYmT55c24dHREREdZSk9wGqq3gfICIiovqnXtwHiIiIiEgqDEBEREQkOwxAREREJDsMQERERCQ7DEBEREQkOwxAREREJDsMQERERCQ7DEBEREQkOwxAREREJDsMQERERCQ7DEBEREQkOwxAREREJDsMQERERCQ7DEBEREQkOwxAREREJDsMQERERCQ7DEBEREQkOwxAREREJDsMQERERCQ7DEBEREQkOwxAREREJDsMQERERCQ7DEBEREQkOwxAREREJDsMQERERCQ7DEBEREQkOxYHoObNm2P69OlITU2tiXqIiIiIapzFAWj8+PHYsmULAgIC8Mwzz2DDhg3Q6XQ1URsRERFRjXigAJSSkoJDhw6hTZs2GDNmDLy8vDB69GgkJyfXRI1EREREVqUQBEF4mB3o9Xp8/vnn+OCDD6DX6xEcHIyxY8ciOjoaCoXCWnXWqpycHDg7OyM7OxtOTk5Sl0NERETVYMnrt82DPoler8fWrVuxYsUK7Nq1C48++ihee+01XLlyBR9++CF2796NdevWPejuiYiIiGqMxQEoOTkZK1aswPr166FUKjF8+HB89tlnaN26tanPgAED0LVrV6sWSkRERGQtFgegrl274plnnsHixYvxwgsvwNbWtkKfFi1aYOjQoVYpkIiIiMjaLA5A58+fh7+//z37ODg4YMWKFQ9cFBEREVFNsvgqsKysLBw8eLBC+8GDB/H7779bpSgiIiKimmRxABo1ahQuX75coT0tLQ2jRo2ySlFERERENcniAHTixAl07ty5QnunTp1w4sQJqxRFREREVJMsDkAajQaZmZkV2tPT02Fj88BX1RMRERHVGosD0N/+9jfExsYiOzvb1Hb79m18+OGHeOaZZ6xaHBEREVFNsHjI5l//+heeeOIJ+Pv7o1OnTgCAlJQUeHh4YPXq1VYvkIiIiMjaLA5APj4++OOPP7B27VocPXoUdnZ2iI6OxrBhwyq9JxARERFRXfNAk3YcHBzw5ptvWrsWIiIiolrxwLOWT5w4gdTUVBQWFpq1//3vf3/oooiIiIhq0gPdCXrAgAE4duwYFAoFSj5MvuST3w0Gg3UrJCIiIrIyi68CGzduHFq0aIGsrCzY29vjzz//xJ49exAaGoqff/65BkokIiIisi6LR4D279+PH3/8EW5ublAqlVAqlejZsyfi4+MxduxYHDlypCbqJCIiIrIai0eADAYDHB0dAQBubm64evUqAMDf3x+nT5+2bnVERERENcDiEaD27dvj6NGjaNGiBcLCwjB79myo1WosXboUAQEBNVEjERERkVVZHIDi4uKQn58PAJg+fTqef/55PP7442jSpAk2btxo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Bg8ejEOHDmHp0qVYunSpJMdIREREdY+kAWjIkCG4du0aJk+ejIyMDHTs2BEJCQmmidGpqalm83sKCgoQFxeH8+fPo1GjRujbty9Wr14NFxcXU5+uXbti69atiI2NxfTp09GiRQvMmzcPkZGRtX14REREVEdJeh+guor3ASIiIqp/6sV9gIiIiIikwgBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLJTJwLQokWL0Lx5c2i1WoSFheHQoUNV9tXr9Zg+fToCAwOh1WoREhKChIQEsz5Tp06FQqEwW1q3bl3Th0FERET1hOQBaOPGjYiJicGUKVOQnJyMkJAQREREICsrq9L+cXFxWLJkCRYsWIATJ05g5MiRGDBgAI4cOWLWr127dkhPTzcte/furY3DISIionpA8gA0d+5cvPHGG4iOjkbbtm3xxRdfwN7eHl9++WWl/VevXo0PP/wQffv2RUBAAN5++2307dsXc+bMMetnY2MDT09P0+Lm5lYbh0NERET1gKQBqLCwEElJSQgPDze1KZVKhIeHY//+/ZVuo9PpoNVqzdrs7OwqjPCcOXMG3t7eCAgIQGRkJFJTU6usQ6fTIScnx2whIiKihkvSAHT9+nUYDAZ4eHiYtXt4eCAjI6PSbSIiIjB37lycOXMGRqMRu3btwpYtW5Cenm7qExYWhpUrVyIhIQGLFy/GhQsX8PjjjyM3N7fSfcbHx8PZ2dm0+Pr6Wu8giYiIqM6R/BSYpebPn4+goCC0bt0aarUao0eP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5syBr68vHn/8cbz00kt47733TPN47iUuLg6dO3dGREQEnnrqKVMIK+ujjz7C//3f/2Hy5Mlo06YNhgwZgqysLLM+w4YNg42NDYYNG/ZQn7peVykES296IAM5OTlwdnZGdnY2nJycpC6HiKhBKygowIULF9CiRYsG+UJbX128eBGBgYE4fPgwOnfuLHU5Jvf6/2LJ63f9mGVGREREtUKv1+PGjRuIi4vDo48+WqfCjzXxFBgRERGZ7Nu3D15eXjh8+DC++OILqcupMRwBIiIiIpOnnnrK4o8EqY84AkRERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERCSB5s2bY968eVKXIVsMQERERCQ7DEBERERkEYPBAKPRKHUZD4UBiIiI6hZBAArzpVmqeQfkpUuXwtvbu0II6N+/P0aMGIFz586hf//+8PDwQKNGjdC1a1fs3r37gX8kc+fORXBwMBwcHODr64t33nkHeXl5Zn327duHp556Cvb29nB1dUVERARu3boFADAajZg9ezZatmwJjUYDPz8/zJgxAwDw888/Q6FQ4Pbt26Z9paSkQKFQ4OLFiwCAlStXwsXFBdu3b0fbtm2h0WiQmpqKw4cP45lnnoGbmxucnZ3x5JNPIjk52ayu27dv46233oKHhwe0Wi3at2+P7777Dvn5+XBycsI333xj1n/btm1wcHBAbm7uA/+8qoMfhUFERHWL/g4w01ua5/7wKqB2uG+3QYMGYcyYMfjpp5/Qu3dvAMDNmzeRkJCA77//Hnl5eejbty9mzJgBjUaDr776Cv369cPp06fh5+dncVlKpRL//ve/0aJFC5w/fx7vvPMOJkyYgM8//xyAGFh69+6NESNGYP78+bCxscFPP/0Eg8EAAIiNjcWyZcvw2WefoWfPnkhPT8epU6csquHOnTuYNWsW/vOf/6BJkyZo2rQpzp8/j6ioKCxYsACCIGDOnDno27cvzpw5A0dHRxiNRvTp0we5ublYs2YNAgMDceLECahUKjg4OGDo0KFYsWIF/vGPf5iep2Td0dHR4p+TJRiAiIiILOTq6oo+ffpg3bp1pgD0zTffwM3NDU8//TSUSiVCQkJM/T/++GNs3boV27dvx+jRoy1+vvHjx5u+b968OT755BOMHDnSFIBmz56N0NBQ0zoAtGvXDgCQm5uL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", + "text/plain": [ + "
" + ] + }, + "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": 18, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "HCN3gqhtvGzj", + "outputId": "fa85df97-a484-419c-8b14-5b5c1a528be3" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/plex/Dokumente/code/py/ki-dhbw/.venv/lib/python3.12/site-packages/keras/src/layers/reshaping/flatten.py:37: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n", + " super().__init__(**kwargs)\n" + ] + }, + { + "data": { + "text/html": [ + "
Model: \"sequential_1\"\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1mModel: \"sequential_1\"\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
+       "┃ Layer (type)                     Output Shape                  Param # ┃\n",
+       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
+       "│ flatten_1 (Flatten)             │ (None, 784)            │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_2 (Dense)                 │ (None, 64)             │        50,240 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_3 (Dense)                 │ (None, 256)            │        16,640 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_4 (Dense)                 │ (None, 128)            │        32,896 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_5 (Dense)                 │ (None, 10)             │         1,290 │\n",
+       "└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
+       "
\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_1 (\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_2 (\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_3 (\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_4 (\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_5 (\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": [ + "
 Total params: 101,066 (394.79 KB)\n",
+       "
\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": [ + "
 Trainable params: 101,066 (394.79 KB)\n",
+       "
\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": [ + "
 Non-trainable params: 0 (0.00 B)\n",
+       "
\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": 20, + "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 24ms/step - accuracy: 0.8671 - loss: 0.5650 - val_accuracy: 0.9069 - val_loss: 0.3756\n", + "Epoch 2/19\n", + "\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 21ms/step - accuracy: 0.9247 - loss: 0.2681 - val_accuracy: 0.9186 - val_loss: 0.3140\n", + "Epoch 3/19\n", + "\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 22ms/step - accuracy: 0.9443 - loss: 0.1906 - val_accuracy: 0.9280 - val_loss: 0.2941\n", + "Epoch 4/19\n", + "\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 21ms/step - accuracy: 0.9553 - loss: 0.1517 - val_accuracy: 0.9300 - val_loss: 0.2747\n", + "Epoch 5/19\n", + "\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 22ms/step - accuracy: 0.9658 - loss: 0.1137 - val_accuracy: 0.9368 - val_loss: 0.2674\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.9706 - loss: 0.0940 - val_accuracy: 0.9401 - val_loss: 0.2535\n", + "Epoch 7/19\n", + "\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 21ms/step - accuracy: 0.9754 - loss: 0.0779 - val_accuracy: 0.9435 - val_loss: 0.2439\n", + "Epoch 8/19\n", + "\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 21ms/step - accuracy: 0.9813 - loss: 0.0597 - val_accuracy: 0.9431 - val_loss: 0.2477\n", + "Epoch 9/19\n", + "\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 22ms/step - accuracy: 0.9837 - loss: 0.0517 - val_accuracy: 0.9465 - val_loss: 0.2442\n", + "Epoch 10/19\n", + "\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 23ms/step - accuracy: 0.9857 - loss: 0.0428 - val_accuracy: 0.9492 - val_loss: 0.2357\n", + "Epoch 11/19\n", + "\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 23ms/step - accuracy: 0.9872 - loss: 0.0387 - val_accuracy: 0.9471 - val_loss: 0.2399\n", + "Epoch 12/19\n", + "\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 23ms/step - accuracy: 0.9901 - loss: 0.0319 - val_accuracy: 0.9489 - val_loss: 0.2439\n", + "Epoch 13/19\n", + "\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 20ms/step - accuracy: 0.9927 - loss: 0.0246 - val_accuracy: 0.9487 - val_loss: 0.2542\n", + "Epoch 14/19\n", + "\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 20ms/step - accuracy: 0.9938 - loss: 0.0210 - val_accuracy: 0.9518 - val_loss: 0.2487\n", + "Epoch 15/19\n", + "\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 20ms/step - accuracy: 0.9954 - loss: 0.0165 - val_accuracy: 0.9524 - val_loss: 0.2506\n", + "Epoch 16/19\n", + "\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 20ms/step - accuracy: 0.9956 - loss: 0.0147 - val_accuracy: 0.9520 - val_loss: 0.2557\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.9961 - loss: 0.0135 - val_accuracy: 0.9542 - val_loss: 0.2630\n", + "Epoch 18/19\n", + "\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 23ms/step - accuracy: 0.9971 - loss: 0.0112 - val_accuracy: 0.9539 - val_loss: 0.2572\n", + "Epoch 19/19\n", + "\u001b[1m30/30\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 21ms/step - accuracy: 0.9970 - loss: 0.0114 - val_accuracy: 0.9536 - val_loss: 0.2563\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": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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23LixInyTBMAgGqlsLDQ0SXUCA4LSC4uLurcubOSk5NtbRaLRcnJyerRo0eZ21y6dKnUlelOTk6Siu99cPXPcePGaf369frss8/UvHnzG9aSmpoqSQoICLhmH1dXV3l4eNgtAADHsFqtulRw2SHL1feb8tq8ebN69eolLy8veXt76y9/+YuOHj1qW//TTz9p8ODBatSokerVq6cuXbrYffjoo48+UteuXeXm5iYfHx8NGDDAts5kMmnDhg12+/Py8tLKlSslST/++KNMJpPWrFmj++67T25ublq9erV+/vlnDR48WE2aNFHdunXVvn17vf3223bjWCwWzZkzR3feeadcXV3VtGlTzZo1S5LUp08fjRs3zq7/2bNn5eLiYve+XpM59BRbbGysoqOj1aVLF3Xr1k3z589Xbm6u7VNtw4YNU5MmTZSYmChJioyM1Ny5c9WpUyfbKbZp06YpMjLSFpRiYmKUlJSkDz74QA0aNFBmZqYkydPTU+7u7jp69KiSkpLUv39/eXt7a//+/Zo0aZJ69+6tDh06OOYHAQCokN8Ki3T39E8dsu+DL0Sorkv53z5zc3MVGxurDh066OLFi5o+fboGDBig1NRUXbp0Sffdd5+aNGmiDz/8UP7+/tq3b5/trMjGjRs1YMAATZ06VW+++aYKCgq0adOmCtc8ZcoUvfLKK+rUqZPc3NyUl5enzp07a/LkyfLw8NDGjRv15JNPKiQkxHYvwri4OL3xxhuaN2+eevXqpdOnT9uuER41apTGjRunV155Ra6urpKkVatWqUmTJurTp0+F66uOHBqQBg0apLNnz2r69OnKzMxUx44dtXnzZtuF2xkZGXZHjOLj42UymRQfH6+TJ0/K19dXkZGRtkQrSUuXLpVUfDPIklasWKHhw4fLxcVFW7dutYWxoKAgRUVFKT4+vuonDAD4w4mKirJ7vnz5cvn6+urgwYP66quvdPbsWe3du9f2aes777zT1nfWrFl64okn7K6BDQ0NrXANEydO1MCBA+3ann32Wdvj8ePH69NPP9W7776rbt266cKFC1qwYIEWLVqk6OhoSVJISIh69eolSRo4cKDGjRunDz74QI8//rik4tvqDB8+vNbc5dzhF2mPGzeu1GG6q7Zt22b3vE6dOkpISFBCQsI1x7vRoc+goKBSd9EGANQs7s5OOvhChMP2XRGHDx/W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641wDRIAoOYxmYpPczliMZnKXWZkZKSsVqs2btyoEydO6H//9381dOhQSdKzzz6r9evXa/bs2frf//1fpaamqn379iooKKjwj+PHH3/UX/7yF3Xo0EHvv/++UlJStHjxYkmyjefu7n7N7a+3Tio+fSdJ1hLXXxUWFpY5jsnw84mOjlZqaqoWLFigr776SqmpqfL29i5XXVeNGjVKK1eulFR8em3EiBGl9lPZCEgAAFQRNzc3DRw4UKtXr9bbb7+tVq1a6Z577pFUfMH08OHDNWDAALVv317+/v62C54rKiUlRRaLRa+88oq6d++uu+66S6dO2R9h69Chg5KTk8vcvmXLlnJ3d7/mel9fX0nS6dOnbW2pqanlqu3LL7/UM888o/79+6tt27ZydXXVuXPn7Or66aef9P33319zjL/+9a86fvy4/vu//1sHDx60nQasSgQkAACq0NChQ7Vx40YtX77cdvRIKg4l69atU2pqqr799lsNGTLkpj8Wf+edd6qwsFALFy7UsWPH9NZbb+nVV1+16xMXF6e9e/fqb3/7m/bv36+0tDQtXbpU586dk5ubmyZPnqznnntOb775po4ePapdu3Zp2bJltvGDgoI0Y8YMHT58WBs3btQrr7xSrtpatmypt956S4cOHdLu3bs1dOhQu6NG9913n3r37q2oqCht2bJFP/zwgz755BNt3rzZ1qdhw4YaOHCg/uM//kMPPvig7rjjjpv6OVUEAQkAgCrUp08fNWrUSOnp6RoyZIitfe7cuWrYsKF69uypyMhIRURE2I4uVVRoaKjmzp2rl19+We3atdPq1auVmJho1+euu+7Sv/71L3377bfq1q2bevTooQ8++EB16hRfjjxt2jT9/e9/1/Tp09WmTRsNGjRIZ86ckSQ5Ozvr7bffVlpamjp06KCXX35Z//mf/1mu2pYtW6Zff/1V99xzj5588kk988wzaty4sV2f999/X127dtXgwYN1991367nnnrN9uu6qp556SgUFBRo5cuRN/YwqymS1lvOGDrCTk5MjT09PZWdny8PDw9HlAECtlZeXpx9++EHNmzeXm5ubo8uBg7z11luaNGmSTp06JRcXl+v2vd7vTHnfv/kUGwAAqLYuXbqk06dP66WXXtLTTz99w3BUWTjFBgBANbd69WrVr1+/zOXqvYxqqzlz5qh169by9/dXXFzc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", + "text/plain": [ + "
" + ] + }, + "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 +} diff --git a/requirements.txt b/requirements.txt index b4696d1..054a3c3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,8 +1,10 @@ +absl-py==2.1.0 anyio==4.8.0 argon2-cffi==23.1.0 argon2-cffi-bindings==21.2.0 arrow==1.3.0 asttokens==3.0.0 +astunparse==1.6.3 async-lru==2.0.4 attrs==24.3.0 babel==2.16.0 @@ -19,9 +21,14 @@ decorator==5.1.1 defusedxml==0.7.1 executing==2.2.0 fastjsonschema==2.21.1 +flatbuffers==25.2.10 fonttools==4.55.4 fqdn==1.5.1 +gast==0.6.0 +google-pasta==0.2.0 +grpcio==1.70.0 h11==0.14.0 +h5py==3.12.1 httpcore==1.0.7 httpx==0.28.1 idna==3.10 @@ -49,18 +56,27 @@ jupyterlab-vim==4.1.4 jupyterlab_pygments==0.3.0 jupyterlab_server==2.27.3 jupyterlab_widgets==3.0.13 +keras==3.8.0 kiwisolver==1.4.8 +libclang==18.1.1 +Markdown==3.7 +markdown-it-py==3.0.0 MarkupSafe==3.0.2 matplotlib==3.10.0 matplotlib-inline==0.1.7 +mdurl==0.1.2 mistune==3.1.0 +ml-dtypes==0.4.1 +namex==0.0.8 nbclient==0.10.2 nbconvert==7.16.5 nbformat==5.10.4 nest-asyncio==1.6.0 notebook==7.3.2 notebook_shim==0.2.4 -numpy==2.2.2 +numpy==2.0.2 +opt_einsum==3.4.0 +optree==0.14.0 overrides==7.7.0 packaging==24.2 pandas==2.2.3 @@ -71,6 +87,7 @@ pillow==11.1.0 platformdirs==4.3.6 prometheus_client==0.21.1 prompt_toolkit==3.0.50 +protobuf==5.29.3 psutil==6.1.1 ptyprocess==0.7.0 pure_eval==0.2.3 @@ -86,6 +103,7 @@ referencing==0.36.1 requests==2.32.3 rfc3339-validator==0.1.4 rfc3986-validator==0.1.1 +rich==13.9.4 rpds-py==0.22.3 scikit-learn==1.6.1 scipy==1.15.1 @@ -96,6 +114,10 @@ six==1.17.0 sniffio==1.3.1 soupsieve==2.6 stack-data==0.6.3 +tensorboard==2.18.0 +tensorboard-data-server==0.7.2 +tensorflow==2.18.0 +termcolor==2.5.0 terminado==0.18.1 threadpoolctl==3.5.0 tinycss2==1.4.0 @@ -111,4 +133,7 @@ wcwidth==0.2.13 webcolors==24.11.1 webencodings==0.5.1 websocket-client==1.8.0 +Werkzeug==3.1.3 +wheel==0.45.1 widgetsnbextension==4.0.13 +wrapt==1.17.2 diff --git a/tasks/04 - neuron.ipynb b/tasks/04 - neuron.ipynb index 9d50def..84f9c62 100644 --- a/tasks/04 - neuron.ipynb +++ b/tasks/04 - neuron.ipynb @@ -185,6 +185,13 @@ "print(l2(np.array([1,0,1]), weights[0], weights[1]))\n", "print(l2(np.array([1,1,1]), weights[0], weights[1]))" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/tasks/15 -keeras mit anderen daten.ipynb b/tasks/15 -keeras mit anderen daten.ipynb new file mode 100644 index 0000000..c8c2e63 --- /dev/null +++ b/tasks/15 -keeras mit anderen daten.ipynb @@ -0,0 +1,590 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "id": "I2keZzFjqmcc" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2025-02-13 12:39:12.831009: I tensorflow/core/util/port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.\n", + "2025-02-13 12:39:12.831563: I external/local_xla/xla/tsl/cuda/cudart_stub.cc:32] Could not find cuda drivers on your machine, GPU will not be used.\n", + "2025-02-13 12:39:12.835242: I external/local_xla/xla/tsl/cuda/cudart_stub.cc:32] Could not find cuda drivers on your machine, GPU will not be used.\n", + "2025-02-13 12:39:12.846730: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:477] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n", + "WARNING: All log messages before absl::InitializeLog() is called are written to STDERR\n", + "E0000 00:00:1739446752.866428 56926 cuda_dnn.cc:8310] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n", + "E0000 00:00:1739446752.872158 56926 cuda_blas.cc:1418] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n", + "2025-02-13 12:39:12.891394: I tensorflow/core/platform/cpu_feature_guard.cc:210] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n", + "To enable the following instructions: AVX2 AVX_VNNI FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n" + ] + } + ], + "source": [ + "import tensorflow as tf\n", + "\n", + "from tensorflow.keras import datasets, layers, models\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "MRfXcFGdqsPZ", + "outputId": "6e36b70f-6853-412b-e728-bfea5c8c8ffd" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz\n", + "\u001b[1m170498071/170498071\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m16s\u001b[0m 0us/step\n" + ] + } + ], + "source": [ + "(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.cifar10.load_data()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "SQQ6sLQZrV25", + "outputId": "cc273cbd-fd3c-49ef-ac30-8fdc51dc2d62" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(32, 32, 3)" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "train_images[1].shape" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 282 + }, + "id": "Y7MiDICErjtO", + "outputId": "ad14bbdb-50c9-4eda-85bd-208cb5b25a44" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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hJLC733ve+Err7wS/uEPfwjDMAwffPDBsLa2Nnz66afDPXv2hNddd104c+bMcGBgwHPnNh+1nb29veHXv/71cNu2beH+/fvDF154IfyTP/mT8KKLLgqz2azv1p3dcccdYU1NTbh169bwyJEjg5f+/v7Bmttvvz2cPn16+OKLL4Y7d+4MW1pawpaWFo9d233cdu7duzd84IEHwp07d4b79+8Pn3766XDWrFnhkiVLPHdu861vfStsb28P9+/fH+7Zsyf81re+FUYikfA//uM/wjA8d/tyTAygMAzDH/3oR+H06dPDZDIZXnHFFeH27dt9tzSsbrzxxrCxsTFMJpPhJz7xifDGG28M9+7d67uts/KrX/0qlPShy+rVq8MwfP9U7O985zthfX19mEqlwqVLl4YdHR1+mz4DH7Wd/f394TXXXBNOmTIlTCQS4YwZM8Jbb711zP3xdKrtkxQ+9thjgzUDAwPhX/7lX4YTJ04MKyoqwi984QvhkSNH/DV9Bj5uOw8cOBAuWbIkrKurC1OpVHjhhReGf/M3fxP29PT4bdzoL/7iL8IZM2aEyWQynDJlSrh06dLB4ROG525f8nUMAAAvRv17QACA8YkBBADwggEEAPCCAQQA8IIBBADwggEEAPCCAQQA8IIBBADwggEEAPCCAQQA8IIBBADwggEEAPDi/wGBZMk/q6p/1gAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.imshow(train_images[2000])" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "id": "-TWpc3c-tXkx" + }, + "outputs": [], + "source": [ + "model = models.Sequential()\n", + "model.add(layers.Conv2D(64, (3, 3), activation='relu', input_shape=(32,32,3)))\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": 28, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "HIsZlqvyt1qr", + "outputId": "fe8d632b-0fe7-4e36-e70a-bedfc5908deb" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
Model: \"sequential_5\"\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1mModel: \"sequential_5\"\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
+       "┃ Layer (type)                     Output Shape                  Param # ┃\n",
+       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
+       "│ conv2d_15 (Conv2D)              │ (None, 30, 30, 64)     │         1,792 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ max_pooling2d_10 (MaxPooling2D) │ (None, 15, 15, 64)     │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ conv2d_16 (Conv2D)              │ (None, 13, 13, 64)     │        36,928 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ max_pooling2d_11 (MaxPooling2D) │ (None, 6, 6, 64)       │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ conv2d_17 (Conv2D)              │ (None, 4, 4, 64)       │        36,928 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ flatten_5 (Flatten)             │ (None, 1024)           │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_12 (Dense)                │ (None, 64)             │        65,600 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_13 (Dense)                │ (None, 10)             │           650 │\n",
+       "└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
+       "
\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_15 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m30\u001b[0m, \u001b[38;5;34m30\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m1,792\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ max_pooling2d_10 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m15\u001b[0m, \u001b[38;5;34m15\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ conv2d_16 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m13\u001b[0m, \u001b[38;5;34m13\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m36,928\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ max_pooling2d_11 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m6\u001b[0m, \u001b[38;5;34m6\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ conv2d_17 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m4\u001b[0m, \u001b[38;5;34m4\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;34m1024\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;34m65,600\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": [ + "
 Total params: 141,898 (554.29 KB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m141,898\u001b[0m (554.29 KB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Trainable params: 141,898 (554.29 KB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m141,898\u001b[0m (554.29 KB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Non-trainable params: 0 (0.00 B)\n",
+       "
\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": 30, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "uslCpPtpt2tD", + "outputId": "0f1211aa-afb1-45e1-c6fb-c4865b93892f" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/6\n", + "\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 556ms/step - accuracy: 0.1200 - loss: 2.2874 - val_accuracy: 0.1855 - val_loss: 2.1505\n", + "Epoch 2/6\n", + "\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m14s\u001b[0m 560ms/step - accuracy: 0.2117 - loss: 2.0862 - val_accuracy: 0.3449 - val_loss: 1.7981\n", + "Epoch 3/6\n", + "\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 594ms/step - accuracy: 0.3619 - loss: 1.7431 - val_accuracy: 0.3989 - val_loss: 1.6349\n", + "Epoch 4/6\n", + "\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m14s\u001b[0m 564ms/step - accuracy: 0.4179 - loss: 1.6021 - val_accuracy: 0.4420 - val_loss: 1.5258\n", + "Epoch 5/6\n", + "\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m14s\u001b[0m 564ms/step - accuracy: 0.4615 - loss: 1.4910 - val_accuracy: 0.4814 - val_loss: 1.4457\n", + "Epoch 6/6\n", + "\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m14s\u001b[0m 561ms/step - accuracy: 0.5026 - loss: 1.3813 - val_accuracy: 0.4991 - val_loss: 1.3774\n" + ] + } + ], + "source": [ + "model.compile(optimizer='adam',\n", + " loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),\n", + " metrics=['accuracy'])\n", + "\n", + "history = model.fit(train_images, train_labels, epochs=6, batch_size=2**11, \n", + " validation_data=(test_images, test_labels))" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 300 + }, + "id": "Y8mAWZshvBGJ", + "outputId": "cc8ec1f2-4dae-479a-ea06-32e09c484f60" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAG2CAYAAACDLKdOAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAT2NJREFUeJzt3Xl4VPXZxvHvTPY9IXtCIOyLEHYiihuiCEpFbYtIBVFrbQGX1AoogrYqqEXRglp9EVxAqFqQyqKIRS2gIBgWSSJbCIGsQHayzcz7x8DAkIAEkkxyuD/XNRc5Z86ZeWaK5O5vNdlsNhsiIiIiBmF2dQEiIiIi9UnhRkRERAxF4UZEREQMReFGREREDEXhRkRERAxF4UZEREQMReFGREREDEXhRkRERAxF4UZEREQMReFGREREDMWl4eabb75h+PDhxMTEYDKZWLZs2S/es27dOnr37o2Xlxft27dnwYIFDV6niIiINB8uDTelpaX06NGDuXPnntf1+/fv5+abb+a6664jOTmZRx55hPvvv5/PP/+8gSsVERGR5sLUVDbONJlMLF26lBEjRpz1mkmTJrFixQp27tzpOHfnnXdSUFDA6tWrG6FKERERaercXV1AXWzcuJHBgwc7nRsyZAiPPPLIWe+pqKigoqLCcWy1Wjl69CihoaGYTKaGKlVERETqkc1mo7i4mJiYGMzmc3c8Natwk52dTWRkpNO5yMhIioqKOH78OD4+PjXumTFjBs8880xjlSgiIiIN6ODBg7Rs2fKc1zSrcHMhpkyZQlJSkuO4sLCQVq1acfDgQQIDA11YmYiIiJyvoqIi4uLiCAgI+MVrm1W4iYqKIicnx+lcTk4OgYGBtbbaAHh5eeHl5VXjfGBgoMKNiIhIM3M+Q0qa1To3AwYMYO3atU7n1qxZw4ABA1xUkYiIiDQ1Lg03JSUlJCcnk5ycDNineicnJ5ORkQHYu5TGjBnjuP7BBx9k3759PP7446SmpvL666/zr3/9i0cffdQV5YuIiEgT5NJw88MPP9CrVy969eoFQFJSEr169WLatGkAZGVlOYIOQJs2bVixYgVr1qyhR48ezJo1i//7v/9jyJAhLqlfREREmp4ms85NYykqKiIoKIjCwkKNuREREWkm6vL7u1mNuRERERH5JQo3IiIiYigKNyIiImIoCjciIiJiKAo3IiIiYigKNyIiImIoCjciIiJiKAo3IiIiYigKNyIiImIoCjciIiJiKAo3IiIiYigKNyIiImIoCjciIiJiKAo3IiIiYigKNyIiImIoCjciIiJiKAo3IiIiYigKNyIiImIoCjciIiJiKAo3IiIiYigKNyIiImIoCjciIiJiKAo3IiIiYigKNyIiImIoCjciIiJiKAo3IiIiYigKNyIiImIoCjciIiJiKAo3IiIiYigKNyIiImIoCjciIiJiKAo3IiIiYigKNyIiImIoCjciIiJiKAo3IiIiYigKNyIiImIoCjciIiJiKAo3IiIiYigKNyIiImIoCjciIiJiKAo3IiIiYigKNyIiImIoCjciIiJiKAo3IiIiYigKNyIiImIoCjciIiJiKAo3IiIiYigKNyIiImIoCjciIiJiKAo3IiIiYigKNyIiImIoCjciIiJiKAo3IiIiYigKNyIiImIoCjciIiJiKAo3IiIiYigKNyIiImIoCjciIiJiKAo3IiIiYigKNyIiImIoCjciIiJiKAo3IiIiYigKNyIiImIoLg83c+fOJT4+Hm9vbxITE9m0adM5r589ezadOnXCx8eHuLg4Hn30UcrLyxupWhEREWnqXBpulixZQlJSEtOnT2fr1q306NGDIUOGkJubW+v1ixYtYvLkyUyfPp2UlBTmzZvHkiVLeOKJJxq5chEREWmqXBpuXn75ZX7/+98zbtw4unbtyptvvomvry/vvPNOrddv2LCBK6+8krvuuov4+HhuvPFGRo0a9YutPSIiInLpcFm4qaysZMuWLQwePPhUMWYzgwcPZuPGjbXec8UVV7BlyxZHmNm3bx8rV65k2LBhZ32fiooKioqKnB4iIiJiXO6ueuP8/HwsFguRkZFO5yMjI0lNTa31nrvuuov8/HwGDhyIzWajurqaBx988JzdUjNmzOCZZ56p19pFRESk6XL5gOK6WLduHc8//zyvv/46W7du5d///jcrVqzgb3/721nvmTJlCoWFhY7HwYMHG7FiERERaWwua7kJCwvDzc2NnJwcp/M5OTlERUXVes9TTz3F3Xffzf333w9A9+7dKS0t5YEHHuDJJ5/EbK6Z1by8vPDy8qr/DyAiIiJNkstabjw9PenTpw9r1651nLNaraxdu5YBAwbUek9ZWVmNAOPm5gaAzWZruGJFRESk2XBZyw1AUlISY8eOpW/fvvTv35/Zs2dTWlrKuHHjABgzZgyxsbHMmDEDgOHDh/Pyyy/Tq1cvEhMT2bNnD0899RTDhw93hBwRERG5tLk03IwcOZK8vDymTZtGdnY2PXv2ZPXq1Y5BxhkZGU4tNVOnTsVkMjF16lQOHTpEeHg4w4cP57nnnnPVRxAREZEmxmS7xPpzioqKCAoKorCwkMDAQFeXIyIiIuehLr+/m9VsKREREZFfonAjIiIihqJwIyIiIoaicCMiIiKGonAjIiIihqJwIyIiIoaicCMiIiKGonAjIiIihqJwIyIiIoaicCMiIiKGonAjIiIihqJwIyIiIoaicCMiIiKGonAjIiIihqJwIyIiIoaicCMiIiKGonAjIiIihqJwIyIiIoaicCMiIiKGonAjIiIihqJwIyIiIoaicCMiIiKGonAjIiIihqJwIyIiIoaicCMiIiKGonAjIiIihqJwIyIiIoaicCMiIiKGonAjIiIihqJwIyIiIoaicCMiIiKGonAjIiIihqJwIyIiIoaicCMiIiKGonAjIiIihqJwIyIiIoaicCMiIiKGonAjIiIihqJwIyIiIoaicCMiIiKGonAjIiIihqJwIyIiIoaicCMiIiKGonAjIiIihqJwIyIiIoaicCMiIiKGonAjIiIihqJwIyIiIoaicCMiIiKGonAjIiIihqJwIyIiIoaicCMiIiKGonAjIiIihqJwIyIiIoaicCMiIiKGonAjIiIihqJwIyIiIoaicCMiIiKGonAjIiIihqJwIyIiIoaicCMiIiKGonAjIiIihqJwIyIiIobi8nAzd+5c4uPj8fb2JjExkU2bNp3z+oKCAsaPH090dDReXl507NiRlStXNlK1IiIi0tS5u/LNlyxZQlJSEm+++SaJiYnMnj2bIUOGkJaWRkRERI3rKysrueGGG4iIiODjjz8mNjaWAwcOEBwc3PjFi4iISJNkstlsNle9eWJiIv369WPOnDkAWK1W4uLimDhxIpMnT65x/ZtvvslLL71EamoqHh4eF/SeRUVFBAUFUVhYSGBg4EXVLyIiIo2jLr+/XdYtVVlZyZYtWxg8ePCpYsxmBg8ezMaNG2u9Z/ny5QwYMIDx48cTGRlJt27deP7557FYLGd9n4qKCoqKipweIiIiYlwuCzf5+flYLBYiIyOdzkdGRpKdnV3rPfv27ePjjz/GYrGwcuVKnnrqKWbNmsWzzz571veZMWMGQUFBjkdcXFy9fg4RERFpWlw+oLgurFYrERERvPXWW/Tp04eRI0fy5JNP8uabb571nilTplBYWOh4HDx4sBErFhERkcbmsgHFYWFhuLm5kZOT43Q+JyeHqKioWu+Jjo7Gw8MDNzc3x7kuXbqQnZ1NZWUlnp6eNe7x8vLCy8urfosXERGRJstlLTeenp706dOHtWvXOs5ZrVbWrl3LgAEDar3nyiuvZM+ePVitVse5n3/+mejo6FqDjYiIiFx6XNotlZSUxNtvv827775LSkoKf/zjHyktLWXcuHEAjBkzhilTpjiu/+Mf/8jRo0d5+OGH+fnnn1mxYgXPP/8848ePd9VHEBERkSbGpevcjBw5kry8PKZNm0Z2djY9e/Zk9erVjkHGGRkZmM2n8ldcXByff/45jz76KAkJCcTGxvLwww8zadIkV30EERERaWJcus6NK2idGxERkeanWaxzIyIiItIQ6hxu4uPj+etf/0pGRkZD1CMiIiJyUeocbh555BH+/e9/07ZtW2644QYWL15MRUVFQ9QmIiIiUmcXFG6Sk5PZtGkTXbp0YeLEiURHRzNhwgS2bt3aEDWKiIiInLeLHlBcVVXF66+/zqRJk6iqqqJ79+489NBDjBs3DpPJVF911hsNKBYREWl+6vL7+4KngldVVbF06VLmz5/PmjVruPzyy7nvvvvIzMzkiSee4Msvv2TRokUX+vIiIiIiF6TO4Wbr1q3Mnz+fDz/8ELPZzJgxY3jllVfo3Lmz45rbbruNfv361WuhIiIiIuejzuGmX79+3HDDDbzxxhuMGDECDw+PGte0adOGO++8s14KFBEREamLOoebffv20bp163Ne4+fnx/z58y+4KBEREZELVefZUrm5uXz//fc1zn///ff88MMP9VKUiIiIyIWqc7gZP348Bw8erHH+0KFD2sBSREREXK7O4WbXrl307t27xvlevXqxa9eueilKRERE5ELVOdx4eXmRk5NT43xWVhbu7i7dZFxERESk7uHmxhtvZMqUKRQWFjrOFRQU8MQTT3DDDTfUa3EiIiIidVXnppa///3vXH311bRu3ZpevXoBkJycTGRkJO+//369FygiIiJSF3UON7GxsWzfvp2FCxeybds2fHx8GDduHKNGjap1zRsRERGRxnRBg2T8/Px44IEH6rsWERERkYt2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Tt9PU6ap4CIi0miOV1noOu1zl7z3rr8Owdfz/H/tlZaWkpSUREJCAiUlJUybNo3bbruN5ORkysrKuOaaa4iNjWX58uVERUWxdetWrFb7XoIrVqzgtttu48knn+S9996jsrKSlStX1rnmyZMnM2vWLHr16oW3tzfl5eX06dOHSZMmERgYyIoVK7j77rtp164d/fv3B2DKlCm8/fbbvPLKKwwcOJCsrCxSU1MBuP/++5kwYQKzZs3Cy8sLgA8++IDY2FgGDRpU5/qaKoUbERGRWtxxxx1Ox++88w7h4eHs2rWLDRs2kJeXx+bNm2nRogUA7du3d1z73HPPceedd/LMM884zvXo0aPONTzyyCPcfvvtTucee+wxx88TJ07k888/51//+hf9+/enuLiYV199lTlz5jB27FgA2rVrx8CBAwG4/fbbmTBhAp9++im//e1vAViwYAH33HOPodYiUrgREZFG4+Phxq6/DnHZe9fF7t27mTZtGt9//z35+fmOVpmMjAySk5Pp1auXI9icKTk5md///vcXXXPfvn2dji0WC88//zz/+te/OHToEJWVlVRUVODr6wtASkoKFRUVXH/99bW+nre3N3fffTfvvPMOv/3tb9m6dSs7d+5k+fLlF11rU6JwIyIijcZkMtWpa8iVhg8fTuvWrXn77beJiYnBarXSrVs3Kisrf3EriV963mQy1RgDVNuAYT8/P6fjl156iVdffZXZs2fTvXt3/Pz8eOSRR6isrDyv9wV711TPnj3JzMxk/vz5DBo0iNatW//ifc2JBhSLiIic4ciRI6SlpTF16lSuv/56unTpwrFjxxzPJyQkkJyczNGjR2u9PyEh4ZwDdMPDw8nKynIc7969m7Kysl+sa/369dx666387ne/o0ePHrRt25aff/7Z8XyHDh3w8fE553t3796dvn378vbbb7No0SLuvffeX3zf5kbhRkRE5AwhISGEhoby1ltvsWfPHr766iuSkpIcz48aNYqoqChGjBjB+vXr2bdvH5988gkbN24EYPr06Xz44YdMnz6dlJQUduzYwQsvvOC4f9CgQcyZM4cff/yRH374gQcffBAPD49frKtDhw6sWbOGDRs2kJKSwh/+8AdycnIcz3t7ezNp0iQef/xx3nvvPfbu3ct3333HvHnznF7n/vvvZ+bMmdhsNqdZXEahcCMiInIGs9nM4sWL2bJlC926dePRRx/lpZdecjzv6enJF198QUREBMOGDaN79+7MnDnTsZP1tddey0cffcTy5cvp2bMngwYNYtOmTY77Z82aRVxcHFdddRV33XUXjz32mGPczLlMnTqV3r17M2TIEK699lpHwDrdU089xZ///GemTZtGly5dGDlyJLm5uU7XjBo1Cnd3d0aNGoW3t/dFfFNNk8lW14n/zVxRURFBQUEUFhYSGBjo6nJERAytvLyc/fv306ZNG0P+Em2u0tPTadeuHZs3b6Z3796uLsfhXH9f6vL7u3mM6hIREZGLVlVVxZEjR5g6dSqXX355kwo29UndUiIiIpeI9evXEx0dzebNm3nzzTddXU6DUcuNiIjIJeLaa6+t8zYUzZFabkRERMRQFG5ERETEUBRuRERExFAUbkRERMRQFG5ERETEUBRuRERExFAUbkRERBpAfHw8s2fPdnUZlySFGxERETEUhRsRERFxYrFYsFqtri7jginciIhI47HZoLLUNY86rMz71ltvERMTU+MX/K233sq9997L3r17ufXWW4mMjMTf359+/frx5ZdfXvDX8vLLL9O9e3f8/PyIi4vjT3/6EyUlJU7XrF+/nmuvvRZfX19CQkIYMmQIx44dA8BqtfLiiy/Svn17vLy8aNWqFc899xwA69atw2QyUVBQ4Hit5ORkTCYT6enpACxYsIDg4GCWL19O165d8fLyIiMjg82bN3PDDTcQFhZGUFAQ11xzDVu3bnWqq6CggD/84Q9ERkbi7e1Nt27d+OyzzygtLSUwMJCPP/7Y6fply5bh5+dHcXHxBX9fv0TbL4iISOOpKoPnY1zz3k8cBk+/87r0N7/5DRMnTuS///0v119/PQBHjx5l9erVrFy5kpKSEoYNG8Zzzz2Hl5cX7733HsOHDyctLY1WrVrVuTSz2cxrr71GmzZt2LdvH3/60594/PHHef311wF7GLn++uu59957efXVV3F3d+e///0vFosFgClTpvD222/zyiuvMHDgQLKyskhNTa1TDWVlZbzwwgv83//9H6GhoURERLBv3z7Gjh3LP/7xD2w2G7NmzWLYsGHs3r2bgIAArFYrQ4cOpbi4mA8++IB27dqxa9cu3Nzc8PPz484772T+/Pn8+te/drzPyeOAgIA6f0/nS+FGRETkDCEhIQwdOpRFixY5ws3HH39MWFgY1113HWazmR49ejiu/9vf/sbSpUtZvnw5EyZMqPP7PfLII46f4+PjefbZZ3nwwQcd4ebFF1+kb9++jmOAyy67DIDi4mJeffVV5syZw9ixYwFo164dAwcOrFMNVVVVvP76606fa9CgQU7XvPXWWwQHB/P1119zyy238OWXX7Jp0yZSUlLo2LEjAG3btnVcf//993PFFVeQlZVFdHQ0ubm5rFy58qJauc6Hwo2IiDQeD197C4qr3rsORo8eze9//3tef/11vLy8WLhwIXfeeSdms5mSkhKefvppVqxYQVZWFtXV1Rw/fpyMjIwLKu3LL79kxowZpKamUlRURHV1NeXl5ZSVleHr60tycjK/+c1var03JSWFiooKRwi7UJ6eniQkJDidy8nJYerUqaxbt47c3FwsFgtlZWWOz5mcnEzLli0dweZM/fv357LLLuPdd99l8uTJfPDBB7Ru3Zqrr776omr9JRpzIyIijcdksncNueJhMtWp1OHDh2Oz2VixYgUHDx7k22+/ZfTo0QA89thjLF26lOeff55vv/2W5ORkunfvTmVlZZ2/kvT0dG655RYSEhL45JNP2LJlC3PnzgVwvJ6Pj89Z7z/Xc2Dv8gKcdgOvqqqq9XVMZ3xHY8eOJTk5mVdffZUNGzaQnJxMaGjoedV10v3338+CBQsAe5fUuHHjarxPfVO4ERERqYW3tze33347Cxcu5MMPP6RTp0707t0bsA/uveeee7jtttvo3r07UVFRjsG5dbVlyxasViuzZs3i8ssvp2PHjhw+7Ny6lZCQwNq1a2u9v0OHDvj4+Jz1+fDwcACysrIc55KTk8+rtvXr1/PQQw8xbNgwLrvsMry8vMjPz3eqKzMzk59//vmsr/G73/2OAwcO8Nprr7Fr1y5H11lDUrgRERE5i9GjR7NixQreeecdR6sN2APFv//9b5KTk9m2bRt33XXXBU+dbt++PVVVVfzjH/9g3759vP/++7z55ptO10yZMoXNmzfzpz/9ie3bt5Oamsobb7xBfn4+3t7eTJo0iccff5z33nuPvXv38t133zFv3jzH68fFxfH000+ze/duVqxYwaxZs86rtg4dOvD++++TkpLC999/z+jRo51aa6655hquvvpq7rjjDtasWcP+/ftZtWoVq1evdlwTEhLC7bffzl/+8hduvPFGWrZseUHfU10o3IiIiJzF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FTt37iQgIKDR61G4EZGzGj9+PDt37nRp37mRderUieTkZAoLC/n4448ZO3YsX3/9tQJOPTp48CAPP/wwa9aswdvb29XlGNbQoUMdPyckJJCYmEjr1q3517/+5ZJuVoWbixQWFoabmxs5OTlO53NycoiKinJRVSIXb8KECXz22Wd88803tGzZ0tXlGJKnpyft27cHoE+fPmzevJlXX32Vf/7zny6uzDi2bNlCbm4uvXv3dpyzWCx88803zJkzh4qKCtzc3FxYoTEFBwfTsWNH9uzZ45L315ibi+Tp6UmfPn1Yu3at45zVamXt2rXqO5dmyWazMWHCBJYuXcpXX31FmzZtXF3SJcNqtVJRUeHqMgzl+uuvZ8eOHSQnJzseffv2ZfTo0SQnJyvYNJCSkhL27t1LdHS0S95fLTf1ICkpibFjx9K3b1/69+/P7NmzKS0tZdy4ca4uzVBKSkqc/l/A/v37SU5OpkWLFrRq1cqFlRnL+PHjWbRoEZ9++ikBAQFkZ2cDEBQUhI+Pj4urM44pU6YwdOhQWrVqRXFxMYsWLWLdunV8/vnnri7NUAICAmqMF/Pz8yM0NFTjyOrRY489xvDhw2ndujWHDx9m+vTpuLm5MWrUKJfUo3BTD0aOHEleXh7Tpk0jOzubnj17snr16hqDjOXi/PDDD1x33XWO46SkJADGjh3LggULXFSV8bzxxhsAXHvttU7n58+fzz333NP4BRlUbm4uY8aMISsri6CgIBISEvj888+54YYbXF2aSJ1lZmYyatQojhw5Qnh4OAMHDuS7774jPDzcJfVonRsRERExFI25EREREUNRuBERERFDUbgRERERQ1G4EREREUNRuBERERFDUbgRERERQ1G4EREREUNRuBGRS57JZGLZsmWuLkNE6onCjYi41D333IPJZKrxuOmmm1xdmog0U9p+QURc7qabbmL+/PlO57y8vFxUjYg0d2q5ERGX8/LyIioqyukREhIC2LuM3njjDYYOHYqPjw9t27bl448/drp/x44dDBo0CB8fH0JDQ3nggQcoKSlxuuadd97hsssuw8vLi+joaCZMmOD0fH5+Prfddhu+vr506NCB5cuXN+yHFpEGo3AjIk3eU089xR133MG2bdsYPXo0d955JykpKQCUlpYyZMgQQkJC2Lx5Mx999BFffvmlU3h54403GD9+PA888AA7duxg+fLltG/f3uk9nnnmGX7729+yfft2hg0bxujRozl69Gijfk4RqSc2EREXGjt2rM3Nzc3m5+fn9HjuuedsNpvNBtgefPBBp3sSExNtf/zjH202m8321ltv2UJCQmwlJSWO51esWGEzm8227Oxsm81ms8XExNiefPLJs9YA2KZOneo4LikpsQG2VatW1dvnFJHGozE3IuJy1113HW+88YbTuRYtWjh+HjBggNNzAwYMIDk5GYCUlBR69OiBn5+f4/krr7wSq9VKWloaJpOJw4cPc/3115+zhoSEBMfPfn5+BAYGkpube6EfSURcSOFGRFzOz8+vRjdRffHx8Tmv6zw8PJyOTSYTVqu1IUoSkQamMTci0uR99913NY67dOkCQJcuXdi2bRulpaWO59evX4/ZbKZTp04EBAQQHx/P2rVrG7VmEXEdtdyIiMtVVFSQnZ3tdM7d3Z2wsDAAPvroI/r27cvAgQNZuHAhmzZtYt68eQCMHj2a6dOnM3bsWJ5++mny8vKYOHEid999N5GRkQA8/fTTPPjgg0RERDB06FCKi4tZv349EydObNwPKiKNQuFGRFxu9erVREdHO53r1KkTqampgH0m0+LFi/nTn/5EdHQ0H374IV27dgXA19eXzz//nIcffph+/frh6+vLHXfcwcsvv+x4rbFjx1JeXs4rr7zCY489RlhYGL/+9a8b7wOKSKMy2Ww2m6uLEBE5G5PJxNKlSxkxYoSrSxGRZkJjbkRERMRQFG5ERETEUDTmRkSaNPWci0hdqeVGREREDEXhRkRERAxF4UZEREQMReFGREREDEXhRkRERAxF4UZEREQMReFGREREDEXhRkRERAxF4UZEREQM5f8BkAPSPxbM718AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "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.0, 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": 33, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "HCN3gqhtvGzj", + "outputId": "fa85df97-a484-419c-8b14-5b5c1a528be3" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
Model: \"sequential_7\"\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1mModel: \"sequential_7\"\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
+       "┃ Layer (type)                     Output Shape                  Param # ┃\n",
+       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
+       "│ flatten_7 (Flatten)             │ (None, 3072)           │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_18 (Dense)                │ (None, 64)             │       196,672 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_19 (Dense)                │ (None, 256)            │        16,640 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_20 (Dense)                │ (None, 128)            │        32,896 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_21 (Dense)                │ (None, 10)             │         1,290 │\n",
+       "└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
+       "
\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_7 (\u001b[38;5;33mFlatten\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m3072\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dense_18 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m196,672\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dense_19 (\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_20 (\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_21 (\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": [ + "
 Total params: 247,498 (966.79 KB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m247,498\u001b[0m (966.79 KB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Trainable params: 247,498 (966.79 KB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m247,498\u001b[0m (966.79 KB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Non-trainable params: 0 (0.00 B)\n",
+       "
\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=(32, 32, 3)))\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": 34, + "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[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 44ms/step - accuracy: 0.1018 - loss: 60.7497 - val_accuracy: 0.1001 - val_loss: 2.3026\n", + "Epoch 2/19\n", + "\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 33ms/step - accuracy: 0.1006 - loss: 2.3038 - val_accuracy: 0.0999 - val_loss: 2.3026\n", + "Epoch 3/19\n", + "\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 34ms/step - accuracy: 0.0996 - loss: 2.3028 - val_accuracy: 0.0999 - val_loss: 2.3025\n", + "Epoch 4/19\n", + "\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 37ms/step - accuracy: 0.0986 - loss: 2.3027 - val_accuracy: 0.0999 - val_loss: 2.3025\n", + "Epoch 5/19\n", + "\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 35ms/step - accuracy: 0.1003 - loss: 2.3026 - val_accuracy: 0.0999 - val_loss: 2.3026\n", + "Epoch 6/19\n", + "\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 34ms/step - accuracy: 0.0980 - loss: 2.3025 - val_accuracy: 0.1000 - val_loss: 2.3026\n", + "Epoch 7/19\n", + "\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 33ms/step - accuracy: 0.1002 - loss: 2.3025 - val_accuracy: 0.1000 - val_loss: 2.3026\n", + "Epoch 8/19\n", + "\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 34ms/step - accuracy: 0.0988 - loss: 2.3025 - val_accuracy: 0.0999 - val_loss: 2.3026\n", + "Epoch 9/19\n", + "\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 34ms/step - accuracy: 0.1013 - loss: 2.3026 - val_accuracy: 0.0999 - val_loss: 2.3026\n", + "Epoch 10/19\n", + "\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 36ms/step - accuracy: 0.1004 - loss: 2.3024 - val_accuracy: 0.1000 - val_loss: 2.3026\n", + "Epoch 11/19\n", + "\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 32ms/step - accuracy: 0.0994 - loss: 2.3025 - val_accuracy: 0.1000 - val_loss: 2.3026\n", + "Epoch 12/19\n", + "\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 32ms/step - accuracy: 0.1022 - loss: 2.3025 - val_accuracy: 0.1000 - val_loss: 2.3026\n", + "Epoch 13/19\n", + "\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 34ms/step - accuracy: 0.0982 - loss: 2.3025 - val_accuracy: 0.0999 - val_loss: 2.3026\n", + "Epoch 14/19\n", + "\u001b[1m25/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 33ms/step - accuracy: 0.1010 - loss: 2.3024 - val_accuracy: 0.0999 - val_loss: 2.3026\n", + "Epoch 15/19\n", + "\u001b[1m24/25\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 28ms/step - accuracy: 0.1013 - loss: 2.3025" + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[34], line 5\u001b[0m\n\u001b[1;32m 1\u001b[0m fc_model\u001b[38;5;241m.\u001b[39mcompile(optimizer\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124madam\u001b[39m\u001b[38;5;124m'\u001b[39m,\n\u001b[1;32m 2\u001b[0m loss\u001b[38;5;241m=\u001b[39mtf\u001b[38;5;241m.\u001b[39mkeras\u001b[38;5;241m.\u001b[39mlosses\u001b[38;5;241m.\u001b[39mSparseCategoricalCrossentropy(from_logits\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m),\n\u001b[1;32m 3\u001b[0m metrics\u001b[38;5;241m=\u001b[39m[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124maccuracy\u001b[39m\u001b[38;5;124m'\u001b[39m])\n\u001b[0;32m----> 5\u001b[0m history \u001b[38;5;241m=\u001b[39m \u001b[43mfc_model\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfit\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtrain_images\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtrain_labels\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mepochs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m19\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mbatch_size\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m2\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m11\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 6\u001b[0m \u001b[43m \u001b[49m\u001b[43mvalidation_data\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mtest_images\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtest_labels\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/Dokumente/code/py/ki-dhbw/.venv/lib/python3.12/site-packages/keras/src/utils/traceback_utils.py:117\u001b[0m, in \u001b[0;36mfilter_traceback..error_handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 115\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 116\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 117\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfn\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 118\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 119\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m _process_traceback_frames(e\u001b[38;5;241m.\u001b[39m__traceback__)\n", + "File \u001b[0;32m~/Dokumente/code/py/ki-dhbw/.venv/lib/python3.12/site-packages/keras/src/backend/tensorflow/trainer.py:395\u001b[0m, in \u001b[0;36mTensorFlowTrainer.fit\u001b[0;34m(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_batch_size, validation_freq)\u001b[0m\n\u001b[1;32m 384\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mgetattr\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_eval_epoch_iterator\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mNone\u001b[39;00m) \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 385\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_eval_epoch_iterator \u001b[38;5;241m=\u001b[39m TFEpochIterator(\n\u001b[1;32m 386\u001b[0m x\u001b[38;5;241m=\u001b[39mval_x,\n\u001b[1;32m 387\u001b[0m y\u001b[38;5;241m=\u001b[39mval_y,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 393\u001b[0m shuffle\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m,\n\u001b[1;32m 394\u001b[0m )\n\u001b[0;32m--> 395\u001b[0m val_logs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mevaluate\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 396\u001b[0m \u001b[43m \u001b[49m\u001b[43mx\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mval_x\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 397\u001b[0m \u001b[43m \u001b[49m\u001b[43my\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mval_y\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 398\u001b[0m \u001b[43m \u001b[49m\u001b[43msample_weight\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mval_sample_weight\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 399\u001b[0m \u001b[43m \u001b[49m\u001b[43mbatch_size\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mvalidation_batch_size\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mbatch_size\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 400\u001b[0m \u001b[43m \u001b[49m\u001b[43msteps\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mvalidation_steps\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 401\u001b[0m \u001b[43m \u001b[49m\u001b[43mcallbacks\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcallbacks\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 402\u001b[0m \u001b[43m \u001b[49m\u001b[43mreturn_dict\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 403\u001b[0m \u001b[43m \u001b[49m\u001b[43m_use_cached_eval_dataset\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 404\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 405\u001b[0m val_logs \u001b[38;5;241m=\u001b[39m {\n\u001b[1;32m 406\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mval_\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m+\u001b[39m name: val \u001b[38;5;28;01mfor\u001b[39;00m name, val \u001b[38;5;129;01min\u001b[39;00m val_logs\u001b[38;5;241m.\u001b[39mitems()\n\u001b[1;32m 407\u001b[0m }\n\u001b[1;32m 408\u001b[0m epoch_logs\u001b[38;5;241m.\u001b[39mupdate(val_logs)\n", + "File \u001b[0;32m~/Dokumente/code/py/ki-dhbw/.venv/lib/python3.12/site-packages/keras/src/utils/traceback_utils.py:117\u001b[0m, in \u001b[0;36mfilter_traceback..error_handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 115\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 116\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 117\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfn\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 118\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 119\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m _process_traceback_frames(e\u001b[38;5;241m.\u001b[39m__traceback__)\n", + "File \u001b[0;32m~/Dokumente/code/py/ki-dhbw/.venv/lib/python3.12/site-packages/keras/src/backend/tensorflow/trainer.py:482\u001b[0m, in \u001b[0;36mTensorFlowTrainer.evaluate\u001b[0;34m(self, x, y, batch_size, verbose, sample_weight, steps, callbacks, return_dict, **kwargs)\u001b[0m\n\u001b[1;32m 480\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mreset_metrics()\n\u001b[1;32m 481\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m epoch_iterator\u001b[38;5;241m.\u001b[39mcatch_stop_iteration():\n\u001b[0;32m--> 482\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mstep\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43miterator\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mepoch_iterator\u001b[49m\u001b[43m:\u001b[49m\n\u001b[1;32m 483\u001b[0m \u001b[43m \u001b[49m\u001b[43mcallbacks\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mon_test_batch_begin\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstep\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 484\u001b[0m \u001b[43m \u001b[49m\u001b[43mlogs\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtest_function\u001b[49m\u001b[43m(\u001b[49m\u001b[43miterator\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/Dokumente/code/py/ki-dhbw/.venv/lib/python3.12/site-packages/keras/src/backend/tensorflow/trainer.py:736\u001b[0m, in \u001b[0;36mTFEpochIterator.__next__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 735\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21m__next__\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[0;32m--> 736\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mnext\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_epoch_iterator\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/Dokumente/code/py/ki-dhbw/.venv/lib/python3.12/site-packages/keras/src/trainers/epoch_iterator.py:112\u001b[0m, in \u001b[0;36mEpochIterator._enumerate_iterator\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 110\u001b[0m \u001b[38;5;28;01myield\u001b[39;00m step, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_current_iterator\n\u001b[1;32m 111\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_num_batches \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_steps_seen \u001b[38;5;241m>\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_num_batches:\n\u001b[0;32m--> 112\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_current_iterator \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43miter\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_iterator\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 113\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_steps_seen \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m\n\u001b[1;32m 114\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n", + "File \u001b[0;32m~/Dokumente/code/py/ki-dhbw/.venv/lib/python3.12/site-packages/tensorflow/python/data/ops/dataset_ops.py:501\u001b[0m, in \u001b[0;36mDatasetV2.__iter__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 499\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m context\u001b[38;5;241m.\u001b[39mexecuting_eagerly() \u001b[38;5;129;01mor\u001b[39;00m ops\u001b[38;5;241m.\u001b[39minside_function():\n\u001b[1;32m 500\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m ops\u001b[38;5;241m.\u001b[39mcolocate_with(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_variant_tensor):\n\u001b[0;32m--> 501\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43miterator_ops\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mOwnedIterator\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 502\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 503\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mRuntimeError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m`tf.data.Dataset` only supports Python-style \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 504\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124miteration in eager mode or within tf.function.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", + "File \u001b[0;32m~/Dokumente/code/py/ki-dhbw/.venv/lib/python3.12/site-packages/tensorflow/python/data/ops/iterator_ops.py:709\u001b[0m, in \u001b[0;36mOwnedIterator.__init__\u001b[0;34m(self, dataset, components, element_spec)\u001b[0m\n\u001b[1;32m 705\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (components \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mor\u001b[39;00m element_spec \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[1;32m 706\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m 707\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mWhen `dataset` is provided, `element_spec` and `components` must \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 708\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnot be specified.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m--> 709\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_create_iterator\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdataset\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 711\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_next_call_count \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m\n", + "File \u001b[0;32m~/Dokumente/code/py/ki-dhbw/.venv/lib/python3.12/site-packages/tensorflow/python/data/ops/iterator_ops.py:748\u001b[0m, in \u001b[0;36mOwnedIterator._create_iterator\u001b[0;34m(self, dataset)\u001b[0m\n\u001b[1;32m 745\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(fulltype\u001b[38;5;241m.\u001b[39margs[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39margs[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39margs) \u001b[38;5;241m==\u001b[39m \u001b[38;5;28mlen\u001b[39m(\n\u001b[1;32m 746\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_flat_output_types)\n\u001b[1;32m 747\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_iterator_resource\u001b[38;5;241m.\u001b[39mop\u001b[38;5;241m.\u001b[39mexperimental_set_type(fulltype)\n\u001b[0;32m--> 748\u001b[0m \u001b[43mgen_dataset_ops\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmake_iterator\u001b[49m\u001b[43m(\u001b[49m\u001b[43mds_variant\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_iterator_resource\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/Dokumente/code/py/ki-dhbw/.venv/lib/python3.12/site-packages/tensorflow/python/ops/gen_dataset_ops.py:3478\u001b[0m, in \u001b[0;36mmake_iterator\u001b[0;34m(dataset, iterator, name)\u001b[0m\n\u001b[1;32m 3476\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m tld\u001b[38;5;241m.\u001b[39mis_eager:\n\u001b[1;32m 3477\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 3478\u001b[0m _result \u001b[38;5;241m=\u001b[39m \u001b[43mpywrap_tfe\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mTFE_Py_FastPathExecute\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 3479\u001b[0m \u001b[43m \u001b[49m\u001b[43m_ctx\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mMakeIterator\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdataset\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43miterator\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3480\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m _result\n\u001b[1;32m 3481\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m _core\u001b[38;5;241m.\u001b[39m_NotOkStatusException \u001b[38;5;28;01mas\u001b[39;00m e:\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "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": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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AgAAMCAgAQAAGBCQAAAADAhIAAAABgQkAAAAAwISAACAAQEJAIAGqlOnTkpOTrZ3Gb9JBCQAAAADAhIAAKh1FRUVMpvN9i7jlhGQAACNj8UilRXbZ6vmE6TfeOMN+fn5VQoJjz76qCZOnKhTp07p0Ucflbe3t1q1aqW+fftq165dt/yRLF26VL169VLLli3l7++vP/7xj7py5YpNny+//FKDBg1SixYt1LZtW0VGRupvf/ubJMlsNmvJkiW688475ezsrI4dO+rFF1+UJO3evVsmk0mXLl2yHiszM1Mmk0nff/+9JGn9+vVq06aNPvzwQ919991ydnZWTk6ODh06pIcfflienp5yd3fXgw8+qMOHD9vUdenSJT311FPy9vaWi4uLevbsqY8//ljFxcVyc3PTe++9Z9N/27ZtatmypS5fvnzLn9ev4adGAACNT/lVabGffcZ+7rzk1PJXuz3xxBOaMWOGPv/8cw0ZMkSS9PPPPystLU07duzQlStXNGzYML344otydnbWW2+9paioKGVnZ6tjx441LsvBwUH/+Z//qc6dO+v06dP64x//qNmzZ2vVqlWSrgeaIUOGaOLEiVq+fLmaNWumzz//XBUVFZKk+Ph4vfnmm1q2bJkGDBig3NxcZWVl1aiGq1ev6uWXX9Z//dd/ycPDQ+3bt9fp06cVExOjV199VRaLRa+88oqGDRumEydOqHXr1jKbzRo6dKguX76sjRs3KjAwUMeOHZOjo6NatmypJ598UuvWrdPjjz9uHeeX161bt67x51RdBCQAAOpA27ZtNXToUKWkpFgD0nvvvSdPT0899NBDcnBwUHBwsLX/Cy+8oK1bt+rDDz/U9OnTazzezJkzrX936tRJf/7znzVt2jRrQFqyZIn69OljfS1J99xzjyTp8uXLWr58uVasWKGYmBhJUmBgoAYMGFCjGsrLy7Vq1SqbeQ0ePNimzxtvvKE2bdpoz549+v3vf69du3bp4MGDOn78uO666y5JUpcuXaz9J0+erPvuu0+5ubny9fXVhQsXtGPHjts621YdBCQAQOPTvMX1Mzn2GruaxowZoylTpmjVqlVydnbWpk2b9OSTT8rBwUFXrlzRwoULtX37duXm5uratWv6+9//rpycnFsqa9euXUpKSlJWVpaKiop07do1lZSU6OrVq2rRooUyMzP1xBNPVLnv8ePHVVpaag1yt8rJyUlBQUE2bfn5+UpISNDu3bt14cIFVVRU6OrVq9Z5ZmZm6o477rCGI6N+/frpnnvu0X//939r7ty52rhxowICAjRw4MDbqvXXsAYJAND4mEzXL3PZYzOZql1mVFSULBaLtm/frrNnz+p///d/NWbMGEnSs88+q61bt2rx4sX63//9X2VmZqpXr14qKyur8cfx/fff6/e//72CgoL0/vvvKyMjQytXrpQk6/FcXV1vuP/N3pOuX76TJMs/rb8qLy+v8jgmw+cTExOjzMxMLV++XF999ZUyMzPl4eFRrbp+MXnyZK1fv17S9ctrEyZMqDRObSMgAQBQR1xcXDRixAht2rRJb7/9trp166Z7771X0vUF0+PHj9fw4cPVq1cv+fj4WBc811RGRobMZrNeeeUV9e/fX3fddZfOn7c9wxYUFKT09PQq9+/atatcXV1v+L6Xl5ckKTc319qWmZlZrdq+/PJLPf300xo2bJjuueceOTs7q6CgwKauH3/8UX/9619veIx/+7d/0w8//KD//M//1LFjx6yXAesSAQkAgDo0ZswYbd++XWvXrrWePZKuh5ItW7YoMzNT3377rUaPHn3Lt8XfeeedKi8v16uvvqrTp09rw4YNeu2112z6xMfH69ChQ/rjH/+oI0eOKCsrS6tXr1ZBQYFcXFw0Z84czZ49W2+99ZZOnTql/fv3a82aNdbj+/v7a+HChTpx4oS2b9+uV155pVq1de3aVRs2bNDx48d14MABjRkzxuas0YMPPqiBAwcqOjpaO3fu1JkzZ/TJJ58oLS3N2qdt27YaMWKE/t//+3965JFHdMcdd9zS51QTBCQAAOrQ4MGD1a5dO2VnZ2v06NHW9qVLl6pt27a67777FBUVpcjISOvZpZoKDg7W0qVL9fLLL6tnz57atGmTkpKSbPrcdddd+p//+R99++236tevn8LDw/XBBx+oWbPry5Hnz5+vP/3pT1qwYIF69OihkSNH6sKFC5Kk5s2b6+2331ZWVpaCgoL08ssv689//nO1aluzZo3+9re/6d5779XYsWP19NNPq3379jZ93n//ffXt21ejRo3S3XffrdmzZ1vvrvvFpEmTVFZWpokTJ97SZ1RTJoulmg90gI2ioiK5u7ursLBQbm5u9i4HAJqskpISnTlzRp07d5aLi4u9y4GdbNiwQbNmzdL5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", + "text/plain": [ + "
" + ] + }, + "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 +}