Introduction aux réseaux de neurones artificiels

CSI 4106 - automne 2026

Marcel Turcotte

Version: août 9, 2026 12h46

Préambule

Message du jour

Citation du Jour (2024)

Objectifs d’apprentissage

  • Expliquer les perceptrons et MLPs : structure, fonction, histoire, et limitations.
  • Décrire les fonctions d’activation : leur rôle dans l’apprentissage de modèles complexes.
  • Implémenter un réseau de neurones à propagation avant avec Keras sur Fashion-MNIST.
  • Interpréter l’entraînement et les résultats des réseaux neuronaux : visualisation et mesures d’évaluation.
  • Se familiariser avec les frameworks d’apprentissage profond : PyTorch, TensorFlow et Keras pour la création et le déploiement de modèles.

Introduction

TensorFlow Playground

Réseaux neuronaux (NN)

Nous concentrons maintenant notre attention sur une famille de modèles d’apprentissage automatique inspirés de la structure et du fonctionnement des réseaux neuronaux biologiques présents chez les animaux.

Apprentissage automatique

  • Supervisé: classification, régression

  • Non supervisé: autoencodeurs, auto-apprentissage (self-supervised)

  • Par renforcement: NN désormais un composant intégral

Un neurone

Neurones interconnectés

Neural Mind

Lakoff et Narayanan (2025)

Neurons are just cells. Alone, they are incapable of thought. But combined into circuits hooked up to our bodies in just the right ways, they have allowed human beings to survive, think, communicate, and create all of culture.

Connexionniste

Hiérarchie des concepts

Notions de base

Calculs avec neurodes

où \(x_1, x_2 \in \{0,1\}\) et \(f(z)\) est une fonction indicatrice : \[ f(z)= \begin{cases}0, & z<\theta \\ 1, & z \geq \theta\end{cases} \]

Calculs avec neurodes

\[ y = f(x_1 + x_2)= \begin{cases}0, & x_1 + x_2 <\theta \\ 1, & x_1 + x_2 \geq \theta\end{cases} \]

  • Avec \(\theta = 2\), le neurode implémente une porte logique ET.

  • Avec \(\theta = 1\), le neurode implémente une porte logique OU.

Calculs avec neurodes

  • Les calculs numériques peuvent être décomposés en une suite d’opérations logiques, permettant aux réseaux de neurodes d’exécuter tout calcul.

  • McCulloch et Pitts (1943) ne se sont pas concentrés sur l’apprentissage du paramètre \(\theta\).

  • Ils ont introduit une machine qui calcule toute fonction, mais ne peut pas apprendre.

Perceptron

Perceptron

Unité logique à seuil

Fonctions de seuil simples

\(\text{Heaviside}(t)\) =

  • 1, si \(t \geq 0\)

  • 0, si \(t < 0\)

\(\text{sign}(t)\) =

  • 1, si \(t > 0\)

  • 0, si \(t = 0\)

  • -1, si \(t < 0\)

Notation

Notation

Perceptron

Perceptron

Notation

Notation

  • \(X\) est la matrice de données d’entrée où chaque ligne correspond à un exemple et chaque colonne représente l’un des \(D\) attributs.

  • \(W\) est la matrice de poids, structurée avec une ligne par entrée (attribut) et une colonne par neurone.

  • Les termes de biais peuvent être représentés séparément ; les deux approches apparaissent dans la littérature. Ici, \(b\) est un vecteur de longueur égale au nombre de neurones.

Discussion

  • L’algorithme pour entraîner le perceptron ressemble étroitement à la descente de gradient stochastique.

    • Dans l’intérêt du temps et pour éviter la confusion, nous passerons cet algorithme et nous nous concentrerons sur le perceptron multicouche (MLP) et son algorithme d’entraînement, le backpropagation.

Note historique et justification

Perceptron multicouche (MLP)

Problème de classification XOR

\(x^{(1)}\) \(x^{(2)}\) \(y\) \(o_1\) \(o_2\) \(o_3\)
1 0 1 0 1 1
0 1 1 0 1 1
0 0 0 0 0 0
1 1 0 1 1 0

Propagation avant (FNN)

Propagation avant (Calcul)

\(o_3 = \sigma(w_{13} x^{(1)}+ w_{23} x^{(2)} + b_3)\)

\(o_4 = \sigma(w_{14} x^{(1)}+ w_{24} x^{(2)} + b_4)\)

\(o_5 = \sigma(w_{15} x^{(1)}+ w_{25} x^{(2)} + b_5)\)

\(o_6 = \sigma(w_{36} o_3 + w_{46} o_4 + w_{56} o_5 + b_6)\)

\(o_7 = \sigma(w_{37} o_3 + w_{47} o_4 + w_{57} o_5 + b_7)\)

Propagation avant (Calcul)

import numpy as np

# Fonction sigmoïde

def sigma(x):
    return 1 / (1 + np.exp(-x))

# Vecteur d'entrée (deux attributs), un exemple de notre ensemble d'entraînement

x1, x2 = (0.5, 0.9)

# Initialisation des poids des couches 2 et 3 à des valeurs aléatoires

w13, w14, w15, w23, w24, w25 = np.random.uniform(low=-1, high=1, size=6)
w36, w46, w56, w37, w47, w57 = np.random.uniform(low=-1, high=1, size=6)

# Initialisation des 5 termes de biais à des valeurs aléatoires

b3, b4, b5, b6, b7 = np.random.uniform(low=-1, high=1, size=5)

o3 = sigma(w13 * x1 + w23 * x2 + b3)
o4 = sigma(w14 * x1 + w24 * x2 + b4)
o5 = sigma(w15 * x1 + w25 * x2 + b5)
o6 = sigma(w36 * o3 + w46 * o4 + w56 * o5 + b6)
o7 = sigma(w37 * o3 + w47 * o4 + w57 * o5 + b7)

(o6, o7)
(np.float64(0.31873619146692084), np.float64(0.5826352729936869))

Propagation avant (Calcul)

Propagation avant (Calcul)

Fonction d’activation

  • Comme discuté plus tard, l’algorithme d’entraînement, appelé rétropropagation (backpropagation), utilise la descente de gradient, nécessitant le calcul des dérivées partielles de la fonction de perte.

  • La fonction de seuil dans le perceptron multicouche a dû être remplacée, car elle consiste uniquement en des surfaces plates. La descente de gradient ne peut pas progresser sur des surfaces planes en raison de leur dérivée nulle.

Fonction d’activation

  • Les fonctions d’activation non linéaires sont primordiales car, sans elles, plusieurs couches du réseau ne calculeraient qu’une fonction linéaire des entrées.

  • Selon le théorème d’approximation universelle, des réseaux profonds suffisamment grands avec des fonctions d’activation non linéaires peuvent approximer n’importe quelle fonction continue. Voir Théorème d’Approximation Universelle.

Sigmoïde

Code
import numpy as np
import matplotlib.pyplot as plt

# Fonction sigmoïde
def sigmoid(x):
    return 1 / (1 + np.exp(-x))

# Générer des valeurs x
x = np.linspace(-10, 10, 400)

# Calculer les valeurs y pour la fonction sigmoïde
y = sigmoid(x)

# Créer une figure et supprimer les axes et la grille
fig, ax = plt.subplots()
ax.plot(x, y, color='black', linewidth=2)  # Conserver la courbe opaque

plt.grid(True)

# Définir un fond transparent pour la figure et les axes
fig.patch.set_alpha(0)  # Fond transparent pour la figure

# Enregistrer ou afficher le graphique avec un fond transparent
# plt.savefig('sigmoid_plot.png', transparent=True, bbox_inches='tight', pad_inches=0)
plt.show()

\[ \sigma(t) = \frac{1}{1 + e^{-t}} \]

Fonction tangente hyperbolique

Code
# Générer des valeurs x
x = np.linspace(-10, 10, 400)

# Calculer les valeurs y pour la fonction tangente hyperbolique
y = np.tanh(x)

# Créer une figure et supprimer les axes et la grille
fig, ax = plt.subplots()
ax.plot(x, y, color='black', linewidth=2)  # Conserver la courbe opaque

plt.grid(True)

# Définir un fond transparent pour la figure et les axes
fig.patch.set_alpha(0)  # Fond transparent pour la figure

# Enregistrer ou afficher le graphique avec un fond transparent
# plt.savefig('tanh_plot.png', transparent=True, bbox_inches='tight', pad_inches=0)
plt.show()

\[ \tanh(t) = 2 \sigma(2t) - 1 \]

Fonction unitaire rectifiée (ReLU)

Code
# Générer des valeurs x
x = np.linspace(-10, 10, 400)

# Calculer les valeurs y pour la fonction ReLU
y = np.maximum(0, x)

# Créer une figure et supprimer les axes et la grille
fig, ax = plt.subplots()
ax.plot(x, y, color='black', linewidth=2)  # Conserver la courbe opaque

plt.grid(True)

# Définir un fond transparent pour la figure et les axes
fig.patch.set_alpha(0)  # Fond transparent pour la figure

# Enregistrer ou afficher le graphique avec un fond transparent
# plt.savefig('relu_plot.png', transparent=True, bbox_inches='tight', pad_inches=0)
plt.show()

\[ \mathrm{ReLU}(t) = \max(0, t) \]

Fonctions d’activation courantes

Code
import numpy as np
import matplotlib.pyplot as plt

from scipy.special import expit as sigmoid

def relu(z):
    return np.maximum(0, z)

def derivative(f, z, eps=0.000001):
    return (f(z + eps) - f(z - eps))/(2 * eps)

max_z = 4.5
z = np.linspace(-max_z, max_z, 200)

plt.figure(figsize=(11, 3.1))

plt.subplot(121)
plt.plot([-max_z, 0], [0, 0], "r-", linewidth=2, label="Heaviside")
plt.plot(z, relu(z), "m-.", linewidth=2, label="ReLU")
plt.plot([0, 0], [0, 1], "r-", linewidth=0.5)
plt.plot([0, max_z], [1, 1], "r-", linewidth=2)
plt.plot(z, sigmoid(z), "g--", linewidth=2, label="Sigmoïde")
plt.plot(z, np.tanh(z), "b-", linewidth=1, label="Tanh")
plt.grid(True)
plt.title("Fonctions d'activation")
plt.axis([-max_z, max_z, -1.65, 2.4])
plt.gca().set_yticks([-1, 0, 1, 2])
plt.legend(loc="lower right", fontsize=13)

