{ "cells": [ { "cell_type": "markdown", "id": "59d5afb6-e57f-4564-8063-67fa904796da", "metadata": { "jp-MarkdownHeadingCollapsed": true }, "source": [ "# Dzień 5 - 19.05.2025" ] }, { "cell_type": "markdown", "id": "2573407e-45c3-42fe-a17d-9e0b0a78eea8", "metadata": {}, "source": [ "## Deep Learning\n", "uczenie płytkie - proste algorytmy, ręczne inżynierowanie cech\n", "uczenie głębokie - używa sieci neuronowych, automatycznie uczy się cech danych" ] }, { "cell_type": "markdown", "id": "22dc1546-9abc-4d18-affa-4954cf2999e9", "metadata": {}, "source": [ "h2o.ai\n", "AutoML - automated machine learning - wyszukuje jaki model będzie najlepszy na bazie danych wejściowych" ] }, { "cell_type": "markdown", "id": "16b94743-d23e-4a7d-97c7-0966aa711c5f", "metadata": {}, "source": [ "## Sztuczne sieci neuronowe\n", "### definicje\n", "neurony - przekazują i przetwarzają sygnały\n", "warstwy - neurony są zorganizowane w warstwy\n", "połączenia - neurony połączone są z wagami i z biasem\n", "### uczenie\n", "1. forward propagation - dane przechodzą przez sieć i siec daje błąd\n", "2. obliczenie błędu\n", "3. back propagation - błąd jest propagowany wstecz i są zmieniane wagi i bias" ] }, { "cell_type": "markdown", "id": "bc61d27e-0b86-496b-8c14-d5c3be316f73", "metadata": {}, "source": [ "## Popularne funkcje aktywacji\n", " - sigmoid - wartości 0-1 binarne\n", " - softmax - wartości 0-1 ułamkowe, ale wszystkie wyjścia sumują się do 1 - jest to podział prawdopodobieństwa\n", " - ReLU - zachowuje wartości dodatnie, zeruje ujemne. Dla dodatnich jest liniowa\n", " - tanh - podobna do sigmoid, ale wartości od -1 do 1" ] }, { "cell_type": "markdown", "id": "7a85c9ef-9dbf-4e71-a62a-3415ded9b7c4", "metadata": { "jp-MarkdownHeadingCollapsed": true }, "source": [ "## metoda dropout (Hangout) - wyłączanie najsłabszych neuronów\n" ] }, { "cell_type": "markdown", "id": "9d98ba73-f954-4a6a-ac09-3a6b1afa58ce", "metadata": {}, "source": [ "# Kod" ] }, { "cell_type": "markdown", "id": "11ee196e-06a8-47a4-a411-aa7dd06faaf8", "metadata": {}, "source": [ "## Setup i wczytanie danych" ] }, { "cell_type": "code", "execution_count": 33, "id": "ed806007-30fb-4048-8fa5-f31c7eed433a", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "from tensorflow import keras" ] }, { "cell_type": "code", "execution_count": 34, "id": "4b4881e2-fdaf-4ccc-b68e-15ec7391146e", "metadata": {}, "outputs": [], "source": [ "# Wczytaj dane\n", "mnist = keras.datasets.mnist\n", "(X_train, Y_train),(X_test, Y_test) = mnist.load_data()" ] }, { "cell_type": "code", "execution_count": 35, "id": "455c540d-bad5-4a66-9b13-35113ae41f3d", "metadata": {}, "outputs": [], "source": [ "# Parametry modelu\n", "EPOCHS = 25\n", "BATCH_SIZE = 64\n", "VERBOSE = 1\n", "NB_CLASSES = 10\n", "N_HIDDEN = 256\n", "VALIDATION_SPLIT = 0.2\n" ] }, { "cell_type": "code", "execution_count": 36, "id": "beee8e5a-348e-45d1-9a40-79976aed712f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Shape before: (60000, 28, 28)\n", "Shape after: (60000, 784)\n" ] } ], "source": [ "# modyfikacja danych wejściowych\n", "\n", "# normalizacja\n", "print(f\"Shape before: {X_train.shape}\")\n", "RESHAPED = 28*28\n", "X_train = X_train.reshape(60000,RESHAPED)\n", "X_test = X_test.reshape(10000,RESHAPED)\n", "print(f\"Shape after: {X_train.shape}\")\n", "\n", "# normalizacja\n", "X_train = X_train.astype('float32') / 255.0\n", "X_test = X_test.astype('float32') / 255.0\n", "\n", "# konwersja do binarnych 0-1\n", "X_train = np.where(X_train > 0.5, 1, 0)\n", "X_test = np.where(X_test > 0.5, 1, 0)\n", "\n", "# One-hot encoding for labels\n", "Y_train = keras.utils.to_categorical(Y_train, NB_CLASSES)\n", "Y_test = keras.utils.to_categorical(Y_test, NB_CLASSES)\n", "\n" ] }, { "cell_type": "markdown", "id": "37735925-efe6-4540-97a3-c0c130274fae", "metadata": {}, "source": [ "## Model" ] }, { "cell_type": "markdown", "id": "0de3a87d-7b86-49c0-a44d-35a546149cf2", "metadata": {}, "source": [ "### Stwórz\n" ] }, { "cell_type": "code", "execution_count": 37, "id": "4ec7f823-09ee-4b22-a2f6-f3f74853211e", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/sasza/.local/share/virtualenvs/JupyterLab-9JRWupKp/lib/python3.12/site-packages/keras/src/layers/core/dense.py:93: 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" ] }, { "data": { "text/html": [ "
Model: \"sequential_4\"\n",
"\n"
],
"text/plain": [
"\u001b[1mModel: \"sequential_4\"\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
"┃ Layer (type) ┃ Output Shape ┃ Param # ┃\n",
"┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
"│ input_layer (Dense) │ (None, 256) │ 200,960 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dropout_layer_1 (Dropout) │ (None, 256) │ 0 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ hidden_layer_1 (Dense) │ (None, 256) │ 65,792 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dropout_layer_2 (Dropout) │ (None, 256) │ 0 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ hidden_layer_2 (Dense) │ (None, 256) │ 65,792 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dropout_layer_3 (Dropout) │ (None, 256) │ 0 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ output_layer (Dense) │ (None, 10) │ 2,570 │\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",
"│ input_layer (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m200,960\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dropout_layer_1 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ hidden_layer_1 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m65,792\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dropout_layer_2 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ hidden_layer_2 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m65,792\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dropout_layer_3 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ output_layer (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m10\u001b[0m) │ \u001b[38;5;34m2,570\u001b[0m │\n",
"└─────────────────────────────────┴────────────────────────┴───────────────┘\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"Total params: 335,114 (1.28 MB)\n", "\n" ], "text/plain": [ "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m335,114\u001b[0m (1.28 MB)\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
Trainable params: 335,114 (1.28 MB)\n", "\n" ], "text/plain": [ "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m335,114\u001b[0m (1.28 MB)\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\n", "\n", "from tensorflow.keras.layers import Dense\n", "\n", "model = keras.models.Sequential()\n", "model.add(Dense(N_HIDDEN,input_shape=(RESHAPED,),\n", " activation='relu',\n", " name='input_layer'))\n", "# warstwa Dropout\n", "model.add(keras.layers.Dropout(0.3, name=\"dropout_layer_1\"))\n", "model.add(Dense(N_HIDDEN, \n", " activation='relu',\n", " name=\"hidden_layer_1\"))\n", "# warstwa Dropout\n", "model.add(keras.layers.Dropout(0.3, name=\"dropout_layer_2\"))\n", "model.add(Dense(N_HIDDEN, \n", " activation='relu',\n", " name=\"hidden_layer_2\"))\n", "# warstwa Dropout\n", "model.add(keras.layers.Dropout(0.3, name=\"dropout_layer_3\"))\n", "model.add(Dense(NB_CLASSES,\n", " activation='softmax',\n", " name='output_layer'))\n", "\n", "model.summary()" ] }, { "cell_type": "code", "execution_count": 38, "id": "6d0dbbe5-7eac-4917-aff1-6f127ab46dfb", "metadata": {}, "outputs": [], "source": [ "# Compile the model\n", "model.compile(loss='categorical_crossentropy',\n", " optimizer='adam',\n", " metrics=['accuracy'])" ] }, { "cell_type": "markdown", "id": "7db6f8fb-ff16-4bc4-9758-380e13f5a0fb", "metadata": {}, "source": [ "### Trenuj\n" ] }, { "cell_type": "code", "execution_count": 39, "id": "30ce3fe1-2cc6-4dad-8b71-c04763d525fa", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/25\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2025-05-20 13:23:23.834163: W external/local_xla/xla/tsl/framework/cpu_allocator_impl.cc:83] Allocation of 301056000 exceeds 10% of free system memory.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 9ms/step - accuracy: 0.7850 - loss: 0.6727 - val_accuracy: 0.9557 - val_loss: 0.1503\n", "Epoch 2/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 9ms/step - accuracy: 0.9457 - loss: 0.1848 - val_accuracy: 0.9625 - val_loss: 0.1182\n", "Epoch 3/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 9ms/step - accuracy: 0.9584 - loss: 0.1359 - val_accuracy: 0.9688 - val_loss: 0.1069\n", "Epoch 4/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 8ms/step - accuracy: 0.9668 - loss: 0.1052 - val_accuracy: 0.9682 - val_loss: 0.1080\n", "Epoch 5/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 8ms/step - accuracy: 0.9735 - loss: 0.0867 - val_accuracy: 0.9723 - val_loss: 0.0939\n", "Epoch 6/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 8ms/step - accuracy: 0.9725 - loss: 0.0900 - val_accuracy: 0.9736 - val_loss: 0.0926\n", "Epoch 7/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 10ms/step - accuracy: 0.9771 - loss: 0.0740 - val_accuracy: 0.9722 - val_loss: 0.1025\n", "Epoch 8/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 9ms/step - accuracy: 0.9781 - loss: 0.0684 - val_accuracy: 0.9713 - val_loss: 0.0975\n", "Epoch 9/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 8ms/step - accuracy: 0.9814 - loss: 0.0592 - val_accuracy: 0.9726 - val_loss: 0.0988\n", "Epoch 10/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 8ms/step - accuracy: 0.9830 - loss: 0.0560 - val_accuracy: 0.9713 - val_loss: 0.1129\n", "Epoch 11/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 8ms/step - accuracy: 0.9831 - loss: 0.0554 - val_accuracy: 0.9734 - val_loss: 0.1071\n", "Epoch 12/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 8ms/step - accuracy: 0.9844 - loss: 0.0486 - val_accuracy: 0.9753 - val_loss: 0.0967\n", "Epoch 13/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 10ms/step - accuracy: 0.9857 - loss: 0.0467 - val_accuracy: 0.9758 - val_loss: 0.0978\n", "Epoch 14/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 9ms/step - accuracy: 0.9857 - loss: 0.0456 - val_accuracy: 0.9728 - val_loss: 0.1028\n", "Epoch 15/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 10ms/step - accuracy: 0.9866 - loss: 0.0438 - val_accuracy: 0.9742 - val_loss: 0.1067\n", "Epoch 16/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 10ms/step - accuracy: 0.9861 - loss: 0.0439 - val_accuracy: 0.9746 - val_loss: 0.0986\n", "Epoch 17/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 11ms/step - accuracy: 0.9865 - loss: 0.0433 - val_accuracy: 0.9766 - val_loss: 0.1007\n", "Epoch 18/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 8ms/step - accuracy: 0.9891 - loss: 0.0366 - val_accuracy: 0.9764 - val_loss: 0.1119\n", "Epoch 19/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 9ms/step - accuracy: 0.9884 - loss: 0.0371 - val_accuracy: 0.9751 - val_loss: 0.1098\n", "Epoch 20/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 8ms/step - accuracy: 0.9894 - loss: 0.0352 - val_accuracy: 0.9758 - val_loss: 0.1167\n", "Epoch 21/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 8ms/step - accuracy: 0.9894 - loss: 0.0347 - val_accuracy: 0.9756 - val_loss: 0.1151\n", "Epoch 22/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 8ms/step - accuracy: 0.9891 - loss: 0.0357 - val_accuracy: 0.9738 - val_loss: 0.1123\n", "Epoch 23/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 8ms/step - accuracy: 0.9904 - loss: 0.0300 - val_accuracy: 0.9753 - val_loss: 0.1220\n", "Epoch 24/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 8ms/step - accuracy: 0.9894 - loss: 0.0355 - val_accuracy: 0.9759 - val_loss: 0.1151\n", "Epoch 25/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 9ms/step - accuracy: 0.9913 - loss: 0.0292 - val_accuracy: 0.9764 - val_loss: 0.1148\n" ] }, { "data": { "text/plain": [ "
Model: \"sequential_20\"\n",
"\n"
],
"text/plain": [
"\u001b[1mModel: \"sequential_20\"\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
"┃ Layer (type) ┃ Output Shape ┃ Param # ┃\n",
"┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
"│ input_layer (Dense) │ (None, 28, 32) │ 928 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dropout_18 (Dropout) │ (None, 28, 32) │ 0 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dense_layer (Dense) │ (None, 28, 32) │ 1,056 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dropout_19 (Dropout) │ (None, 28, 32) │ 0 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ flatten_9 (Flatten) │ (None, 896) │ 0 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ output_layer (Dense) │ (None, 10) │ 8,970 │\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",
"│ input_layer (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m928\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dropout_18 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dense_layer (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m1,056\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dropout_19 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m28\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ flatten_9 (\u001b[38;5;33mFlatten\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m896\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ output_layer (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m10\u001b[0m) │ \u001b[38;5;34m8,970\u001b[0m │\n",
"└─────────────────────────────────┴────────────────────────┴───────────────┘\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"Total params: 10,954 (42.79 KB)\n", "\n" ], "text/plain": [ "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m10,954\u001b[0m (42.79 KB)\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
Trainable params: 10,954 (42.79 KB)\n", "\n" ], "text/plain": [ "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m10,954\u001b[0m (42.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": [ "model = tf.keras.models.Sequential()\n", "\n", "model.add(keras.layers.Dense(\n", " N_HIDDEN,\n", " input_shape=(28,28),\n", " name='input_layer',\n", " activation='relu'))\n", "model.add(keras.layers.Dropout(0.3))\n", "model.add(keras.layers.Dense(\n", " N_HIDDEN,\n", " name='dense_layer',\n", " activation='relu'))\n", "model.add(keras.layers.Dropout(0.3))\n", "model.add(keras.layers.Flatten(input_shape=(28,28)))\n", "model.add(keras.layers.Dense(\n", " NB_CLASSES,\n", " name='output_layer',\n", " activation='softmax'))\n", "\n", "model.summary()" ] }, { "cell_type": "code", "execution_count": 149, "id": "fbc19059-d592-4682-a8d7-5f8d126e211b", "metadata": {}, "outputs": [], "source": [ "model.compile(optimizer='Adam',\n", " loss= tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),\n", " metrics=['accuracy'])" ] }, { "cell_type": "code", "execution_count": 150, "id": "6c2c7e2b-1aab-4595-8e29-4fc557db8674", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 6ms/step - accuracy: 0.7030 - loss: 0.9725 - val_accuracy: 0.9309 - val_loss: 0.2369\n", "Epoch 2/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 7ms/step - accuracy: 0.9090 - loss: 0.2997 - val_accuracy: 0.9475 - val_loss: 0.1836\n", "Epoch 3/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 7ms/step - accuracy: 0.9277 - loss: 0.2366 - val_accuracy: 0.9522 - val_loss: 0.1621\n", "Epoch 4/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9356 - loss: 0.2212 - val_accuracy: 0.9546 - val_loss: 0.1534\n", "Epoch 5/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9409 - loss: 0.1953 - val_accuracy: 0.9580 - val_loss: 0.1435\n", "Epoch 6/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9435 - loss: 0.1839 - val_accuracy: 0.9589 - val_loss: 0.1413\n", "Epoch 7/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9452 - loss: 0.1813 - val_accuracy: 0.9603 - val_loss: 0.1383\n", "Epoch 8/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 6ms/step - accuracy: 0.9481 - loss: 0.1683 - val_accuracy: 0.9633 - val_loss: 0.1301\n", "Epoch 9/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9494 - loss: 0.1697 - val_accuracy: 0.9621 - val_loss: 0.1304\n", "Epoch 10/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9500 - loss: 0.1654 - val_accuracy: 0.9641 - val_loss: 0.1271\n", "Epoch 11/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 6ms/step - accuracy: 0.9496 - loss: 0.1626 - val_accuracy: 0.9650 - val_loss: 0.1252\n", "Epoch 12/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9483 - loss: 0.1659 - val_accuracy: 0.9657 - val_loss: 0.1227\n", "Epoch 13/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9532 - loss: 0.1525 - val_accuracy: 0.9646 - val_loss: 0.1228\n", "Epoch 14/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9505 - loss: 0.1539 - val_accuracy: 0.9650 - val_loss: 0.1212\n", "Epoch 15/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9538 - loss: 0.1491 - val_accuracy: 0.9653 - val_loss: 0.1211\n", "Epoch 16/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9536 - loss: 0.1507 - val_accuracy: 0.9656 - val_loss: 0.1238\n", "Epoch 17/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9529 - loss: 0.1524 - val_accuracy: 0.9653 - val_loss: 0.1230\n", "Epoch 18/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9536 - loss: 0.1475 - val_accuracy: 0.9661 - val_loss: 0.1189\n", "Epoch 19/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9543 - loss: 0.1463 - val_accuracy: 0.9667 - val_loss: 0.1194\n", "Epoch 20/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9561 - loss: 0.1401 - val_accuracy: 0.9656 - val_loss: 0.1222\n", "Epoch 21/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9571 - loss: 0.1427 - val_accuracy: 0.9671 - val_loss: 0.1200\n", "Epoch 22/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9581 - loss: 0.1390 - val_accuracy: 0.9667 - val_loss: 0.1176\n", "Epoch 23/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9559 - loss: 0.1485 - val_accuracy: 0.9670 - val_loss: 0.1175\n", "Epoch 24/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9570 - loss: 0.1382 - val_accuracy: 0.9677 - val_loss: 0.1158\n", "Epoch 25/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9575 - loss: 0.1383 - val_accuracy: 0.9680 - val_loss: 0.1144\n" ] } ], "source": [ "history = model.fit(X_train,Y_train,\n", " batch_size=BATCH_SIZE,\n", " epochs=EPOCHS,\n", " verbose=VARBOSE,\n", " validation_split=VALIDATION_SPLIT)" ] }, { "cell_type": "code", "execution_count": 151, "id": "5fe89ecb-659b-4ffe-ab8a-bec02c0b82ad", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.9628 - loss: 0.1235\n", "Test accuracy: 0.9689000248908997\n", "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step\n" ] } ], "source": [ "test_loss, test_acc = model.evaluate(X_test, Y_test)\n", "print('Test accuracy:', test_acc)\n", "\n", "predictions = model.predict(X_test)" ] }, { "cell_type": "markdown", "id": "03529c7d-8b68-4436-adf7-7565fe4028ca", "metadata": { "jp-MarkdownHeadingCollapsed": true }, "source": [ "## Checkpoint " ] }, { "cell_type": "code", "execution_count": 122, "id": "a975b6b5-0ddb-467f-9903-3e41777bcfd0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/25\n", "\u001b[1m746/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9570 - loss: 0.1399\n", "Epoch 1: val_loss improved from inf to 0.11284, saving model to model_checkpoints/weights.01-0.11.h5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`. \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9570 - loss: 0.1399 - val_accuracy: 0.9682 - val_loss: 0.1128\n", "Epoch 2/25\n", "\u001b[1m745/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9580 - loss: 0.1361\n", "Epoch 2: val_loss did not improve from 0.11284\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9579 - loss: 0.1361 - val_accuracy: 0.9674 - val_loss: 0.1138\n", "Epoch 3/25\n", "\u001b[1m746/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.9567 - loss: 0.1380\n", "Epoch 3: val_loss improved from 0.11284 to 0.11038, saving model to model_checkpoints/weights.03-0.11.h5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`. \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9567 - loss: 0.1379 - val_accuracy: 0.9688 - val_loss: 0.1104\n", "Epoch 4/25\n", "\u001b[1m744/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9582 - loss: 0.1391\n", "Epoch 4: val_loss did not improve from 0.11038\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9582 - loss: 0.1391 - val_accuracy: 0.9678 - val_loss: 0.1130\n", "Epoch 5/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9569 - loss: 0.1342\n", "Epoch 5: val_loss did not improve from 0.11038\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9569 - loss: 0.1342 - val_accuracy: 0.9683 - val_loss: 0.1119\n", "Epoch 6/25\n", "\u001b[1m744/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9592 - loss: 0.1327\n", "Epoch 6: val_loss did not improve from 0.11038\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9592 - loss: 0.1328 - val_accuracy: 0.9692 - val_loss: 0.1113\n", "Epoch 7/25\n", "\u001b[1m745/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9600 - loss: 0.1303\n", "Epoch 7: val_loss improved from 0.11038 to 0.10944, saving model to model_checkpoints/weights.07-0.11.h5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`. \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9600 - loss: 0.1303 - val_accuracy: 0.9694 - val_loss: 0.1094\n", "Epoch 8/25\n", "\u001b[1m747/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9605 - loss: 0.1293\n", "Epoch 8: val_loss did not improve from 0.10944\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9605 - loss: 0.1293 - val_accuracy: 0.9693 - val_loss: 0.1107\n", "Epoch 9/25\n", "\u001b[1m742/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9605 - loss: 0.1308\n", "Epoch 9: val_loss did not improve from 0.10944\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9604 - loss: 0.1308 - val_accuracy: 0.9691 - val_loss: 0.1095\n", "Epoch 10/25\n", "\u001b[1m749/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9606 - loss: 0.1300\n", "Epoch 10: val_loss did not improve from 0.10944\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9606 - loss: 0.1300 - val_accuracy: 0.9674 - val_loss: 0.1117\n", "Epoch 11/25\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9597 - loss: 0.1289\n", "Epoch 11: val_loss improved from 0.10944 to 0.10944, saving model to model_checkpoints/weights.11-0.11.h5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`. \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9597 - loss: 0.1289 - val_accuracy: 0.9693 - val_loss: 0.1094\n", "Epoch 12/25\n", "\u001b[1m745/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9596 - loss: 0.1292\n", "Epoch 12: val_loss did not improve from 0.10944\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9596 - loss: 0.1292 - val_accuracy: 0.9687 - val_loss: 0.1110\n", "Epoch 13/25\n", "\u001b[1m749/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9583 - loss: 0.1328\n", "Epoch 13: val_loss did not improve from 0.10944\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9583 - loss: 0.1328 - val_accuracy: 0.9679 - val_loss: 0.1097\n", "Epoch 14/25\n", "\u001b[1m744/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9588 - loss: 0.1280\n", "Epoch 14: val_loss did not improve from 0.10944\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 6ms/step - accuracy: 0.9588 - loss: 0.1281 - val_accuracy: 0.9687 - val_loss: 0.1097\n", "Epoch 15/25\n", "\u001b[1m747/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9593 - loss: 0.1273\n", "Epoch 15: val_loss improved from 0.10944 to 0.10772, saving model to model_checkpoints/weights.15-0.11.h5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`. \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9593 - loss: 0.1273 - val_accuracy: 0.9708 - val_loss: 0.1077\n", "Epoch 16/25\n", "\u001b[1m740/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9599 - loss: 0.1304\n", "Epoch 16: val_loss improved from 0.10772 to 0.10721, saving model to model_checkpoints/weights.16-0.11.h5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`. \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9599 - loss: 0.1304 - val_accuracy: 0.9700 - val_loss: 0.1072\n", "Epoch 17/25\n", "\u001b[1m741/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9600 - loss: 0.1267\n", "Epoch 17: val_loss did not improve from 0.10721\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9600 - loss: 0.1268 - val_accuracy: 0.9717 - val_loss: 0.1089\n", "Epoch 18/25\n", "\u001b[1m749/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9599 - loss: 0.1258\n", "Epoch 18: val_loss did not improve from 0.10721\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9599 - loss: 0.1258 - val_accuracy: 0.9702 - val_loss: 0.1076\n", "Epoch 19/25\n", "\u001b[1m749/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9597 - loss: 0.1319\n", "Epoch 19: val_loss did not improve from 0.10721\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 6ms/step - accuracy: 0.9597 - loss: 0.1319 - val_accuracy: 0.9698 - val_loss: 0.1091\n", "Epoch 20/25\n", "\u001b[1m743/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9593 - loss: 0.1273\n", "Epoch 20: val_loss improved from 0.10721 to 0.10638, saving model to model_checkpoints/weights.20-0.11.h5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`. \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9593 - loss: 0.1273 - val_accuracy: 0.9701 - val_loss: 0.1064\n", "Epoch 21/25\n", "\u001b[1m743/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9600 - loss: 0.1278\n", "Epoch 21: val_loss did not improve from 0.10638\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9599 - loss: 0.1278 - val_accuracy: 0.9696 - val_loss: 0.1065\n", "Epoch 22/25\n", "\u001b[1m743/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9614 - loss: 0.1267\n", "Epoch 22: val_loss did not improve from 0.10638\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9614 - loss: 0.1267 - val_accuracy: 0.9697 - val_loss: 0.1086\n", "Epoch 23/25\n", "\u001b[1m746/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9607 - loss: 0.1275\n", "Epoch 23: val_loss did not improve from 0.10638\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9607 - loss: 0.1275 - val_accuracy: 0.9694 - val_loss: 0.1091\n", "Epoch 24/25\n", "\u001b[1m747/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9604 - loss: 0.1262\n", "Epoch 24: val_loss did not improve from 0.10638\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9604 - loss: 0.1262 - val_accuracy: 0.9702 - val_loss: 0.1091\n", "Epoch 25/25\n", "\u001b[1m746/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9611 - loss: 0.1261\n", "Epoch 25: val_loss did not improve from 0.10638\n", "\u001b[1m750/750\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 5ms/step - accuracy: 0.9611 - loss: 0.1261 - val_accuracy: 0.9703 - val_loss: 0.1072\n" ] } ], "source": [ "# ModelCheckpoint\n", "from tensorflow.keras.callbacks import ModelCheckpoint\n", "\n", "checkpoint_path = \"model_checkpoints/weights.{epoch:02d}-{val_loss:.2f}.keras\"\n", "checkpoint_callback = ModelCheckpoint(filepath=checkpoint_path,\n", " monitor='val_loss',\n", " verbose=1,\n", " save_best_only=True,\n", " mode='min')\n", "\n", "history = model.fit(X_train, Y_train,\n", " epochs=EPOCHS,\n", " verbose=VERBOSE,\n", " callbacks=[checkpoint_callback],\n", " batch_size=BATCH_SIZE,\n", " validation_split=VALIDATION_SPLIT)\n" ] }, { "cell_type": "markdown", "id": "a6226565-c626-4d57-bbb6-c4ed53e4a8d5", "metadata": { "jp-MarkdownHeadingCollapsed": true }, "source": [ "## Rysowanie i testowanie poszczególnych liczb" ] }, { "cell_type": "code", "execution_count": 152, "id": "e3523f08-f904-495f-b732-16ef36b7e653", "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "\n", "def plot_image(i, predictions_array, true_label, img):\n", " true_label, img = true_label[i], img[i]\n", " plt.grid(False)\n", " plt.xticks([])\n", " plt.yticks([])\n", " plt.imshow(img, cmap=plt.cm.binary)\n", " predicted_label = np.argmax(predictions_array)\n", " if predicted_label == true_label:\n", " color ='blue'\n", " else:\n", " color ='red'\n", " plt.xlabel(\"Pred {} Conf: {:2.0f}% True ({})\".format(predicted_label,\n", " 100*np.max(predictions_array),\n", " true_label),\n", " color=color)\n", "def plot_value_array(i, predictions_array, true_label):\n", " true_label = true_label[i]\n", " plt.grid(False)\n", " plt.xticks(range(10))\n", " plt.yticks([])\n", " thisplot = plt.bar(range(10), predictions_array,color=\"#777777\")\n", " plt.ylim([0, 1])\n", " predicted_label = np.argmax(predictions_array)\n", " thisplot[predicted_label].set_color('red')\n", " thisplot[true_label].set_color('blue')" ] }, { "cell_type": "code", "execution_count": 153, "id": "88b5e8c6-f93f-4f05-b473-54565260d309", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
Model: \"sequential_6\"\n",
"\n"
],
"text/plain": [
"\u001b[1mModel: \"sequential_6\"\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
"┃ Layer (type) ┃ Output Shape ┃ Param # ┃\n",
"┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
"│ conv2d_18 (Conv2D) │ (None, 32, 32, 32) │ 896 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ batch_normalization_18 │ (None, 32, 32, 32) │ 128 │\n",
"│ (BatchNormalization) │ │ │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ activation_18 (Activation) │ (None, 32, 32, 32) │ 0 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ conv2d_19 (Conv2D) │ (None, 32, 32, 32) │ 9,248 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ batch_normalization_19 │ (None, 32, 32, 32) │ 128 │\n",
"│ (BatchNormalization) │ │ │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ activation_19 (Activation) │ (None, 32, 32, 32) │ 0 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ max_pooling2d_9 (MaxPooling2D) │ (None, 16, 16, 32) │ 0 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dropout_9 (Dropout) │ (None, 16, 16, 32) │ 0 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ conv2d_20 (Conv2D) │ (None, 16, 16, 64) │ 18,496 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ batch_normalization_20 │ (None, 16, 16, 64) │ 256 │\n",
"│ (BatchNormalization) │ │ │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ activation_20 (Activation) │ (None, 16, 16, 64) │ 0 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ conv2d_21 (Conv2D) │ (None, 16, 16, 64) │ 36,928 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ batch_normalization_21 │ (None, 16, 16, 64) │ 256 │\n",
"│ (BatchNormalization) │ │ │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ activation_21 (Activation) │ (None, 16, 16, 64) │ 0 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ max_pooling2d_10 (MaxPooling2D) │ (None, 8, 8, 64) │ 0 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dropout_10 (Dropout) │ (None, 8, 8, 64) │ 0 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ conv2d_22 (Conv2D) │ (None, 8, 8, 128) │ 73,856 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ batch_normalization_22 │ (None, 8, 8, 128) │ 512 │\n",
"│ (BatchNormalization) │ │ │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ activation_22 (Activation) │ (None, 8, 8, 128) │ 0 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ conv2d_23 (Conv2D) │ (None, 8, 8, 128) │ 147,584 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ batch_normalization_23 │ (None, 8, 8, 128) │ 512 │\n",
"│ (BatchNormalization) │ │ │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ activation_23 (Activation) │ (None, 8, 8, 128) │ 0 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ max_pooling2d_11 (MaxPooling2D) │ (None, 4, 4, 128) │ 0 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dropout_11 (Dropout) │ (None, 4, 4, 128) │ 0 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ flatten_3 (Flatten) │ (None, 2048) │ 0 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dense_5 (Dense) │ (None, 10) │ 20,490 │\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_18 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m896\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ batch_normalization_18 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m128\u001b[0m │\n",
"│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ activation_18 (\u001b[38;5;33mActivation\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ conv2d_19 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m9,248\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ batch_normalization_19 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m128\u001b[0m │\n",
"│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ activation_19 (\u001b[38;5;33mActivation\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ max_pooling2d_9 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dropout_9 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ conv2d_20 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m18,496\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ batch_normalization_20 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m256\u001b[0m │\n",
"│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ activation_20 (\u001b[38;5;33mActivation\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ conv2d_21 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m36,928\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ batch_normalization_21 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m256\u001b[0m │\n",
"│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ activation_21 (\u001b[38;5;33mActivation\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m16\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ max_pooling2d_10 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dropout_10 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ conv2d_22 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m73,856\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ batch_normalization_22 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m512\u001b[0m │\n",
"│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ activation_22 (\u001b[38;5;33mActivation\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ conv2d_23 (\u001b[38;5;33mConv2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m147,584\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ batch_normalization_23 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m512\u001b[0m │\n",
"│ (\u001b[38;5;33mBatchNormalization\u001b[0m) │ │ │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ activation_23 (\u001b[38;5;33mActivation\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m8\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ max_pooling2d_11 (\u001b[38;5;33mMaxPooling2D\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m4\u001b[0m, \u001b[38;5;34m4\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dropout_11 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m4\u001b[0m, \u001b[38;5;34m4\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ flatten_3 (\u001b[38;5;33mFlatten\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m2048\u001b[0m) │ \u001b[38;5;34m0\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;34m20,490\u001b[0m │\n",
"└─────────────────────────────────┴────────────────────────┴───────────────┘\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"Total params: 309,290 (1.18 MB)\n", "\n" ], "text/plain": [ "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m309,290\u001b[0m (1.18 MB)\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
Trainable params: 308,394 (1.18 MB)\n", "\n" ], "text/plain": [ "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m308,394\u001b[0m (1.18 MB)\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
Non-trainable params: 896 (3.50 KB)\n", "\n" ], "text/plain": [ "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m896\u001b[0m (3.50 KB)\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "model.summary()" ] }, { "cell_type": "markdown", "id": "e0dff06e-57cd-4caf-a49e-2307764a9831", "metadata": {}, "source": [ "## Uczenie modelu" ] }, { "cell_type": "code", "execution_count": 56, "id": "227d98ed-a60d-4fcf-aa0a-2f9fc1b4050e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/100\n", "\u001b[1m138/195\u001b[0m \u001b[32m━━━━━━━━━━━━━━\u001b[0m\u001b[37m━━━━━━\u001b[0m \u001b[1m1:35\u001b[0m 2s/step - accuracy: 0.2540 - loss: 2.3037" ] }, { "ename": "KeyboardInterrupt", "evalue": "", "output_type": "error", "traceback": [ "\u001b[31m---------------------------------------------------------------------------\u001b[39m", "\u001b[31mKeyboardInterrupt\u001b[39m Traceback (most recent call last)", "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[56]\u001b[39m\u001b[32m, line 1\u001b[39m\n\u001b[32m----> \u001b[39m\u001b[32m1\u001b[39m \u001b[43mmodel\u001b[49m\u001b[43m.\u001b[49m\u001b[43mfit\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 2\u001b[39m \u001b[43m \u001b[49m\u001b[43mx\u001b[49m\u001b[43m=\u001b[49m\u001b[43mdata_generator\u001b[49m\u001b[43m.\u001b[49m\u001b[43mflow\u001b[49m\u001b[43m(\u001b[49m\u001b[43mX_train\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mY_train\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mbatch_size\u001b[49m\u001b[43m=\u001b[49m\u001b[32;43m256\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 3\u001b[39m \u001b[43m \u001b[49m\u001b[43mepochs\u001b[49m\u001b[43m=\u001b[49m\u001b[32;43m100\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[32m 4\u001b[39m \u001b[43m \u001b[49m\u001b[43mverbose\u001b[49m\u001b[43m=\u001b[49m\u001b[32;43m1\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[32m 5\u001b[39m \u001b[43m \u001b[49m\u001b[43mvalidation_data\u001b[49m\u001b[43m=\u001b[49m\u001b[43m(\u001b[49m\u001b[43mX_validation\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mY_validation\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 6\u001b[39m \u001b[43m \u001b[49m\u001b[43msteps_per_epoch\u001b[49m\u001b[43m=\u001b[49m\u001b[38;5;28;43mlen\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mX_train\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[43m/\u001b[49m\u001b[43m/\u001b[49m\u001b[43m \u001b[49m\u001b[32;43m256\u001b[39;49m\n\u001b[32m 7\u001b[39m \u001b[43m)\u001b[49m\n", "\u001b[36mFile \u001b[39m\u001b[32m~/.local/share/virtualenvs/JupyterLab-9JRWupKp/lib/python3.12/site-packages/keras/src/utils/traceback_utils.py:117\u001b[39m, in \u001b[36mfilter_traceback.
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",
"│ embedding_2 (Embedding) │ ? │ 0 (unbuilt) │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ simple_rnn_2 (SimpleRNN) │ ? │ 0 (unbuilt) │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dense_6 (Dense) │ ? │ 0 (unbuilt) │\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",
"│ embedding_2 (\u001b[38;5;33mEmbedding\u001b[0m) │ ? │ \u001b[38;5;34m0\u001b[0m (unbuilt) │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ simple_rnn_2 (\u001b[38;5;33mSimpleRNN\u001b[0m) │ ? │ \u001b[38;5;34m0\u001b[0m (unbuilt) │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dense_6 (\u001b[38;5;33mDense\u001b[0m) │ ? │ \u001b[38;5;34m0\u001b[0m (unbuilt) │\n",
"└─────────────────────────────────┴────────────────────────┴───────────────┘\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"Total params: 0 (0.00 B)\n", "\n" ], "text/plain": [ "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
Trainable params: 0 (0.00 B)\n", "\n" ], "text/plain": [ "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\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.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])\n", "model.summary()" ] }, { "cell_type": "code", "execution_count": 61, "id": "6b024476-a946-4672-b1e9-8bb0de26c8e8", "metadata": {}, "outputs": [], "source": [ "import tensorflow as tf\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from tensorflow.keras.preprocessing.text import Tokenizer\n", "from tensorflow.keras.utils import to_categorical\n", "from tensorflow.keras.preprocessing.sequence import pad_sequences\n" ] }, { "cell_type": "code", "execution_count": 105, "id": "862e9746-1f60-4036-b007-13240b285e2f", "metadata": {}, "outputs": [], "source": [ "text = \"\"\"\n", "Pewnemu bogatemu panu zachorowała żona, a kiedy poczuła, że nadszedł jej koniec, zawołała swoją jedyną córeczkę do łóżka i rzekła: \"Drogie dziecko, bądź pobożna i dobra, a dobry Bóg będzie z tobą. Będę patrzyła na ciebie z nieba i będę przy tobie.\" Potem zamknęła oczy i odeszła. Dziewczynka codziennie chodziła na grób matki, płakała, była pobożna i dobra. Kiedy nadeszła zima, śnieg przykrył białą chustą grób, a kiedy wiosenne słońce ją zdjęło, pan wziął sobie drugą żonę.\n", "Kobieta zabrała do domu dwie córki, które z twarzy były śniade i piękne, ale w sercach szpetne i czarne. Dla biednej pasierbicy nastał zły czas.\n", "\"Czy ta głupia gęś ma siedzieć z nami w izbie,\" mówiły, \"Kto chce jeść chleb, musi na niego zasłużyć. Precz do kuchni z tą dziewką!\"\n", "Zabrały jej piękne suknie i założyły stary szary fartuch i drewniane buty. \"Popatrzcie no na dumną księżniczkę, jaka umorusana!\" wołały, śmiały się i poprowadziły do kuchni. A tam od rana do wieczora musiała ciężko pracować i wstawać przed dniem, nosić wodę, rozpalać ogień, gotować i myć. Siostry nie szczędziły jej żadnej przykrości, szydziły z niej, sypały groch i soczewicę do popiołu, tak że musiała siedzieć i zbierać. Wieczorem, zmęczona po ciężkiej pracy nie szła do łóżka, lecz kładła się na popielisko obok pieca. A ponieważ ciągle była w kurzu i brudzie nazwano ją Kopciuszkiem.\n", "Zdarzyło się, że ojciec szedł na targ. Zapytał wtedy swoje pasierbice, co ma im przynieść. \"Piękne suknie!,\" powiedziała jedna; \"Perły i drogie kamienie,\" druga. - \"A ty, Kopciuszku,\" powiedział, \"co chcesz mieć?\" -\"Ojcze, pierwszą gałązkę, która wam kapelusz na waszej drodze do domu z głowy strąci, ułamcie ją dla mnie.\"\n", "Kupił więc obu pasierbicom piękne suknie, perły i drogie kamienie, a kiedy w drodze do domu jechał swym koniem przez zielony gaj, zaczepiła go gałązka leszczyny i strąciła mu kapelusz. Ułamał ją więc i zabrał ze sobą. Kiedy przybył do domu, dał pasierbicom, czego sobie życzyły, a kopciuszkowi gałązkę krzewu leszczyny. Kopciuszek podziękował mu, poszedł na grób matki i zasadził na nim gałązkę. Płakał tak bardzo, że łzy kapały na nią i ją zraszały. Gałązka urosła i stała się pięknym drzewem. Kopciuszek chodził pod nie co trzy dni, płakał i modlił się, a za każdym razem na drzewie siadał biały ptaszek i kiedy Kopciuszek wymawiał swoje życzenie, zrzucał mu czego chciał.\n", "Zdarzyło się też, że król wyprawiał ucztę, która miała trwać trzy dni. Zaprosił na nią wszystkie panny w kraju, aby jego syn znalazł sobie narzeczoną. Gdy przyrodnie siostry usłyszały, że i one mają się zjawić, były dobrej myśli, zawołały kopciuszka i powiedziały: \"Uczesz nam włosy, wyszczotkuj buty i zapnij klamerki, idziemy na Wesele na zamek króla.\"\n", "Kopciuszek usłuchał, ale płakał, bo też chciał iść w tan na wesele i poprosił macochę, by raczyła jej na to pozwolić.\n", "\"Ty kopciuszku,\" rzekła, \"pełna jesteś kurzu i brudu... i ty chcesz iść na wesele? Nie masz sukien ni butów, a chcesz tańczyć!\" A kiedy kopciuszek przestał prosić, powiedziała: \"Wysypałam ci miskę soczewicy do popiołu. Jeśli pozbierasz ją w dwie godziny, możesz z nami pójść\"\n", "Dziewczynka wyszła przez tylne drzwi do ogrodu i zawołała: \"Łaskawe gołąbki, turkaweczki, wszystkie ptaszki na niebie, przylećcie by pomóc mi zbierać.\n", "Dobre do garnuszka,\n", "a złe do brzuszka\"\n", "I wtedy przez kuchenne okno wleciały dwa białe gołąbki, potem turkaweczki, aż wreszcie furknęły wszystkie ptaszki na niebie wlatując do kuchni, usiadły wokół popieliska, że aż się od nich zaroiło. A gołąbki kiwały swoimi główkami i zaczęły robić pik, pik, pik, a wtedy i wszystkie inne ptaszki zaczęły robić pik, pik, pik i zbierały dobre ziarenka do miski. I nie minęła nawet godzina a wszystkie były gotowe i odleciały. Dziewczynka zaniosła miskę do macochy, cieszyła się i wierzyła, że będzie mogła pójść na wesele. Ale macocha powiedziała: \"Nie kopciuszku, nie masz sukien i nie umiesz tańczyć; tylko by się z ciebie śmiali.\"\n", "Wtedy kopciuszek zapłakał, a macocha powiedziała \"Jeśli w ciągu godziny wybierzesz z popiołu dwie miski pełne soczewicy, możesz pójść z nami, i pomyślała; \"Nigdy jej się to nie uda.\" A kiedy wysypała dwie miski soczewicy na popielisko, dziewczynka wyszła przez tylne drzwi do ogrodu i zawołała: \"Łaskawe gołąbki, turkaweczki, wszystkie ptaszki na niebie, przylećcie by pomóc mi zbierać.\n", "Dobre do garnuszka,\n", "a złe do brzuszka\"\n", "I wtedy przez kuchenne okno wleciały dwa białe gołąbki, potem turkaweczki, aż wreszcie furknęły wszystkie ptaszki na niebie wlatując do kuchni, usiadły wokół popieliska, że aż się od nich zaroiło. A gołąbki kiwały swoimi główkami i zaczęły robić pik, pik, pik, a wtedy i wszystkie inne ptaszki zaczęły robić pik, pik, pik i zbierały dobre ziarenka do miski. I zanim minęło pół godziny wszystkie były gotowe i odleciały. Dziewczynka zaniosła miskę do macochy, cieszyła się i wierzyła, że będzie mogła pójść na wesele. Ale macocha powiedziała: \"Nie pomoże ci to. Nie pójdziesz z nami, bo nie masz sukien i nie umiesz tańczyć; wstydziłybyśmy się ciebie.\" Odwróciła się do Kopciuszka plecami i pospieszyła za swymi córkami.\n", "Kiedy nikogo nie było już w domu, kopciuszek poszedł na grób swojej matki pod leszczynowym drzewem i zawołał:\n", "\"Drzewko, drzewko zrzuć na mnie oto\n", "srebro i złoto\"\n", "A ptaszek zrzucił jej suknię ze srebra i złota i pantofle przetykane jedwabiem i srebrem. W pośpiechu kopciuszek założył suknię i poszedł na wesele. Jego siostry i macocha nie poznały go i myślały, że to królewna z dalekiego kraju, tak piękna była w swej złotej sukni. O kopciuszku nawet nie pomyślały, o Kopciuszku, który siedział w domu, w brudzie i wyszukiwał soczewicy w popiele. Królewicz podszedł do niej, wziął ją za rękę i tańczył z nią. Nie chciał tańczyć z nikim innym trzymając ją cały czas za rękę, a kiedy podszedł ktoś by poprosić ją do tańca, mówił: \"To moja tancerka.\"\n", "Kopciuszek tańczył do wieczora aż w końcu chciał iść do domu. Ale królewicz powiedział: \"Pójdę z Tobą i odprowadzę cię,\" bo chciał zobaczyć, czyja była tak piękna dziewczyna. Kopciuszek jednak uciekł mu i wskoczył do gołębnika. Królewicz czekał, aż przyszedł ojciec kopciuszka i powiedział mu, że pewna nieznajoma dziewczyna wskoczyła do gołębnika. Stary pomyślał: \"Czy to był mój Kopciuszek?\" i musieli mu przynieść siekierę i bosak, aby mógł przeciąć gołębnik na pół. Lecz w środku nie było nikogo. Gdy weszli do domu, Kopciuszek leżał w popiele w swoim brudnym ubraniu, a w kominku paliła się ciemna olejowa lampka, Kopciuszek bowiem wyskoczył z tyłu gołębnika i pobiegł do leszczynowego drzewa. Tam zdjął swe piękne suknie i położył na grób, a ptak je zabrał. Potem położył się w swych szarych rzeczach na kuchennym popielisku.\n", "Następnego dnia, gdy uczta znowu się zaczynała, a rodzice i przyrodnie siostry już odeszły, kopciuszek podszedł do leszczyny i rzekł:\n", "\"Drzewko, drzewko zrzuć na mnie oto\n", "srebro i złoto\"\n", "A ptak zrzucił suknię jeszcze bardziej przepyszną niż poprzedniego dnia. Kiedy ukazał się na weselu w tej sukni, zdziwił się każdy jego urodą. Królewicz czekał aż przyjdzie by wziąć Kopciuszka za rękę i tańczyć tylko z nim, a kiedy podszedł ktoś by poprosić go do tańca, mówił: \"To moja tancerka.\" Kiedy przyszedł zaś wieczór, Kopciuszek chciał odejść, lecz królewicz szedł za nim, bo chciał zobaczyć do jakiego pójdzie domu. Kopciuszek jednak szybko skoczył do przodu i pobiegł do ogrodu za domem, w którym stało piękne wielkie drzewo, a na nim wisiały wspaniałe gruszki. Wspiął się na nie tak zwinnie, jakby to wiewiórka wiła się wśród gałęzi, a królewicz nie wiedział, gdzie Kopciuszek poszedł. Czekał jednak, aż zjawił się ojciec i rzekł do niego: \"Ta nieznajoma dziewczyna uciekła mi i - jak sądzę - wskoczyła na tę gruszę. Ojciec pomyślał: \"Czy to mój Kopciuszek?\" Kazał sobie wnet przynieść siekierę i ściął drzewo, lecz nie było na nim nikogo.\n", "Gdy poszli do kuchni, Kopciuszek jak zawsze leżał na popielisku, bo zeskoczył był z drugiej strony drzewa, ptaszkowi na leszczynowym drzewie oddał piękne suknie i włożył swój szary fartuch.\n", "Trzeciego dnia, gdy rodzice i przyrodnie siostry już poszli, Kopciuszek poszedł na grób matki i rzekł do drzewka:\n", "\"Drzewko, drzewko zrzuć na mnie oto\n", "srebro i złoto\"\n", "A ptaszek zrzucił mu suknię, która była taka wspaniała i błyszcząca, jakiej nie miał jeszcze nikt, a pantofle całe były ze złota. Kiedy w tej sukni przyszła na wesele, nikt z zachwytu głosu z siebie dobyć nie mógł. Królewicz tańczył tylko z Kopciuszkiem, a kiedy podchodził ktoś, by poprosić kopciuszka do tańca, mówił: \"To moja tancerka.\"\n", "Kiedy nadszedł wieczór, Kopciuszek chciał odejść, a królewicz chciał go odprowadzić, lecz dziewczyna tak szybko znikła mu z oczu, że nie mógł iść za nią. Królewicz obmyślił jednak podstęp i kazał wysmarować całe schody smołą. Kiedy kopciuszek szedł po nich, do smoły przykleił się lewy pantofel. Królewicz podniósł go. Był mały, delikatny i cały ze złota. Rankiem podszedł do człowieka, którego spotykał co wieczór i rzekł: \"żadna inna nie może zostać moją żoną niż ta, na którą będzie pasował ten złoty bucik.\" Ucieszyły się obie siostry, bo miały piękne nogi.\n", "Najstarsza poszła z butem do izby i chciała go przymierzyć, a była przy tym matka. Nie mogła jednak zmiścić wielkiego palca, bo but był na nią za mały. Wtedy matka podała jej nóż i rzekła: \"Odetnij tego palca: Kiedy będziesz królową, nie będziesz musiała chodzić pieszo.\" Dziewczyna obcięła palca, wcisnęła stopę w buta, a z bólu zacisnęła usta i wyszła do królewicza. Potem wziął ją jako narzeczoną na konia i odjechał. Musieli przejechać koło grobu, gdzie siedziały dwa gołąbki na leszczynowym drzewku i wołały:\n", "Pewnie wzrok z ciebie drwi,\n", "Bo buty pełne są krwi.\n", "Oczy oszukać się dały,\n", "Bo but jest dużo za mały.\n", "Prawdziwa panna jest w domu\n", "Nieznana jeszcze nikomu.\n", "Spojrzał więc na nogę i zobaczył, jak tryska krew. Zawrócił konia i odwiózł fałszywą narzeczoną do domu. Druga siostra musiała przymierzyć buta. Poszła więc do izby, szczęśliwa włożyła palce do buta, lecz pięta była za duża. Wtedy matka podała jej nóż i rzekła: \"Odetnij kawałek pięty: Kiedy będziesz królową, nie będziesz musiała chodzić pieszo.\" Dziewczyna obcięła kawałek pięty, wcisnęła stopę w buta, a z bólu zacisnęła usta i wyszła do królewicza.\n", "On zaś wziął ją jako narzeczoną na konia i odjechał. Kiedy przejeżdżali obok leszczynowego drzewka, dwa gołąbki zawołały:\n", "\"Pewnie wzrok z ciebie drwi,\n", "Bo buty pełne są krwi.\n", "Oczy oszukać się dały,\n", "Bo but jest dużo za mały.\n", "Prawdziwa panna jest w domu\n", "Nieznana jeszcze nikomu.\"\n", "Spojrzał na jej stopę i zobaczył, jak krew tryska z buta, a po białych pończochach sączy się do góry i barwi je na czerwono. Zawrócił więc konia i odwiózł fałszywą narzeczoną do domu.\n", "\"Nie o nią mi chodziło,\" powiedział., \"Czy macie jeszcze jakąś córkę?\"\n", "\"Nie,\" odrzekł pan, \"Jest jeszcze tylko mój mały lichy Kopciuszek po mojej zmarłej żonie, ale on na pewno nie jest tą panną.\"\n", "Królewicz powiedział, że mają ją przysłać, a matka odpowiedziała: \"Och nie, ona jest zbyt brudna i nie może się taka pokazać.\" Ale on chciał koniecznie ją zobaczyć i musieli ją zawołać. Kopciuszek umył sobie najpierw ręce i twarz, a potem poszedł pokłonić się królewiczowi, który podał mu złoty but. Potem usiadł na zydelku, zdjął ciężkiego drewniaka, i włożył pantofelek, który leżał jak ulał. A kiedy wstał, królewicz ujrzał jego twarz i poznał piękną dziewczynę, która z nim tańczyła i zawołał: \"Oto prawdziwa panna!\"\n", "Macocha i obie siostry wystraszyły się i zbladły ze złości. A on wziął Kopciuszka na konia i odjechał z nim. Kiedy przejeżdżali obok leszczynowego drzewka, zawołały dwa gołąbki:\n", "\"Widoku nic nie psuje\n", "Bo bucik pięknie pasuje\n", "Nie barwi go krew czerwona,\n", "Bo panną młodą zaprawdę jest ona.\"\n", "A kiedy to zawołały, usiadły Kopciuszkowi na ramionach, jeden z prawej, a drugi z lewej strony i tak zostały.\n", "Kiedy miał odbyć się ślub z królewiczem, przyszły fałszywe siostry i chciały się przypodobać, by mieć swój udział w szczęściu Kopciuszka. Kiedy narzeczeni wchodzili do kościoła, starsza była z prawej strony, a młodsza z lewej. I wtedy gołębie wydziobały każdej po tym właśnie oku. Kiedy zaś wychodzili, starsza była z lewej a młodsza z prawej, gołębie wydziobały każdej po drugim oku. I tak zostały ukarane ślepotą po kres życia za swe zło i fałsz.\n", "\"\"\"" ] }, { "cell_type": "code", "execution_count": 106, "id": "76e6afde-0194-4714-8b77-8a1876c5d128", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "767\n" ] } ], "source": [ "tokenizer = Tokenizer()\n", "tokenizer.fit_on_texts([text])\n", "total_words = len(tokenizer.word_index) + 1\n", "print(total_words)\n" ] }, { "cell_type": "code", "execution_count": 107, "id": "2b84df3b-93e1-4603-9284-97011baad75f", "metadata": {}, "outputs": [], "source": [ "input_sequences = []\n", "for line in text.split('.'):\n", " tokens = tokenizer.texts_to_sequences([line])[0]\n", " for i in range(1, len(tokens)):\n", " n_gram_sequence = tokens[:i+1]\n", " input_sequences.append(n_gram_sequence)\n", " " ] }, { "cell_type": "code", "execution_count": 108, "id": "e8c4750d-bb65-4038-bdf4-b4f194f5872e", "metadata": {}, "outputs": [], "source": [ "max_sequence_len = max([len(x) for x in input_sequences])\n", "input_sequences = pad_sequences(input_sequences, maxlen=max_sequence_len, padding='pre')" ] }, { "cell_type": "code", "execution_count": 109, "id": "ac784307-1b04-47da-b627-81a82a6c22d2", "metadata": {}, "outputs": [], "source": [ "model = tf.keras.Sequential([\n", " tf.keras.layers.Embedding(total_words, 10, input_length=max_sequence_len - 1),\n", " tf.keras.layers.SimpleRNN(100),\n", " tf.keras.layers.Dense(total_words, activation='softmax')\n", "])" ] }, { "cell_type": "code", "execution_count": 110, "id": "32f017ab-3603-42b3-8c13-546a3e0f5425", "metadata": {}, "outputs": [], "source": [ "X = input_sequences[:, :-1]\n", "y = input_sequences[:, -1]\n", "y = to_categorical(y, num_classes=total_words)" ] }, { "cell_type": "code", "execution_count": 111, "id": "11705dd1-aa5f-4e52-a122-81420774e6bd", "metadata": { "collapsed": true, "jupyter": { "outputs_hidden": true } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 12ms/step - accuracy: 0.0227 - loss: 6.5034\n", "Epoch 2/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.0527 - loss: 6.0484\n", "Epoch 3/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.0519 - loss: 6.0051\n", "Epoch 4/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 12ms/step - accuracy: 0.0662 - loss: 5.9677\n", "Epoch 5/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 12ms/step - accuracy: 0.0548 - loss: 5.9712\n", "Epoch 6/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 12ms/step - accuracy: 0.0556 - loss: 5.9043\n", "Epoch 7/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.0550 - loss: 5.9238\n", "Epoch 8/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.0585 - loss: 5.7557\n", "Epoch 9/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.0568 - loss: 5.6373\n", "Epoch 10/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.0694 - loss: 5.3867\n", "Epoch 11/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.0837 - loss: 5.1139\n", "Epoch 12/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 12ms/step - accuracy: 0.1167 - loss: 4.8405\n", "Epoch 13/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 12ms/step - accuracy: 0.1670 - loss: 4.4726\n", "Epoch 14/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 12ms/step - accuracy: 0.2001 - loss: 4.2676\n", "Epoch 15/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.2414 - loss: 3.9807\n", "Epoch 16/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 12ms/step - accuracy: 0.2795 - loss: 3.7808\n", "Epoch 17/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 12ms/step - accuracy: 0.3188 - loss: 3.5467\n", "Epoch 18/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 12ms/step - accuracy: 0.3674 - loss: 3.2855\n", "Epoch 19/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 12ms/step - accuracy: 0.4460 - loss: 3.0708\n", "Epoch 20/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.4988 - loss: 2.8333\n", "Epoch 21/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 12ms/step - accuracy: 0.5333 - loss: 2.6608\n", "Epoch 22/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.5689 - loss: 2.4732\n", "Epoch 23/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.6198 - loss: 2.2992\n", "Epoch 24/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 12ms/step - accuracy: 0.6715 - loss: 2.1395\n", "Epoch 25/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.6789 - loss: 2.0192\n", "Epoch 26/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 12ms/step - accuracy: 0.6972 - loss: 1.8845\n", "Epoch 27/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.7436 - loss: 1.7595\n", "Epoch 28/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.7557 - loss: 1.6361\n", "Epoch 29/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 12ms/step - accuracy: 0.7637 - loss: 1.5409\n", "Epoch 30/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.8207 - loss: 1.3351\n", "Epoch 31/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.8051 - loss: 1.3072\n", "Epoch 32/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.8244 - loss: 1.2233\n", "Epoch 33/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.8339 - loss: 1.1536\n", "Epoch 34/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.8307 - loss: 1.1527\n", "Epoch 35/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.8663 - loss: 0.9819\n", "Epoch 36/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.8572 - loss: 0.9780\n", "Epoch 37/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.8780 - loss: 0.8911\n", "Epoch 38/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.8870 - loss: 0.8246\n", "Epoch 39/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.8908 - loss: 0.8111\n", "Epoch 40/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9097 - loss: 0.7270\n", "Epoch 41/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9044 - loss: 0.7352\n", "Epoch 42/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9189 - loss: 0.6513\n", "Epoch 43/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 12ms/step - accuracy: 0.9163 - loss: 0.6176\n", "Epoch 44/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9252 - loss: 0.5839\n", "Epoch 45/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9372 - loss: 0.5575\n", "Epoch 46/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9345 - loss: 0.5296\n", "Epoch 47/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 12ms/step - accuracy: 0.9413 - loss: 0.5032\n", "Epoch 48/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9288 - loss: 0.5008\n", "Epoch 49/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9429 - loss: 0.4429\n", "Epoch 50/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9456 - loss: 0.4413\n", "Epoch 51/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9528 - loss: 0.3943\n", "Epoch 52/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9529 - loss: 0.3864\n", "Epoch 53/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9548 - loss: 0.3937\n", "Epoch 54/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9440 - loss: 0.3806\n", "Epoch 55/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9632 - loss: 0.3282\n", "Epoch 56/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9524 - loss: 0.3394\n", "Epoch 57/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9571 - loss: 0.3347\n", "Epoch 58/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9603 - loss: 0.3073\n", "Epoch 59/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9640 - loss: 0.2838\n", "Epoch 60/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9644 - loss: 0.2802\n", "Epoch 61/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9594 - loss: 0.2827\n", "Epoch 62/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9623 - loss: 0.2469\n", "Epoch 63/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9622 - loss: 0.2473\n", "Epoch 64/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9698 - loss: 0.2250\n", "Epoch 65/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9654 - loss: 0.2449\n", "Epoch 66/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9728 - loss: 0.2020\n", "Epoch 67/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9607 - loss: 0.2211\n", "Epoch 68/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9648 - loss: 0.2014\n", "Epoch 69/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9656 - loss: 0.2023\n", "Epoch 70/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9662 - loss: 0.1846\n", "Epoch 71/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 20ms/step - accuracy: 0.9670 - loss: 0.1770\n", "Epoch 72/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 26ms/step - accuracy: 0.9560 - loss: 0.2102\n", "Epoch 73/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 28ms/step - accuracy: 0.9637 - loss: 0.1712\n", "Epoch 74/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 20ms/step - accuracy: 0.9682 - loss: 0.1826\n", "Epoch 75/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9699 - loss: 0.1548\n", "Epoch 76/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9654 - loss: 0.1653\n", "Epoch 77/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9723 - loss: 0.1533\n", "Epoch 78/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 22ms/step - accuracy: 0.9676 - loss: 0.1573\n", "Epoch 79/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9603 - loss: 0.1726\n", "Epoch 80/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9687 - loss: 0.1472\n", "Epoch 81/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9673 - loss: 0.1455\n", "Epoch 82/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9694 - loss: 0.1410\n", "Epoch 83/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9692 - loss: 0.1314\n", "Epoch 84/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 18ms/step - accuracy: 0.9689 - loss: 0.1399\n", "Epoch 85/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9651 - loss: 0.1480\n", "Epoch 86/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9560 - loss: 0.1737\n", "Epoch 87/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9652 - loss: 0.1361\n", "Epoch 88/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.9692 - loss: 0.1295\n", "Epoch 89/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.9713 - loss: 0.1198\n", "Epoch 90/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9636 - loss: 0.1328\n", "Epoch 91/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9666 - loss: 0.1218\n", "Epoch 92/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9714 - loss: 0.1325\n", "Epoch 93/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9628 - loss: 0.1286\n", "Epoch 94/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9759 - loss: 0.1006\n", "Epoch 95/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9666 - loss: 0.1197\n", "Epoch 96/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9648 - loss: 0.1186\n", "Epoch 97/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9699 - loss: 0.1016\n", "Epoch 98/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 12ms/step - accuracy: 0.9642 - loss: 0.1219\n", "Epoch 99/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9681 - loss: 0.1097\n", "Epoch 100/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.9638 - loss: 0.1174\n", "Epoch 101/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 22ms/step - accuracy: 0.9614 - loss: 0.1133\n", "Epoch 102/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9634 - loss: 0.1051\n", "Epoch 103/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.9698 - loss: 0.1080\n", "Epoch 104/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9719 - loss: 0.1035\n", "Epoch 105/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.9617 - loss: 0.1238\n", "Epoch 106/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9792 - loss: 0.0871\n", "Epoch 107/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9680 - loss: 0.1019\n", "Epoch 108/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9749 - loss: 0.0932\n", "Epoch 109/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9626 - loss: 0.1079\n", "Epoch 110/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9697 - loss: 0.0935\n", "Epoch 111/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9658 - loss: 0.0991\n", "Epoch 112/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9734 - loss: 0.0809\n", "Epoch 113/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9642 - loss: 0.1029\n", "Epoch 114/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9757 - loss: 0.0875\n", "Epoch 115/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9645 - loss: 0.1038\n", "Epoch 116/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9649 - loss: 0.0981\n", "Epoch 117/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9662 - loss: 0.0977\n", "Epoch 118/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9702 - loss: 0.0848\n", "Epoch 119/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9614 - loss: 0.0943\n", "Epoch 120/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9678 - loss: 0.0958\n", "Epoch 121/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9694 - loss: 0.0874\n", "Epoch 122/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9678 - loss: 0.0825\n", "Epoch 123/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9660 - loss: 0.0889\n", "Epoch 124/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9699 - loss: 0.0835\n", "Epoch 125/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9691 - loss: 0.0830\n", "Epoch 126/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9689 - loss: 0.0905\n", "Epoch 127/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9634 - loss: 0.0955\n", "Epoch 128/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9629 - loss: 0.1004\n", "Epoch 129/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.9654 - loss: 0.0919\n", "Epoch 130/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9710 - loss: 0.0749\n", "Epoch 131/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9675 - loss: 0.0874\n", "Epoch 132/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9679 - loss: 0.0859\n", "Epoch 133/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.9601 - loss: 0.0870\n", "Epoch 134/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9680 - loss: 0.0796\n", "Epoch 135/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9688 - loss: 0.0854\n", "Epoch 136/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9694 - loss: 0.0692\n", "Epoch 137/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9570 - loss: 0.0961\n", "Epoch 138/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.9642 - loss: 0.0844\n", "Epoch 139/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9672 - loss: 0.0853\n", "Epoch 140/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9581 - loss: 0.0968\n", "Epoch 141/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9742 - loss: 0.0701\n", "Epoch 142/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9681 - loss: 0.0804\n", "Epoch 143/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 20ms/step - accuracy: 0.9719 - loss: 0.0706\n", "Epoch 144/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9729 - loss: 0.0716\n", "Epoch 145/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9679 - loss: 0.0836\n", "Epoch 146/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 21ms/step - accuracy: 0.9642 - loss: 0.0934\n", "Epoch 147/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9652 - loss: 0.0881\n", "Epoch 148/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9682 - loss: 0.0828\n", "Epoch 149/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 19ms/step - accuracy: 0.9671 - loss: 0.0808\n", "Epoch 150/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.9713 - loss: 0.0733\n", "Epoch 151/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 12ms/step - accuracy: 0.9661 - loss: 0.0757\n", "Epoch 152/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 12ms/step - accuracy: 0.9689 - loss: 0.0741\n", "Epoch 153/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.9589 - loss: 0.1052\n", "Epoch 154/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 12ms/step - accuracy: 0.9631 - loss: 0.0833\n", "Epoch 155/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 28ms/step - accuracy: 0.9738 - loss: 0.0671\n", "Epoch 156/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 19ms/step - accuracy: 0.9671 - loss: 0.0750\n", "Epoch 157/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9753 - loss: 0.0599\n", "Epoch 158/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9644 - loss: 0.0812\n", "Epoch 159/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9653 - loss: 0.0835\n", "Epoch 160/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9586 - loss: 0.0921\n", "Epoch 161/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9624 - loss: 0.0829\n", "Epoch 162/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9608 - loss: 0.0960\n", "Epoch 163/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9630 - loss: 0.0792\n", "Epoch 164/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9638 - loss: 0.0828\n", "Epoch 165/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9681 - loss: 0.0739\n", "Epoch 166/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9554 - loss: 0.1047\n", "Epoch 167/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9657 - loss: 0.0815\n", "Epoch 168/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9728 - loss: 0.0688\n", "Epoch 169/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9686 - loss: 0.0836\n", "Epoch 170/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9597 - loss: 0.0834\n", "Epoch 171/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9698 - loss: 0.0661\n", "Epoch 172/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9759 - loss: 0.0639\n", "Epoch 173/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9648 - loss: 0.0788\n", "Epoch 174/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9590 - loss: 0.0832\n", "Epoch 175/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9679 - loss: 0.0687\n", "Epoch 176/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9621 - loss: 0.0810\n", "Epoch 177/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9650 - loss: 0.0808\n", "Epoch 178/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9567 - loss: 0.0842\n", "Epoch 179/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9243 - loss: 0.2690\n", "Epoch 180/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.9562 - loss: 0.1380\n", "Epoch 181/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9635 - loss: 0.0920\n", "Epoch 182/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9655 - loss: 0.0916\n", "Epoch 183/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9684 - loss: 0.0807\n", "Epoch 184/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9690 - loss: 0.0798\n", "Epoch 185/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9656 - loss: 0.0820\n", "Epoch 186/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9690 - loss: 0.0789\n", "Epoch 187/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9715 - loss: 0.0678\n", "Epoch 188/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9593 - loss: 0.1013\n", "Epoch 189/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9646 - loss: 0.0824\n", "Epoch 190/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9629 - loss: 0.0811\n", "Epoch 191/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.9667 - loss: 0.0712\n", "Epoch 192/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 16ms/step - accuracy: 0.9667 - loss: 0.0694\n", "Epoch 193/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.9723 - loss: 0.0600\n", "Epoch 194/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9648 - loss: 0.0808\n", "Epoch 195/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9753 - loss: 0.0602\n", "Epoch 196/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9716 - loss: 0.0641\n", "Epoch 197/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9656 - loss: 0.0812\n", "Epoch 198/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9594 - loss: 0.0814\n", "Epoch 199/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.9667 - loss: 0.0769\n", "Epoch 200/200\n", "\u001b[1m59/59\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 14ms/step - accuracy: 0.9622 - loss: 0.0834\n" ] }, { "data": { "text/plain": [ "