2025-02-13 12:59:35 +01:00
{
"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": [
"<matplotlib.image.AxesImage at 0x7f47ba2ea9c0>"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.imshow(train_images[1])"
]
},
{
"cell_type": "code",
2025-02-13 14:23:29 +01:00
"execution_count": null,
2025-02-13 12:59:35 +01:00
"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": [
"<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\"</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[1mModel: \"sequential\"\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 (<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 (<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_1 (<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_1 (<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_2 (<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 (<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 (<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_1 (<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 (\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": [
"<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": 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": [
"<matplotlib.legend.Legend at 0x7f4731434d40>"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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qTwxGOnFEFRQhJwyISnPNOpU2ie3oKg4XOmRWxycBAEoMgq4fUeP23f0AO5a72CpXrBVKaoIGSrTCGjF8FG6XlUAKf+mRF12SkaFx0q3s1EqGsSIpKQB6Pfff8fTTz9tWi+ZhxMVFYWVK1ciPT0dqamppsdbtGiBHTt24N1338X8+fPRrFkz/Oc//0FERISpz5AhQ3Dt2jVMnjwZGRkZ6NixIxISEipMjG5oFApF8TtnFaCVpoai4gBWZBRgqyoNPKoG8stCVF0KhQJaWxW0tiq4O1Y8vV5dRqOAO3qDWSgqG5LEUSrz9bwywUmhEE8iKopDu7he3AiYtSkU5t+jwnbm6yU7KX2s4n5Q6fOXrpfWoahyP6jiMaWi9Kv4N6b4e4UCSoX4HOIbFvPvlQpF8QIolYoq1mH6u6VUACpF6fcVnq/c96bnK96vonhflT2HUqEoXjd/DlXxmy61SgwenEdWM+rMfYDqkpycHDg7OyM7O9uqc4CIiIio5ljy+t1wx7GJiIiIqsAARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLLDAERERESywwBEREREssMARERERLJjI3UBRETUgBiNgFEPGAoBg754KSxuK9du6ldU/LUQMBbdY1t9aR+VGrBzAbQuxV+dy3zvAmicACXf41PVGICIiBoKQQBuXQQyjwP6gqpDhUUBpVz7/UKLYJD6p1BMAWidzEOR1rlcaCrb5lqmzQlQ2UpVONUSBiAiEmWnAWd3Axd/BTSOgHdnwKcz4N4aUKqkro4qo8sF0pKBK4eBK7+LX+9cl7qqchTiaI1KDahsSr9XlnxvW7yoAaWt+brKtritfD8boKgAuHsbKMgGCm4Xf1/8teguAKH4sWzg9iXLy1Y3qnp06X5tttqH/qlRzWMAIusQBODGWeDyQcBoAJr3BBoHAAqF1JVRVYoKgcsHgDO7xOCTdaJchy/FL7b2gFcI4NMF8O4khiLXFvy3rW1GI3D9r+KwUxx4sk4AEMz7KW0Bj3bii7FFAcNa4aRcPynCc5FODD5lQ1H5oFS23dSWDehyxH0U5olLzhXLn99GW40Rpyra1A783aolDED0YPQFwNUj4gvo5UNi8Llzw7yPsy/Q4kkg4CmgxROAo4ckpVIZty8DZ3cBZ3YDF34R/8CbKIBmoUBgL0B/B0g7AqSniH1S94tLCTtXMQx5dxaDkU9nwNGzto+mYcu/AaT9Xhp40pJLX5zLcvYT/92adRUXz2COQNhogEZNxcVShiLx53z3VmkoMgtS92gryAYEozg6lZchLpZS2lRvxKmyIMV5TxZRCIIg3L+bvOTk5MDZ2RnZ2dl
"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": 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": [
"<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_1\"</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[1mModel: \"sequential_1\"\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_1 (<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_2 (<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_3 (<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_4 (<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_5 (<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_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": [
"<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": 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": [
"<matplotlib.legend.Legend at 0x7f46cb202360>"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(history.history['accuracy'], label='accuracy')\n",
"plt.plot(history.history['val_accuracy'], label = 'val_accuracy')\n",
"plt.xlabel('Epoch')\n",
"plt.ylabel('Accuracy')\n",
"plt.ylim([0.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
}