plt.subplot(122)
plt.plot(z, derivative(np.sign, z), "r-", linewidth=2, label="Heaviside")
plt.plot(0, 0, "ro", markersize=5)
plt.plot(0, 0, "rx", markersize=10)
plt.plot(z, derivative(sigmoid, z), "g--", linewidth=2, label="Sigmoïde")
plt.plot(z, derivative(np.tanh, z), "b-", linewidth=1, label="Tanh")
plt.plot([-max_z, 0], [0, 0], "m-.", linewidth=2)
plt.plot([0, max_z], [1, 1], "m-.", linewidth=2)
plt.plot([0, 0], [0, 1], "m-.", linewidth=1.2)
plt.plot(0, 1, "mo", markersize=5)
plt.plot(0, 1, "mx", markersize=10)
plt.grid(True)
plt.title("Dérivées")
plt.axis([-max_z, max_z, -0.2, 1.2])

plt.show()

Approximation Universelle

Définition

Le théorème d’approximation universelle affirme qu’un réseau de neurones feed-forward avec une seule couche cachée contenant un nombre fini de neurones peut approcher n’importe quelle fonction continue sur un sous-ensemble compact de \(\mathbb{R}^n\), avec des poids et des fonctions d’activation appropriés.

Couche cachée unique

\[ y = \sum_{i=1}^N \alpha_i \sigma(w_{1,i} x + b_i) \]

Effet de la variation de w

Code
def logistic(x, w, b):
    """Calcule la fonction logistique avec les paramètres w et b."""
    return 1 / (1 + np.exp(-(w * x + b)))

# Définir une plage pour les valeurs de x.
x = np.linspace(-10, 10, 400)

# Graphique 1 : Variation de w (pente) avec b fixé à 0.
plt.figure(figsize=(6,4))
w_values = [0.5, 1, 2, 5]  # différentes valeurs de pente
b = 0  # biais fixe

for w in w_values:
    plt.plot(x, logistic(x, w, b), label=f'w = {w}, b = {b}')
plt.title('Effet de la Variation de w (avec b = 0)')
plt.xlabel('x')
plt.ylabel(r'$\sigma(wx+b)$')
plt.legend()
plt.grid(True)

plt.show()

Effet de la variation de b

Code
# Graphique 2 : Variation de b (décalage horizontal) avec w fixé à 1.
plt.figure(figsize=(6,4))
w = 1  # pente fixe
b_values = [-5, -2, 0, 2, 5]  # différentes valeurs de biais

for b in b_values:
    plt.plot(x, logistic(x, w, b), label=f'w = {w}, b = {b}')
plt.title('Effet de la Variation de b (avec w = 1)')
plt.xlabel('x')
plt.ylabel(r'$\sigma(wx+b)$')
plt.legend()
plt.grid(True)

plt.show()

Effet de la variation de w

Code
def relu(x, w, b):
    """Calcule l'activation ReLU avec les paramètres w et b."""
    return np.maximum(0, w * x + b)

# Définir une plage pour les valeurs de x.
x = np.linspace(-10, 10, 400)

# Graphique 1 : Variation de w (mise à l'échelle) avec b fixé à 0.
plt.figure(figsize=(6,4))
w_values = [0.5, 1, 2, 5]  # différentes valeurs de mise à l'échelle
b = 0  # biais fixe

for w in w_values:
    plt.plot(x, relu(x, w, b), label=f'w = {w}, b = {b}')
plt.title('Effet de la Variation de w (avec b = 0) sur l\'activation ReLU')
plt.xlabel('x')
plt.ylabel('ReLU(wx+b)')
plt.legend()
plt.grid(True)

plt.show()

Effet de la variation de b

Code
# Graphique 2 : Variation de b (décalage horizontal) avec w fixé à 1.
plt.figure(figsize=(6,4))
w = 1  # mise à l'échelle fixe
b_values = [-5, -2, 0, 2, 5]  # différentes valeurs de biais

for b in b_values:
    plt.plot(x, relu(x, w, b), label=f'w = {w}, b = {b}')
plt.title('Effet de la Variation de b (avec w = 1) sur l\'activation ReLU')
plt.xlabel('x')
plt.ylabel('ReLU(wx+b)')
plt.legend()
plt.grid(True)

plt.show()

Couche cachée unique

\[ y = \sum_{i=1}^N \alpha_i \sigma(w_{1,i} x + b_i) \]

Démonstration par le code

import numpy as np

# Définition de la fonction à approximer

def f(x):
    return 2 * x**3 + 4 * x**2 - 5 * x + 1

# Génération d'un jeu de données, x dans [-4,2), f(x) comme ci-dessus

X = 6 * np.random.rand(1000, 1) - 4

y = f(X.flatten())

Augmenter le nombre de neurones

from sklearn.neural_network import MLPRegressor
from sklearn.model_selection import train_test_split

X_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size=0.1, random_state=42)

models = []

sizes = [1, 2, 5, 10, 100]

for i, n in enumerate(sizes):

    models.append(MLPRegressor(hidden_layer_sizes=[n], max_iter=5000, random_state=42))

    models[i].fit(X_train, y_train)

Augmenter le nombre de neurones

Code
import matplotlib.pyplot as plt

# Création d'une carte de couleurs
colors = plt.colormaps['cool'].resampled(len(sizes))

X_valid = np.sort(X_valid, axis=0)

for i, n in enumerate(sizes):
    y_pred = models[i].predict(X_valid)
    plt.plot(X_valid, y_pred, "-", color=colors(i), label="Nombre de neurones = {}".format(n))

y_true = f(X_valid)
plt.plot(X_valid, y_true, "r.", label='Réel')

plt.legend()
plt.show()

Augmenter le nombre de neurones

Code
for i, n in enumerate(sizes):
    plt.plot(models[i].loss_curve_, "-", color=colors(i), label="Nombre de neurones = {}".format(n))

plt.title('Courbes de Perte MLPRegressor')
plt.xlabel('Itérations')
plt.ylabel('Perte')

plt.legend()
plt.show()

Approximation Universelle

Codons

Bibliothèques

PyTorch et TensorFlow sont les plateformes dominantes pour l’apprentissage profond.

  • PyTorch a gagné beaucoup de traction dans la communauté de recherche. Initialement développé par Meta AI, il fait maintenant partie de la Linux Foundation.

  • TensorFlow, créé par Google, est largement adopté dans l’industrie pour déployer des modèles en production.

Keras

Keras est une API de haut niveau conçue pour construire, entraîner, évaluer et exécuter des modèles sur diverses plateformes, y compris PyTorch, TensorFlow et JAX, la plateforme haute performance de Google.

Dataset Fashion-MNIST

“Fashion-MNIST est un ensemble de données d’images d’articles de Zalando — comprenant un ensemble d’entraînement de 60 000 exemples et un ensemble de test de 10 000 exemples. Chaque exemple est une image en niveaux de gris de 28x28, associée à une étiquette provenant de 10 classes.”

Chargement

import tensorflow as tf

fashion_mnist = tf.keras.datasets.fashion_mnist.load_data()

(X_train_full, y_train_full), (X_test, y_test) = fashion_mnist

X_train, y_train = X_train_full[:-5000], y_train_full[:-5000]
X_valid, y_valid = X_train_full[-5000:], y_train_full[-5000:]

Exploration

X_train.shape
(55000, 28, 28)

Transformer les intensités des pixels d’entiers dans la plage de 0 à 255 en flottants dans la plage de 0 à 1.

X_train, X_valid, X_test = X_train / 255., X_valid / 255., X_test / 255.

À quoi ressemblent ces images ?

plt.figure(figsize=(2, 2))
plt.imshow(X_train[0], cmap="binary")
plt.axis('off')
plt.show()

y_train
array([9, 0, 0, ..., 9, 0, 2], shape=(55000,), dtype=uint8)

Puisque les étiquettes sont des entiers de 0 à 9, les noms des classes seront utiles.

class_names = ["T-shirt/top", "Pantalon", "Pull", "Robe", "Manteau",
               "Sandale", "Chemise", "Basket", "Sac", "Botte"]

Les 40 premières images

n_rows = 4
n_cols = 10
plt.figure(figsize=(n_cols * 1.2, n_rows * 1.2))
for row in range(n_rows):
    for col in range(n_cols):
        index = n_cols * row + col
        plt.subplot(n_rows, n_cols, index + 1)
        plt.imshow(X_train[index], cmap="binary", interpolation="nearest")
        plt.axis('off')
        plt.title(class_names[y_train[index]])
plt.subplots_adjust(wspace=0.2, hspace=0.5)
plt.show()

Les 40 premières images

Création d’un modèle

tf.random.set_seed(42)

model = tf.keras.Sequential()

model.add(tf.keras.layers.InputLayer(shape=[28, 28]))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(300, activation="relu"))
model.add(tf.keras.layers.Dense(100, activation="relu"))
model.add(tf.keras.layers.Dense(10, activation="softmax"))

model.summary()

model.summary()
Model: "sequential"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type)                    ┃ Output Shape           ┃       Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ flatten (Flatten)               │ (None, 784)            │             0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense (Dense)                   │ (None, 300)            │       235,500 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_1 (Dense)                 │ (None, 100)            │        30,100 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_2 (Dense)                 │ (None, 10)             │         1,010 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
 Total params: 266,610 (1.02 MB)
 Trainable params: 266,610 (1.02 MB)
 Non-trainable params: 0 (0.00 B)

Création d’un modèle (alternative)

Code
# extra code – clear the session to reset the name counters
tf.keras.backend.clear_session()
tf.random.set_seed(42)
model = tf.keras.Sequential([
    tf.keras.Input(shape=(28, 28)),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(300, activation="relu"),
    tf.keras.layers.Dense(100, activation="relu"),
    tf.keras.layers.Dense(10, activation="softmax")
])

model.summary()

model.summary()
Model: "sequential"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type)                    ┃ Output Shape           ┃       Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ flatten (Flatten)               │ (None, 784)            │             0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense (Dense)                   │ (None, 300)            │       235,500 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_1 (Dense)                 │ (None, 100)            │        30,100 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_2 (Dense)                 │ (None, 10)             │         1,010 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
 Total params: 266,610 (1.02 MB)
 Trainable params: 266,610 (1.02 MB)
 Non-trainable params: 0 (0.00 B)

Compilation du modèle

model.compile(loss="sparse_categorical_crossentropy",
              optimizer="sgd",
              metrics=["accuracy"])

Entraînement du modèle

history = model.fit(X_train, y_train, epochs=30,
                    validation_data=(X_valid, y_valid))
Epoch 1/30


   1/1719 ━━━━━━━━━━━━━━━━━━━━ 4:28 156ms/step - accuracy: 0.0938 - loss: 2.5458

  73/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 695us/step - accuracy: 0.4585 - loss: 1.8515  

 151/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 668us/step - accuracy: 0.5517 - loss: 1.5283

 230/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.5995 - loss: 1.3379

 307/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.6299 - loss: 1.2148

 384/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.6486 - loss: 1.1341

 461/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.6665 - loss: 1.0678

 538/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 656us/step - accuracy: 0.6804 - loss: 1.0180

 615/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 656us/step - accuracy: 0.6922 - loss: 0.9765

 693/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 654us/step - accuracy: 0.7031 - loss: 0.9394

 772/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 652us/step - accuracy: 0.7120 - loss: 0.9087

 850/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 651us/step - accuracy: 0.7201 - loss: 0.8813

 926/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 652us/step - accuracy: 0.7265 - loss: 0.8567

 999/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 655us/step - accuracy: 0.7325 - loss: 0.8361

1076/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 655us/step - accuracy: 0.7375 - loss: 0.8183

1154/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 654us/step - accuracy: 0.7420 - loss: 0.8017

1232/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 654us/step - accuracy: 0.7456 - loss: 0.7878

1312/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 652us/step - accuracy: 0.7501 - loss: 0.7730

1390/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 652us/step - accuracy: 0.7541 - loss: 0.7596

1466/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 653us/step - accuracy: 0.7575 - loss: 0.7481

1543/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 652us/step - accuracy: 0.7609 - loss: 0.7363

1618/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 653us/step - accuracy: 0.7632 - loss: 0.7269

1696/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 653us/step - accuracy: 0.7653 - loss: 0.7179

1719/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 743us/step - accuracy: 0.7659 - loss: 0.7155 - val_accuracy: 0.8266 - val_loss: 0.5063

Epoch 2/30


   1/1719 ━━━━━━━━━━━━━━━━━━━━ 12s 7ms/step - accuracy: 0.8125 - loss: 0.5311

  77/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 662us/step - accuracy: 0.8190 - loss: 0.5145

 151/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 671us/step - accuracy: 0.8106 - loss: 0.5368

 228/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 665us/step - accuracy: 0.8203 - loss: 0.5212

 305/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 662us/step - accuracy: 0.8193 - loss: 0.5207

 385/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 654us/step - accuracy: 0.8196 - loss: 0.5207

 463/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 653us/step - accuracy: 0.8210 - loss: 0.5169

 542/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 650us/step - accuracy: 0.8224 - loss: 0.5162

 619/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 651us/step - accuracy: 0.8249 - loss: 0.5125

 694/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 653us/step - accuracy: 0.8256 - loss: 0.5101

 772/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 653us/step - accuracy: 0.8267 - loss: 0.5079

 848/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 653us/step - accuracy: 0.8274 - loss: 0.5061

 923/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 655us/step - accuracy: 0.8284 - loss: 0.5014

 998/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 656us/step - accuracy: 0.8293 - loss: 0.4987

1073/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.8296 - loss: 0.4971

1148/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.8299 - loss: 0.4953

1224/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.8296 - loss: 0.4957

1301/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.8306 - loss: 0.4933

1374/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.8316 - loss: 0.4906

1449/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.8320 - loss: 0.4898

1524/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 661us/step - accuracy: 0.8326 - loss: 0.4878

1601/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.8328 - loss: 0.4864

1677/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.8325 - loss: 0.4856

1719/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 705us/step - accuracy: 0.8326 - loss: 0.4847 - val_accuracy: 0.8382 - val_loss: 0.4574

Epoch 3/30


   1/1719 ━━━━━━━━━━━━━━━━━━━━ 11s 7ms/step - accuracy: 0.7812 - loss: 0.4854

  75/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 677us/step - accuracy: 0.8425 - loss: 0.4488

 152/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 663us/step - accuracy: 0.8341 - loss: 0.4748

 229/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.8412 - loss: 0.4609

 304/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 662us/step - accuracy: 0.8398 - loss: 0.4618

 379/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 664us/step - accuracy: 0.8395 - loss: 0.4630

 455/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 664us/step - accuracy: 0.8405 - loss: 0.4599

 530/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 665us/step - accuracy: 0.8416 - loss: 0.4595

 603/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 668us/step - accuracy: 0.8439 - loss: 0.4561

 678/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 668us/step - accuracy: 0.8452 - loss: 0.4549

 754/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 667us/step - accuracy: 0.8456 - loss: 0.4537

 831/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 666us/step - accuracy: 0.8464 - loss: 0.4530

 909/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 664us/step - accuracy: 0.8466 - loss: 0.4506

 987/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 663us/step - accuracy: 0.8472 - loss: 0.4480

1062/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 664us/step - accuracy: 0.8473 - loss: 0.4469

1139/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 663us/step - accuracy: 0.8478 - loss: 0.4455

1217/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 662us/step - accuracy: 0.8473 - loss: 0.4463

1295/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 661us/step - accuracy: 0.8476 - loss: 0.4448

1371/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.8485 - loss: 0.4427

1449/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.8489 - loss: 0.4423

1528/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.8490 - loss: 0.4407

1606/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.8488 - loss: 0.4401

1683/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.8484 - loss: 0.4398

1719/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 702us/step - accuracy: 0.8484 - loss: 0.4392 - val_accuracy: 0.8456 - val_loss: 0.4362

Epoch 4/30


   1/1719 ━━━━━━━━━━━━━━━━━━━━ 12s 7ms/step - accuracy: 0.8125 - loss: 0.4588

  74/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 685us/step - accuracy: 0.8539 - loss: 0.4100

 152/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 666us/step - accuracy: 0.8454 - loss: 0.4422

 231/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.8504 - loss: 0.4299

 308/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 656us/step - accuracy: 0.8511 - loss: 0.4275

 383/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.8510 - loss: 0.4306

 460/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.8517 - loss: 0.4283

 538/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 656us/step - accuracy: 0.8526 - loss: 0.4269

 617/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 653us/step - accuracy: 0.8547 - loss: 0.4243

 694/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 653us/step - accuracy: 0.8550 - loss: 0.4235

 771/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 653us/step - accuracy: 0.8549 - loss: 0.4228

 850/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 652us/step - accuracy: 0.8556 - loss: 0.4230

 928/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 651us/step - accuracy: 0.8561 - loss: 0.4192

1007/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 650us/step - accuracy: 0.8567 - loss: 0.4177

1083/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 651us/step - accuracy: 0.8572 - loss: 0.4163

1160/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 651us/step - accuracy: 0.8571 - loss: 0.4157

1237/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 651us/step - accuracy: 0.8565 - loss: 0.4168

1313/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 652us/step - accuracy: 0.8571 - loss: 0.4148

1392/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 652us/step - accuracy: 0.8575 - loss: 0.4136

1467/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 652us/step - accuracy: 0.8578 - loss: 0.4131

1542/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 653us/step - accuracy: 0.8580 - loss: 0.4117

1615/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 655us/step - accuracy: 0.8580 - loss: 0.4116

1690/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 656us/step - accuracy: 0.8577 - loss: 0.4114

1719/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 698us/step - accuracy: 0.8576 - loss: 0.4112 - val_accuracy: 0.8506 - val_loss: 0.4214

Epoch 5/30


   1/1719 ━━━━━━━━━━━━━━━━━━━━ 12s 7ms/step - accuracy: 0.8125 - loss: 0.4333

  76/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 669us/step - accuracy: 0.8614 - loss: 0.3893

 152/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 665us/step - accuracy: 0.8530 - loss: 0.4185

 228/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 663us/step - accuracy: 0.8584 - loss: 0.4051

 306/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.8576 - loss: 0.4047

 381/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 661us/step - accuracy: 0.8576 - loss: 0.4086

 454/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 665us/step - accuracy: 0.8588 - loss: 0.4056

 530/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 665us/step - accuracy: 0.8591 - loss: 0.4049

 608/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 663us/step - accuracy: 0.8609 - loss: 0.4008

 685/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 662us/step - accuracy: 0.8620 - loss: 0.4004

 760/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 663us/step - accuracy: 0.8618 - loss: 0.3998

 838/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 662us/step - accuracy: 0.8620 - loss: 0.4012

 916/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.8630 - loss: 0.3978

 996/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.8631 - loss: 0.3962

1069/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.8633 - loss: 0.3953

1144/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 661us/step - accuracy: 0.8635 - loss: 0.3943

1221/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.8630 - loss: 0.3951

1298/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.8631 - loss: 0.3940

1376/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.8638 - loss: 0.3923

1452/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.8638 - loss: 0.3924

1526/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.8638 - loss: 0.3916

1602/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.8637 - loss: 0.3914

1681/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.8633 - loss: 0.3913

1719/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 703us/step - accuracy: 0.8632 - loss: 0.3909 - val_accuracy: 0.8522 - val_loss: 0.4087

Epoch 6/30


   1/1719 ━━━━━━━━━━━━━━━━━━━━ 12s 7ms/step - accuracy: 0.8125 - loss: 0.4016

  73/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 697us/step - accuracy: 0.8677 - loss: 0.3667

 149/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 681us/step - accuracy: 0.8591 - loss: 0.4005

 223/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 680us/step - accuracy: 0.8636 - loss: 0.3877

 299/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 674us/step - accuracy: 0.8634 - loss: 0.3888

 375/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 672us/step - accuracy: 0.8648 - loss: 0.3888

 451/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 669us/step - accuracy: 0.8654 - loss: 0.3886

 529/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 666us/step - accuracy: 0.8652 - loss: 0.3878

 606/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 664us/step - accuracy: 0.8670 - loss: 0.3837

 682/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 664us/step - accuracy: 0.8679 - loss: 0.3832

 760/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 662us/step - accuracy: 0.8676 - loss: 0.3827

 838/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 661us/step - accuracy: 0.8676 - loss: 0.3844

 914/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 662us/step - accuracy: 0.8685 - loss: 0.3813

 990/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 662us/step - accuracy: 0.8682 - loss: 0.3796

1067/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 661us/step - accuracy: 0.8685 - loss: 0.3785

1144/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 661us/step - accuracy: 0.8687 - loss: 0.3775

1224/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.8684 - loss: 0.3786

1303/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.8685 - loss: 0.3773

1381/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 656us/step - accuracy: 0.8691 - loss: 0.3761

1458/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 656us/step - accuracy: 0.8693 - loss: 0.3758

1533/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.8692 - loss: 0.3750

1607/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.8691 - loss: 0.3751

1681/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.8686 - loss: 0.3752

1719/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 704us/step - accuracy: 0.8685 - loss: 0.3748 - val_accuracy: 0.8544 - val_loss: 0.3991

Epoch 7/30


   1/1719 ━━━━━━━━━━━━━━━━━━━━ 11s 7ms/step - accuracy: 0.8125 - loss: 0.3869

  75/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 681us/step - accuracy: 0.8692 - loss: 0.3565

 153/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 661us/step - accuracy: 0.8627 - loss: 0.3843

 231/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 656us/step - accuracy: 0.8678 - loss: 0.3738

 311/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 650us/step - accuracy: 0.8688 - loss: 0.3714

 391/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 645us/step - accuracy: 0.8676 - loss: 0.3762

 470/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 643us/step - accuracy: 0.8688 - loss: 0.3734

 545/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 647us/step - accuracy: 0.8692 - loss: 0.3725

 620/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 650us/step - accuracy: 0.8708 - loss: 0.3692

 697/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 651us/step - accuracy: 0.8714 - loss: 0.3683

 772/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 652us/step - accuracy: 0.8714 - loss: 0.3687

 851/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 651us/step - accuracy: 0.8713 - loss: 0.3701

 929/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 651us/step - accuracy: 0.8722 - loss: 0.3663

1006/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 651us/step - accuracy: 0.8725 - loss: 0.3652

1082/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 652us/step - accuracy: 0.8729 - loss: 0.3639

1161/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 651us/step - accuracy: 0.8731 - loss: 0.3634

1239/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 650us/step - accuracy: 0.8729 - loss: 0.3642

1314/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 651us/step - accuracy: 0.8732 - loss: 0.3628

1389/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 652us/step - accuracy: 0.8734 - loss: 0.3620

1465/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 653us/step - accuracy: 0.8736 - loss: 0.3620

1542/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 653us/step - accuracy: 0.8736 - loss: 0.3611

1620/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 652us/step - accuracy: 0.8734 - loss: 0.3612

1696/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 653us/step - accuracy: 0.8730 - loss: 0.3612

1719/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 697us/step - accuracy: 0.8730 - loss: 0.3612 - val_accuracy: 0.8584 - val_loss: 0.3898

Epoch 8/30


   1/1719 ━━━━━━━━━━━━━━━━━━━━ 12s 7ms/step - accuracy: 0.8125 - loss: 0.3582

  79/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 642us/step - accuracy: 0.8703 - loss: 0.3460

 157/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 645us/step - accuracy: 0.8646 - loss: 0.3723

 233/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 652us/step - accuracy: 0.8706 - loss: 0.3611

 308/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.8726 - loss: 0.3586

 384/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.8718 - loss: 0.3629

 458/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 663us/step - accuracy: 0.8730 - loss: 0.3605

 534/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 663us/step - accuracy: 0.8728 - loss: 0.3603

 607/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 667us/step - accuracy: 0.8746 - loss: 0.3562

 682/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 667us/step - accuracy: 0.8752 - loss: 0.3558

 753/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 671us/step - accuracy: 0.8753 - loss: 0.3557

 825/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 673us/step - accuracy: 0.8755 - loss: 0.3564

 898/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 675us/step - accuracy: 0.8757 - loss: 0.3558

 966/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 679us/step - accuracy: 0.8761 - loss: 0.3539

1037/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 681us/step - accuracy: 0.8764 - loss: 0.3524

1109/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 682us/step - accuracy: 0.8770 - loss: 0.3518

1183/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 682us/step - accuracy: 0.8770 - loss: 0.3510

1256/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 683us/step - accuracy: 0.8767 - loss: 0.3525

1327/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 684us/step - accuracy: 0.8772 - loss: 0.3508

1400/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 684us/step - accuracy: 0.8773 - loss: 0.3496

1474/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 684us/step - accuracy: 0.8771 - loss: 0.3499

1547/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 685us/step - accuracy: 0.8771 - loss: 0.3494

1619/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 686us/step - accuracy: 0.8771 - loss: 0.3493

1691/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 686us/step - accuracy: 0.8767 - loss: 0.3496

1719/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 731us/step - accuracy: 0.8766 - loss: 0.3493 - val_accuracy: 0.8606 - val_loss: 0.3825

Epoch 9/30


   1/1719 ━━━━━━━━━━━━━━━━━━━━ 12s 7ms/step - accuracy: 0.8438 - loss: 0.3329

  74/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 693us/step - accuracy: 0.8780 - loss: 0.3273

 145/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 702us/step - accuracy: 0.8703 - loss: 0.3582

 217/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 702us/step - accuracy: 0.8740 - loss: 0.3496

 292/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 695us/step - accuracy: 0.8749 - loss: 0.3499

 365/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 693us/step - accuracy: 0.8771 - loss: 0.3487

 436/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 696us/step - accuracy: 0.8762 - loss: 0.3497

 507/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 698us/step - accuracy: 0.8759 - loss: 0.3490

 578/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 699us/step - accuracy: 0.8781 - loss: 0.3461

 651/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 699us/step - accuracy: 0.8791 - loss: 0.3440

 724/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 698us/step - accuracy: 0.8792 - loss: 0.3447

 797/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 698us/step - accuracy: 0.8797 - loss: 0.3442

 874/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 694us/step - accuracy: 0.8790 - loss: 0.3458

 954/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 688us/step - accuracy: 0.8796 - loss: 0.3433

1029/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 687us/step - accuracy: 0.8802 - loss: 0.3416

1105/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 685us/step - accuracy: 0.8808 - loss: 0.3408

1183/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 683us/step - accuracy: 0.8807 - loss: 0.3399

1257/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 683us/step - accuracy: 0.8804 - loss: 0.3413

1329/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 684us/step - accuracy: 0.8808 - loss: 0.3397

1404/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 683us/step - accuracy: 0.8808 - loss: 0.3390

1480/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 682us/step - accuracy: 0.8805 - loss: 0.3392

1559/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 680us/step - accuracy: 0.8806 - loss: 0.3387

1634/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 679us/step - accuracy: 0.8804 - loss: 0.3386

1712/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 678us/step - accuracy: 0.8800 - loss: 0.3387

1719/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 721us/step - accuracy: 0.8801 - loss: 0.3387 - val_accuracy: 0.8626 - val_loss: 0.3767

Epoch 10/30


   1/1719 ━━━━━━━━━━━━━━━━━━━━ 12s 7ms/step - accuracy: 0.8750 - loss: 0.3119

  76/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 672us/step - accuracy: 0.8808 - loss: 0.3198

 154/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 658us/step - accuracy: 0.8730 - loss: 0.3477

 231/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.8776 - loss: 0.3387

 307/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.8789 - loss: 0.3369

 385/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.8783 - loss: 0.3413

 464/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 654us/step - accuracy: 0.8800 - loss: 0.3386

 540/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 655us/step - accuracy: 0.8802 - loss: 0.3385

 615/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.8817 - loss: 0.3352

 690/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.8819 - loss: 0.3347

 763/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 661us/step - accuracy: 0.8822 - loss: 0.3345

 834/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 665us/step - accuracy: 0.8820 - loss: 0.3362

 908/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 667us/step - accuracy: 0.8828 - loss: 0.3342

 984/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 666us/step - accuracy: 0.8829 - loss: 0.3324

1060/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 666us/step - accuracy: 0.8833 - loss: 0.3311

1135/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 666us/step - accuracy: 0.8838 - loss: 0.3300

1210/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 667us/step - accuracy: 0.8835 - loss: 0.3309

1287/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 666us/step - accuracy: 0.8835 - loss: 0.3305

1364/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 665us/step - accuracy: 0.8839 - loss: 0.3293

1438/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 666us/step - accuracy: 0.8840 - loss: 0.3293

1512/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 667us/step - accuracy: 0.8836 - loss: 0.3289

1585/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 668us/step - accuracy: 0.8835 - loss: 0.3291

1660/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 668us/step - accuracy: 0.8828 - loss: 0.3298

1719/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 715us/step - accuracy: 0.8829 - loss: 0.3292 - val_accuracy: 0.8640 - val_loss: 0.3707

Epoch 11/30


   1/1719 ━━━━━━━━━━━━━━━━━━━━ 12s 7ms/step - accuracy: 0.8750 - loss: 0.2895

  72/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 713us/step - accuracy: 0.8859 - loss: 0.3047

 145/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 702us/step - accuracy: 0.8778 - loss: 0.3374

 222/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 685us/step - accuracy: 0.8791 - loss: 0.3294

 301/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 674us/step - accuracy: 0.8802 - loss: 0.3289

 378/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 669us/step - accuracy: 0.8807 - loss: 0.3316

 453/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 670us/step - accuracy: 0.8822 - loss: 0.3299

 530/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 667us/step - accuracy: 0.8821 - loss: 0.3294

 605/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 667us/step - accuracy: 0.8838 - loss: 0.3255

 683/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 665us/step - accuracy: 0.8846 - loss: 0.3253

 759/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 664us/step - accuracy: 0.8845 - loss: 0.3253

 835/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 664us/step - accuracy: 0.8844 - loss: 0.3275

 910/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 665us/step - accuracy: 0.8854 - loss: 0.3254

 988/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 663us/step - accuracy: 0.8855 - loss: 0.3235

1067/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 661us/step - accuracy: 0.8859 - loss: 0.3220

1148/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.8864 - loss: 0.3215

1227/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.8860 - loss: 0.3225

1303/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.8864 - loss: 0.3214

1378/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.8865 - loss: 0.3202

1453/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.8865 - loss: 0.3209

1531/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.8864 - loss: 0.3204

1609/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.8863 - loss: 0.3204

1685/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.8859 - loss: 0.3209

1719/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 702us/step - accuracy: 0.8859 - loss: 0.3205 - val_accuracy: 0.8656 - val_loss: 0.3658

Epoch 12/30


   1/1719 ━━━━━━━━━━━━━━━━━━━━ 11s 7ms/step - accuracy: 0.9375 - loss: 0.2741

  75/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 676us/step - accuracy: 0.8892 - loss: 0.3026

 154/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 654us/step - accuracy: 0.8791 - loss: 0.3289

 231/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 653us/step - accuracy: 0.8830 - loss: 0.3206

 305/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.8831 - loss: 0.3197

 380/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.8831 - loss: 0.3236

 454/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 664us/step - accuracy: 0.8844 - loss: 0.3209

 531/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 663us/step - accuracy: 0.8845 - loss: 0.3208

 609/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.8863 - loss: 0.3169

 684/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 661us/step - accuracy: 0.8869 - loss: 0.3166

 762/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.8866 - loss: 0.3170

 839/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.8862 - loss: 0.3193

 917/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.8875 - loss: 0.3164

 991/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.8874 - loss: 0.3153

1066/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 661us/step - accuracy: 0.8880 - loss: 0.3138

1141/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 662us/step - accuracy: 0.8886 - loss: 0.3132

1217/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 662us/step - accuracy: 0.8885 - loss: 0.3140

1294/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 661us/step - accuracy: 0.8889 - loss: 0.3131

1370/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 661us/step - accuracy: 0.8892 - loss: 0.3121

1449/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.8890 - loss: 0.3128

1524/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.8889 - loss: 0.3123

1600/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 661us/step - accuracy: 0.8888 - loss: 0.3123

1676/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.8882 - loss: 0.3129

1719/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 706us/step - accuracy: 0.8884 - loss: 0.3124 - val_accuracy: 0.8676 - val_loss: 0.3598

Epoch 13/30


   1/1719 ━━━━━━━━━━━━━━━━━━━━ 12s 8ms/step - accuracy: 0.9375 - loss: 0.2523

  74/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 687us/step - accuracy: 0.8927 - loss: 0.2915

 150/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 675us/step - accuracy: 0.8835 - loss: 0.3190

 226/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 670us/step - accuracy: 0.8855 - loss: 0.3132

 302/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 668us/step - accuracy: 0.8860 - loss: 0.3117

 377/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 668us/step - accuracy: 0.8871 - loss: 0.3141

 452/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 669us/step - accuracy: 0.8875 - loss: 0.3135

 530/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 665us/step - accuracy: 0.8873 - loss: 0.3129

 609/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 662us/step - accuracy: 0.8888 - loss: 0.3091

 687/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.8892 - loss: 0.3092

 764/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.8893 - loss: 0.3093

 839/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.8889 - loss: 0.3116

 915/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.8901 - loss: 0.3088

 993/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.8898 - loss: 0.3075

1069/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.8901 - loss: 0.3062

1146/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.8904 - loss: 0.3059

1222/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.8905 - loss: 0.3063

1299/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.8908 - loss: 0.3055

1378/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.8912 - loss: 0.3045

1456/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.8910 - loss: 0.3050

1532/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.8908 - loss: 0.3047

1605/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.8907 - loss: 0.3049

1681/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.8902 - loss: 0.3054

1719/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 704us/step - accuracy: 0.8903 - loss: 0.3050 - val_accuracy: 0.8676 - val_loss: 0.3566

Epoch 14/30


   1/1719 ━━━━━━━━━━━━━━━━━━━━ 12s 7ms/step - accuracy: 0.9375 - loss: 0.2457

  75/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 681us/step - accuracy: 0.8967 - loss: 0.2867

 150/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 674us/step - accuracy: 0.8863 - loss: 0.3114

 226/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 671us/step - accuracy: 0.8884 - loss: 0.3062

 301/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 672us/step - accuracy: 0.8885 - loss: 0.3047

 374/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 677us/step - accuracy: 0.8892 - loss: 0.3065

 443/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 684us/step - accuracy: 0.8893 - loss: 0.3067

 520/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 680us/step - accuracy: 0.8895 - loss: 0.3057

 598/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 675us/step - accuracy: 0.8912 - loss: 0.3019

 675/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 673us/step - accuracy: 0.8918 - loss: 0.3016

 753/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 670us/step - accuracy: 0.8916 - loss: 0.3020

 832/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 667us/step - accuracy: 0.8917 - loss: 0.3039

 911/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 664us/step - accuracy: 0.8924 - loss: 0.3020

 989/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 663us/step - accuracy: 0.8923 - loss: 0.3005

1069/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.8926 - loss: 0.2990

1148/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.8929 - loss: 0.2985

1225/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.8927 - loss: 0.2992

1300/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.8930 - loss: 0.2983

1367/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 663us/step - accuracy: 0.8935 - loss: 0.2973

1444/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 663us/step - accuracy: 0.8933 - loss: 0.2980

1522/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 662us/step - accuracy: 0.8931 - loss: 0.2978

1600/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 661us/step - accuracy: 0.8930 - loss: 0.2978

1677/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.8925 - loss: 0.2984

1719/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 702us/step - accuracy: 0.8925 - loss: 0.2980 - val_accuracy: 0.8694 - val_loss: 0.3521

Epoch 15/30


   1/1719 ━━━━━━━━━━━━━━━━━━━━ 12s 7ms/step - accuracy: 0.9688 - loss: 0.2356

  78/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 653us/step - accuracy: 0.9006 - loss: 0.2797

 156/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 648us/step - accuracy: 0.8872 - loss: 0.3067

 231/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 655us/step - accuracy: 0.8912 - loss: 0.2986

 307/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.8914 - loss: 0.2967

 382/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.8912 - loss: 0.3013

 456/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 663us/step - accuracy: 0.8927 - loss: 0.2982

 528/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 668us/step - accuracy: 0.8919 - loss: 0.2988

 599/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 673us/step - accuracy: 0.8934 - loss: 0.2950

 673/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 673us/step - accuracy: 0.8941 - loss: 0.2949

 749/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 672us/step - accuracy: 0.8942 - loss: 0.2953

 824/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 672us/step - accuracy: 0.8943 - loss: 0.2962

 896/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 674us/step - accuracy: 0.8943 - loss: 0.2961

 970/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 675us/step - accuracy: 0.8948 - loss: 0.2944

1043/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 676us/step - accuracy: 0.8949 - loss: 0.2930

1115/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 677us/step - accuracy: 0.8953 - loss: 0.2923

1186/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 678us/step - accuracy: 0.8953 - loss: 0.2918

1263/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 677us/step - accuracy: 0.8953 - loss: 0.2924

1340/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 676us/step - accuracy: 0.8958 - loss: 0.2911

1419/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 674us/step - accuracy: 0.8962 - loss: 0.2903

1495/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 673us/step - accuracy: 0.8955 - loss: 0.2914

1573/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 672us/step - accuracy: 0.8954 - loss: 0.2915

1651/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 670us/step - accuracy: 0.8951 - loss: 0.2915

1719/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 713us/step - accuracy: 0.8950 - loss: 0.2913 - val_accuracy: 0.8698 - val_loss: 0.3500

Epoch 16/30


   1/1719 ━━━━━━━━━━━━━━━━━━━━ 12s 7ms/step - accuracy: 0.9688 - loss: 0.2286

  76/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 673us/step - accuracy: 0.9050 - loss: 0.2720

 150/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 677us/step - accuracy: 0.8921 - loss: 0.2973

 225/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 675us/step - accuracy: 0.8933 - loss: 0.2928

 301/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 671us/step - accuracy: 0.8931 - loss: 0.2912

 380/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 664us/step - accuracy: 0.8933 - loss: 0.2947

 456/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 663us/step - accuracy: 0.8949 - loss: 0.2918

 531/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 665us/step - accuracy: 0.8950 - loss: 0.2921

 607/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 664us/step - accuracy: 0.8962 - loss: 0.2888

 681/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 666us/step - accuracy: 0.8971 - loss: 0.2883

 756/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 667us/step - accuracy: 0.8967 - loss: 0.2890

 828/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 670us/step - accuracy: 0.8969 - loss: 0.2898

 903/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 670us/step - accuracy: 0.8971 - loss: 0.2896

 976/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 671us/step - accuracy: 0.8976 - loss: 0.2878

1048/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 673us/step - accuracy: 0.8977 - loss: 0.2865

1120/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 675us/step - accuracy: 0.8979 - loss: 0.2859

1193/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 676us/step - accuracy: 0.8976 - loss: 0.2866

1267/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 676us/step - accuracy: 0.8980 - loss: 0.2859

1340/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 677us/step - accuracy: 0.8984 - loss: 0.2849

1416/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 676us/step - accuracy: 0.8988 - loss: 0.2840

1492/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 676us/step - accuracy: 0.8980 - loss: 0.2852

1570/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 674us/step - accuracy: 0.8979 - loss: 0.2851

1648/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 673us/step - accuracy: 0.8975 - loss: 0.2853

1719/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 717us/step - accuracy: 0.8975 - loss: 0.2851 - val_accuracy: 0.8714 - val_loss: 0.3482

Epoch 17/30


   1/1719 ━━━━━━━━━━━━━━━━━━━━ 12s 7ms/step - accuracy: 0.9688 - loss: 0.2225

  76/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 674us/step - accuracy: 0.9058 - loss: 0.2661

 150/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 677us/step - accuracy: 0.8948 - loss: 0.2910

 225/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 675us/step - accuracy: 0.8950 - loss: 0.2869

 300/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 675us/step - accuracy: 0.8950 - loss: 0.2852

 376/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 673us/step - accuracy: 0.8962 - loss: 0.2878

 453/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 670us/step - accuracy: 0.8971 - loss: 0.2864

 531/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 666us/step - accuracy: 0.8971 - loss: 0.2861

 608/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 664us/step - accuracy: 0.8985 - loss: 0.2827

 685/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 663us/step - accuracy: 0.8995 - loss: 0.2824

 764/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.8993 - loss: 0.2829

 840/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.8987 - loss: 0.2853

 917/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.9001 - loss: 0.2825

 995/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.8999 - loss: 0.2814

1075/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 656us/step - accuracy: 0.9005 - loss: 0.2798

1153/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 655us/step - accuracy: 0.9004 - loss: 0.2800

1229/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 656us/step - accuracy: 0.9003 - loss: 0.2801

1307/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 655us/step - accuracy: 0.9008 - loss: 0.2792

1382/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 656us/step - accuracy: 0.9007 - loss: 0.2789

1459/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 656us/step - accuracy: 0.9005 - loss: 0.2791

1533/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.9002 - loss: 0.2788

1609/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.9003 - loss: 0.2789

1684/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.9000 - loss: 0.2795

1719/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 703us/step - accuracy: 0.8999 - loss: 0.2792 - val_accuracy: 0.8732 - val_loss: 0.3464

Epoch 18/30


   1/1719 ━━━━━━━━━━━━━━━━━━━━ 11s 7ms/step - accuracy: 0.9688 - loss: 0.2165

  76/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 668us/step - accuracy: 0.9083 - loss: 0.2599

 153/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 660us/step - accuracy: 0.8958 - loss: 0.2850

 232/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 651us/step - accuracy: 0.8976 - loss: 0.2807

 308/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 654us/step - accuracy: 0.8981 - loss: 0.2778

 386/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 652us/step - accuracy: 0.8981 - loss: 0.2823

 463/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 652us/step - accuracy: 0.8996 - loss: 0.2801

 538/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 654us/step - accuracy: 0.8999 - loss: 0.2797

 614/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 655us/step - accuracy: 0.9014 - loss: 0.2769

 691/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 654us/step - accuracy: 0.9017 - loss: 0.2767

 769/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 653us/step - accuracy: 0.9019 - loss: 0.2776

 847/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 653us/step - accuracy: 0.9013 - loss: 0.2793

 927/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 651us/step - accuracy: 0.9025 - loss: 0.2764

1001/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 653us/step - accuracy: 0.9018 - loss: 0.2757

1078/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 653us/step - accuracy: 0.9025 - loss: 0.2742

1151/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 656us/step - accuracy: 0.9026 - loss: 0.2740

1229/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 655us/step - accuracy: 0.9024 - loss: 0.2743

1307/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 654us/step - accuracy: 0.9028 - loss: 0.2735

1383/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 655us/step - accuracy: 0.9026 - loss: 0.2732

1460/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 655us/step - accuracy: 0.9024 - loss: 0.2734

1536/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 655us/step - accuracy: 0.9022 - loss: 0.2730

1613/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 655us/step - accuracy: 0.9022 - loss: 0.2731

1692/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 654us/step - accuracy: 0.9018 - loss: 0.2737

1719/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 697us/step - accuracy: 0.9018 - loss: 0.2735 - val_accuracy: 0.8734 - val_loss: 0.3462

Epoch 19/30


   1/1719 ━━━━━━━━━━━━━━━━━━━━ 11s 7ms/step - accuracy: 0.9688 - loss: 0.2156

  70/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 727us/step - accuracy: 0.9098 - loss: 0.2498

 141/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 718us/step - accuracy: 0.8992 - loss: 0.2802

 215/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 707us/step - accuracy: 0.8990 - loss: 0.2755

 284/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 712us/step - accuracy: 0.9001 - loss: 0.2742

 356/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 710us/step - accuracy: 0.9010 - loss: 0.2757

 430/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 705us/step - accuracy: 0.9020 - loss: 0.2745

 504/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 701us/step - accuracy: 0.9016 - loss: 0.2747

 579/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 698us/step - accuracy: 0.9026 - loss: 0.2724

 654/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 694us/step - accuracy: 0.9041 - loss: 0.2708

 729/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 692us/step - accuracy: 0.9039 - loss: 0.2712

 805/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 689us/step - accuracy: 0.9039 - loss: 0.2719

 880/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 687us/step - accuracy: 0.9035 - loss: 0.2732

 955/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 686us/step - accuracy: 0.9042 - loss: 0.2709

1031/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 684us/step - accuracy: 0.9043 - loss: 0.2694

1108/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 682us/step - accuracy: 0.9049 - loss: 0.2687

1185/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 680us/step - accuracy: 0.9049 - loss: 0.2683

1259/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 680us/step - accuracy: 0.9047 - loss: 0.2691

1333/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 679us/step - accuracy: 0.9053 - loss: 0.2677

1408/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 679us/step - accuracy: 0.9053 - loss: 0.2673

1484/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 678us/step - accuracy: 0.9045 - loss: 0.2682

1561/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 677us/step - accuracy: 0.9045 - loss: 0.2677

1636/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 677us/step - accuracy: 0.9044 - loss: 0.2676

1711/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 677us/step - accuracy: 0.9041 - loss: 0.2681

1719/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 722us/step - accuracy: 0.9041 - loss: 0.2680 - val_accuracy: 0.8738 - val_loss: 0.3456

Epoch 20/30


   1/1719 ━━━━━━━━━━━━━━━━━━━━ 12s 7ms/step - accuracy: 0.9688 - loss: 0.2142

  79/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 646us/step - accuracy: 0.9090 - loss: 0.2528

 157/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 645us/step - accuracy: 0.8993 - loss: 0.2746

 232/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 655us/step - accuracy: 0.9011 - loss: 0.2699

 307/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.9024 - loss: 0.2670

 385/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.9019 - loss: 0.2717

 461/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.9035 - loss: 0.2692

 539/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.9038 - loss: 0.2690

 612/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.9050 - loss: 0.2663

 687/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 661us/step - accuracy: 0.9055 - loss: 0.2660

 762/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 662us/step - accuracy: 0.9056 - loss: 0.2664

 838/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 663us/step - accuracy: 0.9050 - loss: 0.2685

 916/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 661us/step - accuracy: 0.9061 - loss: 0.2661

 992/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 661us/step - accuracy: 0.9058 - loss: 0.2652

1068/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 662us/step - accuracy: 0.9062 - loss: 0.2636

1143/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 662us/step - accuracy: 0.9062 - loss: 0.2633

1222/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 661us/step - accuracy: 0.9060 - loss: 0.2637

1298/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 661us/step - accuracy: 0.9062 - loss: 0.2631

1372/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 662us/step - accuracy: 0.9066 - loss: 0.2623

1448/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 662us/step - accuracy: 0.9059 - loss: 0.2630

1524/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 662us/step - accuracy: 0.9058 - loss: 0.2627

1603/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 661us/step - accuracy: 0.9057 - loss: 0.2627

1683/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.9055 - loss: 0.2634

1719/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 703us/step - accuracy: 0.9055 - loss: 0.2630 - val_accuracy: 0.8724 - val_loss: 0.3463

Epoch 21/30


   1/1719 ━━━━━━━━━━━━━━━━━━━━ 12s 7ms/step - accuracy: 0.9375 - loss: 0.2144

  75/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 678us/step - accuracy: 0.9121 - loss: 0.2450

 151/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 672us/step - accuracy: 0.9017 - loss: 0.2686

 227/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 667us/step - accuracy: 0.9027 - loss: 0.2652

 303/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 665us/step - accuracy: 0.9034 - loss: 0.2627

 377/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 668us/step - accuracy: 0.9044 - loss: 0.2654

 454/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 666us/step - accuracy: 0.9051 - loss: 0.2641

 532/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 664us/step - accuracy: 0.9055 - loss: 0.2640

 610/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 662us/step - accuracy: 0.9064 - loss: 0.2606

 688/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.9070 - loss: 0.2609

 764/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.9070 - loss: 0.2614

 841/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.9062 - loss: 0.2638

 920/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.9074 - loss: 0.2609

 997/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.9072 - loss: 0.2601

1072/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.9074 - loss: 0.2587

1147/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.9073 - loss: 0.2585

1223/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.9072 - loss: 0.2587

1301/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.9074 - loss: 0.2581

1377/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.9076 - loss: 0.2576

1455/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.9072 - loss: 0.2579

1533/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.9072 - loss: 0.2577

1611/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 656us/step - accuracy: 0.9072 - loss: 0.2577

1689/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 655us/step - accuracy: 0.9070 - loss: 0.2584

1719/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 700us/step - accuracy: 0.9069 - loss: 0.2581 - val_accuracy: 0.8732 - val_loss: 0.3439

Epoch 22/30


   1/1719 ━━━━━━━━━━━━━━━━━━━━ 12s 7ms/step - accuracy: 0.9375 - loss: 0.2054

  73/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 697us/step - accuracy: 0.9140 - loss: 0.2368

 147/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 689us/step - accuracy: 0.9048 - loss: 0.2637

 225/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 675us/step - accuracy: 0.9050 - loss: 0.2604

 301/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 672us/step - accuracy: 0.9060 - loss: 0.2576

 376/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 672us/step - accuracy: 0.9069 - loss: 0.2608

 452/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 670us/step - accuracy: 0.9073 - loss: 0.2596

 529/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 667us/step - accuracy: 0.9076 - loss: 0.2595

 607/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 664us/step - accuracy: 0.9086 - loss: 0.2561

 681/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 666us/step - accuracy: 0.9094 - loss: 0.2557

 756/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 667us/step - accuracy: 0.9090 - loss: 0.2568

 833/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 665us/step - accuracy: 0.9086 - loss: 0.2584

 910/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 664us/step - accuracy: 0.9091 - loss: 0.2570

 987/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 663us/step - accuracy: 0.9093 - loss: 0.2555

1063/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 663us/step - accuracy: 0.9095 - loss: 0.2539

1140/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 662us/step - accuracy: 0.9093 - loss: 0.2537

1219/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 661us/step - accuracy: 0.9090 - loss: 0.2541

1297/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.9092 - loss: 0.2534

1374/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.9096 - loss: 0.2527

1450/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.9091 - loss: 0.2532

1525/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.9089 - loss: 0.2531

1600/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 661us/step - accuracy: 0.9089 - loss: 0.2530

1677/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 661us/step - accuracy: 0.9086 - loss: 0.2539

1719/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 705us/step - accuracy: 0.9086 - loss: 0.2534 - val_accuracy: 0.8742 - val_loss: 0.3437

Epoch 23/30


   1/1719 ━━━━━━━━━━━━━━━━━━━━ 11s 7ms/step - accuracy: 0.9375 - loss: 0.1940

  75/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 679us/step - accuracy: 0.9158 - loss: 0.2358

 150/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 673us/step - accuracy: 0.9073 - loss: 0.2578

 225/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 672us/step - accuracy: 0.9069 - loss: 0.2559

 298/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 676us/step - accuracy: 0.9083 - loss: 0.2534

 375/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 671us/step - accuracy: 0.9091 - loss: 0.2558

 451/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 669us/step - accuracy: 0.9094 - loss: 0.2549

 529/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 666us/step - accuracy: 0.9096 - loss: 0.2548

 606/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 664us/step - accuracy: 0.9106 - loss: 0.2516

 685/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.9112 - loss: 0.2511

 762/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.9108 - loss: 0.2520

 839/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.9101 - loss: 0.2542

 915/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.9109 - loss: 0.2518

 991/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.9109 - loss: 0.2509

1067/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.9112 - loss: 0.2491

1143/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.9109 - loss: 0.2490

1218/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.9107 - loss: 0.2494

1295/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.9111 - loss: 0.2488

1370/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 661us/step - accuracy: 0.9115 - loss: 0.2480

1447/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.9109 - loss: 0.2487

1523/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.9108 - loss: 0.2484

1601/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.9107 - loss: 0.2485

1676/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.9103 - loss: 0.2493

1719/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 706us/step - accuracy: 0.9104 - loss: 0.2487 - val_accuracy: 0.8746 - val_loss: 0.3424

Epoch 24/30


   1/1719 ━━━━━━━━━━━━━━━━━━━━ 11s 7ms/step - accuracy: 0.9375 - loss: 0.1879

  74/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 686us/step - accuracy: 0.9185 - loss: 0.2293

 147/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 687us/step - accuracy: 0.9094 - loss: 0.2541

 224/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 676us/step - accuracy: 0.9089 - loss: 0.2513

 299/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 674us/step - accuracy: 0.9104 - loss: 0.2485

 370/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 680us/step - accuracy: 0.9113 - loss: 0.2501

 446/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 677us/step - accuracy: 0.9113 - loss: 0.2502

 523/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 673us/step - accuracy: 0.9116 - loss: 0.2505

 600/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 671us/step - accuracy: 0.9128 - loss: 0.2466

 676/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 670us/step - accuracy: 0.9131 - loss: 0.2464

 754/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 668us/step - accuracy: 0.9126 - loss: 0.2475

 829/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 668us/step - accuracy: 0.9121 - loss: 0.2485

 906/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 667us/step - accuracy: 0.9125 - loss: 0.2480

 982/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 667us/step - accuracy: 0.9127 - loss: 0.2463

1058/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 666us/step - accuracy: 0.9130 - loss: 0.2448

1128/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 669us/step - accuracy: 0.9129 - loss: 0.2445

1204/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 669us/step - accuracy: 0.9124 - loss: 0.2450

1280/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 669us/step - accuracy: 0.9128 - loss: 0.2446

1356/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 668us/step - accuracy: 0.9133 - loss: 0.2438

1432/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 668us/step - accuracy: 0.9132 - loss: 0.2439

1506/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 668us/step - accuracy: 0.9127 - loss: 0.2440

1582/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 668us/step - accuracy: 0.9126 - loss: 0.2442

1659/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 667us/step - accuracy: 0.9121 - loss: 0.2450

1719/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 713us/step - accuracy: 0.9122 - loss: 0.2443 - val_accuracy: 0.8750 - val_loss: 0.3426

Epoch 25/30


   1/1719 ━━━━━━━━━━━━━━━━━━━━ 11s 7ms/step - accuracy: 0.9375 - loss: 0.1911

  75/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 678us/step - accuracy: 0.9212 - loss: 0.2266

 150/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 674us/step - accuracy: 0.9112 - loss: 0.2485

 227/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 668us/step - accuracy: 0.9113 - loss: 0.2470

 301/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 670us/step - accuracy: 0.9126 - loss: 0.2436

 377/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 669us/step - accuracy: 0.9131 - loss: 0.2466

 454/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 666us/step - accuracy: 0.9133 - loss: 0.2453

 526/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 671us/step - accuracy: 0.9135 - loss: 0.2458

 600/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 672us/step - accuracy: 0.9145 - loss: 0.2421

 675/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 672us/step - accuracy: 0.9150 - loss: 0.2418

 750/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 672us/step - accuracy: 0.9139 - loss: 0.2432

 824/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 672us/step - accuracy: 0.9135 - loss: 0.2443

 900/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 671us/step - accuracy: 0.9135 - loss: 0.2440

 976/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 671us/step - accuracy: 0.9139 - loss: 0.2423

1053/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 670us/step - accuracy: 0.9140 - loss: 0.2409

1129/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 669us/step - accuracy: 0.9141 - loss: 0.2403

1203/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 670us/step - accuracy: 0.9137 - loss: 0.2409

1280/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 669us/step - accuracy: 0.9143 - loss: 0.2404

1357/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 668us/step - accuracy: 0.9146 - loss: 0.2396

1434/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 667us/step - accuracy: 0.9146 - loss: 0.2396

1511/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 667us/step - accuracy: 0.9143 - loss: 0.2396

1586/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 667us/step - accuracy: 0.9142 - loss: 0.2398

1661/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 667us/step - accuracy: 0.9137 - loss: 0.2406

1719/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 710us/step - accuracy: 0.9138 - loss: 0.2400 - val_accuracy: 0.8746 - val_loss: 0.3419

Epoch 26/30


   1/1719 ━━━━━━━━━━━━━━━━━━━━ 12s 7ms/step - accuracy: 0.9375 - loss: 0.1821

  76/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 668us/step - accuracy: 0.9211 - loss: 0.2213

 153/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 662us/step - accuracy: 0.9120 - loss: 0.2445

 228/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 666us/step - accuracy: 0.9131 - loss: 0.2428

 303/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 667us/step - accuracy: 0.9141 - loss: 0.2396

 379/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 666us/step - accuracy: 0.9142 - loss: 0.2433

 454/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 667us/step - accuracy: 0.9149 - loss: 0.2411

 530/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 667us/step - accuracy: 0.9152 - loss: 0.2412

 606/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 666us/step - accuracy: 0.9159 - loss: 0.2383

 684/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 664us/step - accuracy: 0.9164 - loss: 0.2376

 763/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 661us/step - accuracy: 0.9155 - loss: 0.2390

 840/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.9148 - loss: 0.2412

 917/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.9159 - loss: 0.2387

 995/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.9160 - loss: 0.2375

1071/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.9163 - loss: 0.2362

1150/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.9159 - loss: 0.2362

1228/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.9159 - loss: 0.2365

1304/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.9164 - loss: 0.2359

1382/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.9164 - loss: 0.2355

1458/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.9164 - loss: 0.2356

1533/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.9161 - loss: 0.2355

1609/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.9161 - loss: 0.2355

1685/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.9157 - loss: 0.2363

1719/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 704us/step - accuracy: 0.9157 - loss: 0.2358 - val_accuracy: 0.8758 - val_loss: 0.3429

Epoch 27/30


   1/1719 ━━━━━━━━━━━━━━━━━━━━ 12s 7ms/step - accuracy: 0.9375 - loss: 0.1785

  74/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 688us/step - accuracy: 0.9253 - loss: 0.2163

 148/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 685us/step - accuracy: 0.9166 - loss: 0.2405

 224/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 676us/step - accuracy: 0.9159 - loss: 0.2383

 301/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 671us/step - accuracy: 0.9168 - loss: 0.2348

 378/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 668us/step - accuracy: 0.9163 - loss: 0.2387

 454/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 666us/step - accuracy: 0.9170 - loss: 0.2366

 528/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 668us/step - accuracy: 0.9171 - loss: 0.2369

 604/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 668us/step - accuracy: 0.9175 - loss: 0.2339

 679/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 669us/step - accuracy: 0.9179 - loss: 0.2334

 755/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 668us/step - accuracy: 0.9171 - loss: 0.2346

 830/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 669us/step - accuracy: 0.9166 - loss: 0.2357

 906/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 668us/step - accuracy: 0.9170 - loss: 0.2352

 982/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 668us/step - accuracy: 0.9172 - loss: 0.2335

1060/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 666us/step - accuracy: 0.9177 - loss: 0.2319

1135/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 666us/step - accuracy: 0.9177 - loss: 0.2316

1213/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 665us/step - accuracy: 0.9173 - loss: 0.2322

1289/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 665us/step - accuracy: 0.9178 - loss: 0.2316

1362/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 666us/step - accuracy: 0.9181 - loss: 0.2311

1439/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 665us/step - accuracy: 0.9180 - loss: 0.2312

1516/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 665us/step - accuracy: 0.9176 - loss: 0.2312

1591/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 665us/step - accuracy: 0.9176 - loss: 0.2314

1666/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 665us/step - accuracy: 0.9171 - loss: 0.2324

1719/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 711us/step - accuracy: 0.9173 - loss: 0.2317 - val_accuracy: 0.8760 - val_loss: 0.3432

Epoch 28/30


   1/1719 ━━━━━━━━━━━━━━━━━━━━ 12s 7ms/step - accuracy: 0.9375 - loss: 0.1744

  73/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 703us/step - accuracy: 0.9281 - loss: 0.2108

 146/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 695us/step - accuracy: 0.9176 - loss: 0.2371

 221/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 688us/step - accuracy: 0.9170 - loss: 0.2351

 295/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 685us/step - accuracy: 0.9181 - loss: 0.2317

 371/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 681us/step - accuracy: 0.9183 - loss: 0.2328

 447/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 677us/step - accuracy: 0.9182 - loss: 0.2329

 524/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 674us/step - accuracy: 0.9185 - loss: 0.2329

 603/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 669us/step - accuracy: 0.9189 - loss: 0.2298

 677/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 670us/step - accuracy: 0.9197 - loss: 0.2294

 753/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 670us/step - accuracy: 0.9189 - loss: 0.2304

 829/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 669us/step - accuracy: 0.9186 - loss: 0.2317

 905/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 668us/step - accuracy: 0.9189 - loss: 0.2312

 980/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 668us/step - accuracy: 0.9192 - loss: 0.2295

1056/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 668us/step - accuracy: 0.9194 - loss: 0.2283

1132/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 668us/step - accuracy: 0.9196 - loss: 0.2277

1210/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 666us/step - accuracy: 0.9192 - loss: 0.2282

1286/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 666us/step - accuracy: 0.9197 - loss: 0.2277

1363/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 665us/step - accuracy: 0.9202 - loss: 0.2271

1439/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 665us/step - accuracy: 0.9201 - loss: 0.2272

1516/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 664us/step - accuracy: 0.9196 - loss: 0.2273

1595/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 663us/step - accuracy: 0.9196 - loss: 0.2274

1670/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 664us/step - accuracy: 0.9192 - loss: 0.2283

1719/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 707us/step - accuracy: 0.9193 - loss: 0.2277 - val_accuracy: 0.8768 - val_loss: 0.3413

Epoch 29/30


   1/1719 ━━━━━━━━━━━━━━━━━━━━ 12s 7ms/step - accuracy: 0.9375 - loss: 0.1697

  78/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 658us/step - accuracy: 0.9291 - loss: 0.2100

 156/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 651us/step - accuracy: 0.9201 - loss: 0.2332

 229/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 664us/step - accuracy: 0.9198 - loss: 0.2298

 307/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.9205 - loss: 0.2262

 384/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.9195 - loss: 0.2309

 460/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.9202 - loss: 0.2286

 537/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.9202 - loss: 0.2284

 615/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.9208 - loss: 0.2260

 692/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 656us/step - accuracy: 0.9211 - loss: 0.2254

 768/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.9203 - loss: 0.2271

 845/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.9198 - loss: 0.2289

 924/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 655us/step - accuracy: 0.9207 - loss: 0.2264

1002/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 654us/step - accuracy: 0.9206 - loss: 0.2255

1080/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 653us/step - accuracy: 0.9214 - loss: 0.2240

1156/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 654us/step - accuracy: 0.9209 - loss: 0.2244

1232/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 654us/step - accuracy: 0.9208 - loss: 0.2242

1308/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 655us/step - accuracy: 0.9213 - loss: 0.2238

1382/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.9213 - loss: 0.2234

1459/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 656us/step - accuracy: 0.9213 - loss: 0.2235

1537/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 656us/step - accuracy: 0.9210 - loss: 0.2233

1614/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 656us/step - accuracy: 0.9209 - loss: 0.2235

1693/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 655us/step - accuracy: 0.9207 - loss: 0.2241

1719/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 699us/step - accuracy: 0.9208 - loss: 0.2238 - val_accuracy: 0.8760 - val_loss: 0.3410

Epoch 30/30


   1/1719 ━━━━━━━━━━━━━━━━━━━━ 11s 7ms/step - accuracy: 0.9375 - loss: 0.1674

  76/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 671us/step - accuracy: 0.9322 - loss: 0.2060

 153/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 661us/step - accuracy: 0.9222 - loss: 0.2280

 229/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.9218 - loss: 0.2261

 306/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.9216 - loss: 0.2227

 383/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.9207 - loss: 0.2268

 460/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.9214 - loss: 0.2248

 535/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 660us/step - accuracy: 0.9213 - loss: 0.2246

 612/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.9220 - loss: 0.2220

 690/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.9218 - loss: 0.2220

 765/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.9214 - loss: 0.2229

 842/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.9209 - loss: 0.2250

 920/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.9218 - loss: 0.2224

 995/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.9217 - loss: 0.2215

1071/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 658us/step - accuracy: 0.9224 - loss: 0.2202

1146/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 659us/step - accuracy: 0.9220 - loss: 0.2204

1225/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.9221 - loss: 0.2206

1303/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.9225 - loss: 0.2202

1381/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 656us/step - accuracy: 0.9225 - loss: 0.2197

1458/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 656us/step - accuracy: 0.9224 - loss: 0.2198

1537/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 655us/step - accuracy: 0.9221 - loss: 0.2196

1611/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 656us/step - accuracy: 0.9220 - loss: 0.2198

1686/1719 ━━━━━━━━━━━━━━━━━━━━ 0s 657us/step - accuracy: 0.9217 - loss: 0.2205

1719/1719 ━━━━━━━━━━━━━━━━━━━━ 1s 702us/step - accuracy: 0.9218 - loss: 0.2201 - val_accuracy: 0.8768 - val_loss: 0.3409

Visualisation

import pandas as pd 

pd.DataFrame(history.history).plot(
    figsize=(8, 5), xlim=[0, 29], ylim=[0, 1], grid=True, xlabel="Époque",
    style=["r--", "r--.", "b-", "b-*"])
plt.legend(loc="lower left")  # code supplémentaire
plt.show()

Visualisation

Évaluation du modèle sur l’ensemble de test

model.evaluate(X_test, y_test)

Faire des prédictions

X_new = X_test[:3]
y_proba = model.predict(X_new)
y_proba.round(2)
y_pred = y_proba.argmax(axis=-1)
y_pred
array([9, 2, 1])
y_new = y_test[:3]
y_new
array([9, 2, 1], dtype=uint8)

Prédictions vs Observations

plt.figure(figsize=(7.2, 2.4))
for index, image in enumerate(X_new):
    plt.subplot(1, 3, index + 1)
    plt.imshow(image, cmap="binary", interpolation="nearest")
    plt.axis('off')
    plt.title(class_names[y_test[index]])
plt.subplots_adjust(wspace=0.2, hspace=0.5)
plt.show()

np.array(class_names)[y_pred]
array(['Botte', 'Pull', 'Pantalon'], dtype='<U11')

Performance sur l’ensemble de test

from sklearn.metrics import classification_report

y_proba = model.predict(X_test)
y_pred = y_proba.argmax(axis=-1)

Performance sur l’ensemble de test

print(classification_report(y_test, y_pred))
              precision    recall  f1-score   support

           0       0.85      0.80      0.82      1000
           1       0.99      0.96      0.98      1000
           2       0.76      0.83      0.79      1000
           3       0.82      0.93      0.87      1000
           4       0.80      0.79      0.80      1000
           5       0.88      0.98      0.93      1000
           6       0.75      0.64      0.69      1000
           7       0.95      0.91      0.93      1000
           8       0.96      0.97      0.96      1000
           9       0.98      0.92      0.95      1000

    accuracy                           0.87     10000
   macro avg       0.87      0.87      0.87     10000
weighted avg       0.87      0.87      0.87     10000

Prologue

Résumé

  • Introduction aux réseaux de neurones et au connexionnisme
    • Passage de l’IA symbolique aux approches connexionnistes en intelligence artificielle.
    • Inspiration des réseaux neuronaux biologiques et de la structure du cerveau humain.
  • Calculs avec neurodes et unités logiques à seuil
    • Modèles précoces de neurones (neurodes) capables de réaliser des opérations logiques (ET, OU, NON).
    • Limites des perceptrons simples dans la résolution de problèmes non linéairement séparables comme le XOR.
  • Perceptrons multicouches (MLP) et réseaux de neurones à propagation avant (FNN)
    • Dépassement des limites des perceptrons en introduisant des couches cachées.
    • Structure et flux d’information dans les réseaux de neurones à propagation avant.
    • Explication des calculs de la passe avant dans les réseaux de neurones.
  • Fonctions d’activation dans les réseaux de neurones
    • Importance des fonctions d’activation non linéaires (sigmoïde, tanh, ReLU) pour permettre l’apprentissage de motifs complexes.
    • Rôle des fonctions d’activation dans la rétropropagation et l’optimisation par descente de gradient.
    • Théorème de l’approximation universelle et ses implications pour les réseaux neuronaux.
  • Frameworks d’apprentissage profond
    • Aperçu de PyTorch et TensorFlow en tant que plateformes leaders pour l’apprentissage profond.
    • Introduction à Keras comme API de haut niveau pour la construction et l’entraînement des réseaux neuronaux.
    • Discussion sur l’adaptabilité des différents frameworks à la recherche et aux applications industrielles.
  • Implémentation pratique avec Keras
    • Chargement et exploration de l’ensemble de données Fashion-MNIST.
    • Création d’un modèle de réseau neuronal avec l’API Sequential de Keras.
    • Compilation du modèle avec des fonctions de perte et des optimiseurs appropriés pour la classification multiclasses.
    • Entraînement du modèle et visualisation des métriques d’entraînement et de validation sur les époques.
  • Évaluation des performances du modèle sur l’ensemble de test
    • Évaluation des performances du modèle sur l’ensemble de test Fashion-MNIST.
    • Interprétation des résultats obtenus après l’entraînement.
  • Faire des prédictions et interpréter les résultats
    • Utilisation du modèle entraîné pour faire des prédictions sur de nouvelles données.
    • Visualisation des prédictions en parallèle avec les images et étiquettes réelles.
    • Compréhension des probabilités de sortie et des assignations de classes dans le contexte de l’ensemble de données.

3Blue1Brown

Prochain cours

  • Nous discutons de l’algorithme utilisé pour entraîner les réseaux de neurones artificiels.

Références

Cybenko, George V. 1989. « Approximation by superpositions of a sigmoidal function ». Mathematics of Control, Signals and Systems 2: 303‑14. https://api.semanticscholar.org/CorpusID:3958369.
Géron, Aurélien. 2022. Hands-on Machine Learning with Scikit-Learn, Keras, and TensorFlow. 3ᵉ éd. O’Reilly Media, Inc.
Goodfellow, Ian, Yoshua Bengio, et Aaron Courville. 2016. Deep Learning. Adaptive computation et machine learning. MIT Press. https://dblp.org/rec/books/daglib/0040158.
Hornik, Kurt, Maxwell Stinchcombe, et Halbert White. 1989. « Multilayer feedforward networks are universal approximators ». Neural Networks 2 (5): 359‑66. https://doi.org/https://doi.org/10.1016/0893-6080(89)90020-8.
Lakoff, George, et Srini Narayanan. 2025. The Neural Mind: How Brains Think. 1ʳᵉ éd. University of Chicago Press. https://press.uchicago.edu/ucp/books/book/chicago/N/bo243406239.html.
LeCun, Yann, Yoshua Bengio, et Geoffrey Hinton. 2015. « Deep learning ». Nature 521 (7553): 436‑44. https://doi.org/10.1038/nature14539.
LeNail, Alexander. 2019. « NN-SVG: Publication-Ready Neural Network Architecture Schematics ». Journal of Open Source Software 4 (33): 747. https://doi.org/10.21105/joss.00747.
McCulloch, Warren S, et Walter Pitts. 1943. « A logical calculus of the ideas immanent in nervous activity ». The Bulletin of Mathematical Biophysics 5 (4): 115‑33. https://doi.org/10.1007/bf02478259.
Minsky, Marvin, et Seymour Papert. 1969. Perceptrons: An Introduction to Computational Geometry. MIT Press.
Rosenblatt, F. 1958. « The perceptron: A probabilistic model for information storage and organization in the brain. » Psychological Review 65 (6): 386‑408. https://doi.org/10.1037/h0042519.
Russell, Stuart, et Peter Norvig. 2020. Artificial Intelligence: A Modern Approach. 4ᵉ éd. Pearson. http://aima.cs.berkeley.edu/.

Marcel Turcotte

[email protected]

École de science informatique et de génie électrique (SIGE)

Université d’Ottawa