► Code examples / Computer Vision / Point cloud classification with PointNet

Point cloud classification with PointNet

Author: David Griffiths
Date created: 2020/05/25
Last modified: 2024/01/09
Description: Implementation of PointNet for ModelNet10 classification.

ⓘ This example uses Keras 3

View in Colab • GitHub source

Point cloud classification


Introduction

Classification, detection and segmentation of unordered 3D point sets i.e. point clouds is a core problem in computer vision. This example implements the seminal point cloud deep learning paper PointNet (Qi et al., 2017). For a detailed intoduction on PointNet see this blog post.


Setup

If using colab first install trimesh with !pip install trimesh.

import os
import glob
import trimesh
import numpy as np
from tensorflow import data as tf_data
from keras import ops
import keras
from keras import layers
from matplotlib import pyplot as plt

keras.utils.set_random_seed(seed=42)

Load dataset

We use the ModelNet10 model dataset, the smaller 10 class version of the ModelNet40 dataset. First download the data:

DATA_DIR = keras.utils.get_file(
    "modelnet.zip",
    "http://3dvision.princeton.edu/projects/2014/3DShapeNets/ModelNet10.zip",
    extract=True,
)
DATA_DIR = os.path.join(os.path.dirname(DATA_DIR), "ModelNet10")
Downloading data from http://3dvision.princeton.edu/projects/2014/3DShapeNets/ModelNet10.zip
     0/473402300 ━━━━━━━━━━━━━━━━━━━━  0s 0s/step

  8192/473402300 ━━━━━━━━━━━━━━━━━━━━  1:06:44 8us/step

 40960/473402300 ━━━━━━━━━━━━━━━━━━━━  26:17 3us/step

 90112/473402300 ━━━━━━━━━━━━━━━━━━━━  17:49 2us/step

188416/473402300 ━━━━━━━━━━━━━━━━━━━━  11:20 1us/step

385024/473402300 ━━━━━━━━━━━━━━━━━━━━  6:55 1us/step

786432/473402300 ━━━━━━━━━━━━━━━━━━━━  4:03 1us/step


1581056/473402300 ━━━━━━━━━━━━━━━━━━━━ 2:21 0us/step



3170304/473402300 ━━━━━━━━━━━━━━━━━━━━ 1:20 0us/step



6004736/473402300 ━━━━━━━━━━━━━━━━━━━━ 47s 0us/step



8880128/473402300 ━━━━━━━━━━━━━━━━━━━━ 35s 0us/step



11902976/473402300 ━━━━━━━━━━━━━━━━━━━━ 28s 0us/step



14925824/473402300 ━━━━━━━━━━━━━━━━━━━━ 24s 0us/step



17915904/473402300 ━━━━━━━━━━━━━━━━━━━━ 22s 0us/step



21020672/473402300 ━━━━━━━━━━━━━━━━━━━━ 20s 0us/step



23977984/473402300 ━━━━━━━━━━━━━━━━━━━━ 18s 0us/step



26861568/473402300 ━━━━━━━━━━━━━━━━━━━━ 17s 0us/step



29958144/473402300 ━━━━━━━━━━━━━━━━━━━━ 16s 0us/step



33071104/473402300 ━━━━━━━━━━━━━━━━━━━━ 16s 0us/step



36175872/473402300 ━━━━━━━━━━━━━━━━━━━━ 15s 0us/step



39206912/473402300 ━━━━━━━━━━━━━━━━━━━━ 14s 0us/step



41902080/473402300 ━━━━━━━━━━━━━━━━━━━━ 14s 0us/step



45015040/473402300 ━━━━━━━━━━━━━━━━━━━━ 14s 0us/step



48021504/473402300 ━━━━━━━━━━━━━━━━━━━━ 13s 0us/step



51003392/473402300 ━━━━━━━━━━━━━━━━━━━━ 13s 0us/step



53960704/473402300 ━━━━━━━━━━━━━━━━━━━━ 13s 0us/step



56803328/473402300 ━━━━━━━━━━━━━━━━━━━━ 12s 0us/step



59834368/473402300 ━━━━━━━━━━━━━━━━━━━━ 12s 0us/step



62750720/473402300 ━━━━━━━━━━━━━━━━━━━━ 12s 0us/step



65839104/473402300 ━━━━━━━━━━━━━━━━━━━━ 12s 0us/step



68698112/473402300 ━━━━━━━━━━━━━━━━━━━━ 11s 0us/step



71385088/473402300 ━━━━━━━━━━━━━━━━━━━━ 11s 0us/step



74432512/473402300 ━━━━━━━━━━━━━━━━━━━━ 11s 0us/step



77365248/473402300 ━━━━━━━━━━━━━━━━━━━━ 11s 0us/step



80363520/473402300 ━━━━━━━━━━━━━━━━━━━━ 11s 0us/step



83156992/473402300 ━━━━━━━━━━━━━━━━━━━━ 11s 0us/step



86179840/473402300 ━━━━━━━━━━━━━━━━━━━━ 10s 0us/step



89300992/473402300 ━━━━━━━━━━━━━━━━━━━━ 10s 0us/step



92282880/473402300 ━━━━━━━━━━━━━━━━━━━━ 10s 0us/step



95371264/473402300 ━━━━━━━━━━━━━━━━━━━━ 10s 0us/step



98410496/473402300 ━━━━━━━━━━━━━━━━━━━━ 10s 0us/step



101130240/473402300 ━━━━━━━━━━━━━━━━━━━━ 10s 0us/step



104169472/473402300 ━━━━━━━━━━━━━━━━━━━━ 10s 0us/step



107192320/473402300 ━━━━━━━━━━━━━━━━━━━━ 9s 0us/step



110297088/473402300 ━━━━━━━━━━━━━━━━━━━━ 9s 0us/step



113344512/473402300 ━━━━━━━━━━━━━━━━━━━━ 9s 0us/step



116391936/473402300 ━━━━━━━━━━━━━━━━━━━━ 9s 0us/step



119513088/473402300 ━━━━━━━━━━━━━━━━━━━━ 9s 0us/step



122626048/473402300 ━━━━━━━━━━━━━━━━━━━━ 9s 0us/step



125313024/473402300 ━━━━━━━━━━━━━━━━━━━━ 9s 0us/step



128368640/473402300 ━━━━━━━━━━━━━━━━━━━━ 9s 0us/step



131432448/473402300 ━━━━━━━━━━━━━━━━━━━━ 8s 0us/step



134520832/473402300 ━━━━━━━━━━━━━━━━━━━━ 8s 0us/step



137560064/473402300 ━━━━━━━━━━━━━━━━━━━━ 8s 0us/step



140648448/473402300 ━━━━━━━━━━━━━━━━━━━━ 8s 0us/step



143720448/473402300 ━━━━━━━━━━━━━━━━━━━━ 8s 0us/step



146808832/473402300 ━━━━━━━━━━━━━━━━━━━━ 8s 0us/step



149864448/473402300 ━━━━━━━━━━━━━━━━━━━━ 8s 0us/step



152592384/473402300 ━━━━━━━━━━━━━━━━━━━━ 8s 0us/step



155623424/473402300 ━━━━━━━━━━━━━━━━━━━━ 8s 0us/step



158728192/473402300 ━━━━━━━━━━━━━━━━━━━━ 8s 0us/step



161783808/473402300 ━━━━━━━━━━━━━━━━━━━━ 7s 0us/step



164806656/473402300 ━━━━━━━━━━━━━━━━━━━━ 7s 0us/step



167895040/473402300 ━━━━━━━━━━━━━━━━━━━━ 7s 0us/step



170975232/473402300 ━━━━━━━━━━━━━━━━━━━━ 7s 0us/step



174071808/473402300 ━━━━━━━━━━━━━━━━━━━━ 7s 0us/step



177119232/473402300 ━━━━━━━━━━━━━━━━━━━━ 7s 0us/step



180166656/473402300 ━━━━━━━━━━━━━━━━━━━━ 7s 0us/step



182976512/473402300 ━━━━━━━━━━━━━━━━━━━━ 7s 0us/step



185884672/473402300 ━━━━━━━━━━━━━━━━━━━━ 7s 0us/step



188932096/473402300 ━━━━━━━━━━━━━━━━━━━━ 7s 0us/step



192028672/473402300 ━━━━━━━━━━━━━━━━━━━━ 7s 0us/step



195117056/473402300 ━━━━━━━━━━━━━━━━━━━━ 6s 0us/step



198189056/473402300 ━━━━━━━━━━━━━━━━━━━━ 6s 0us/step



201302016/473402300 ━━━━━━━━━━━━━━━━━━━━ 6s 0us/step



204406784/473402300 ━━━━━━━━━━━━━━━━━━━━ 6s 0us/step



207470592/473402300 ━━━━━━━━━━━━━━━━━━━━ 6s 0us/step



210575360/473402300 ━━━━━━━━━━━━━━━━━━━━ 6s 0us/step



213581824/473402300 ━━━━━━━━━━━━━━━━━━━━ 6s 0us/step



216268800/473402300 ━━━━━━━━━━━━━━━━━━━━ 6s 0us/step



218374144/473402300 ━━━━━━━━━━━━━━━━━━━━ 6s 0us/step



220569600/473402300 ━━━━━━━━━━━━━━━━━━━━ 6s 0us/step



222363648/473402300 ━━━━━━━━━━━━━━━━━━━━ 6s 0us/step



225345536/473402300 ━━━━━━━━━━━━━━━━━━━━ 6s 0us/step



228425728/473402300 ━━━━━━━━━━━━━━━━━━━━ 6s 0us/step



231473152/473402300 ━━━━━━━━━━━━━━━━━━━━ 5s 0us/step



234577920/473402300 ━━━━━━━━━━━━━━━━━━━━ 5s 0us/step



237690880/473402300 ━━━━━━━━━━━━━━━━━━━━ 5s 0us/step



240746496/473402300 ━━━━━━━━━━━━━━━━━━━━ 5s 0us/step



243834880/473402300 ━━━━━━━━━━━━━━━━━━━━ 5s 0us/step



246898688/473402300 ━━━━━━━━━━━━━━━━━━━━ 5s 0us/step



249954304/473402300 ━━━━━━━━━━━━━━━━━━━━ 5s 0us/step



252936192/473402300 ━━━━━━━━━━━━━━━━━━━━ 5s 0us/step



255672320/473402300 ━━━━━━━━━━━━━━━━━━━━ 5s 0us/step



258695168/473402300 ━━━━━━━━━━━━━━━━━━━━ 5s 0us/step



261734400/473402300 ━━━━━━━━━━━━━━━━━━━━ 5s 0us/step



264847360/473402300 ━━━━━━━━━━━━━━━━━━━━ 5s 0us/step



267919360/473402300 ━━━━━━━━━━━━━━━━━━━━ 4s 0us/step



271015936/473402300 ━━━━━━━━━━━━━━━━━━━━ 4s 0us/step



273768448/473402300 ━━━━━━━━━━━━━━━━━━━━ 4s 0us/step



276840448/473402300 ━━━━━━━━━━━━━━━━━━━━ 4s 0us/step



279625728/473402300 ━━━━━━━━━━━━━━━━━━━━ 4s 0us/step



282525696/473402300 ━━━━━━━━━━━━━━━━━━━━ 4s 0us/step



285581312/473402300 ━━━━━━━━━━━━━━━━━━━━ 4s 0us/step



288645120/473402300 ━━━━━━━━━━━━━━━━━━━━ 4s 0us/step



291733504/473402300 ━━━━━━━━━━━━━━━━━━━━ 4s 0us/step



294682624/473402300 ━━━━━━━━━━━━━━━━━━━━ 4s 0us/step



297795584/473402300 ━━━━━━━━━━━━━━━━━━━━ 4s 0us/step



300851200/473402300 ━━━━━━━━━━━━━━━━━━━━ 4s 0us/step



303955968/473402300 ━━━━━━━━━━━━━━━━━━━━ 4s 0us/step



306798592/473402300 ━━━━━━━━━━━━━━━━━━━━ 3s 0us/step



309846016/473402300 ━━━━━━━━━━━━━━━━━━━━ 3s 0us/step



312926208/473402300 ━━━━━━━━━━━━━━━━━━━━ 3s 0us/step



315990016/473402300 ━━━━━━━━━━━━━━━━━━━━ 3s 0us/step



319053824/473402300 ━━━━━━━━━━━━━━━━━━━━ 3s 0us/step



322134016/473402300 ━━━━━━━━━━━━━━━━━━━━ 3s 0us/step



325099520/473402300 ━━━━━━━━━━━━━━━━━━━━ 3s 0us/step



328187904/473402300 ━━━━━━━━━━━━━━━━━━━━ 3s 0us/step



331251712/473402300 ━━━━━━━━━━━━━━━━━━━━ 3s 0us/step



334364672/473402300 ━━━━━━━━━━━━━━━━━━━━ 3s 0us/step



337477632/473402300 ━━━━━━━━━━━━━━━━━━━━ 3s 0us/step



340598784/473402300 ━━━━━━━━━━━━━━━━━━━━ 3s 0us/step



343130112/473402300 ━━━━━━━━━━━━━━━━━━━━ 3s 0us/step



345554944/473402300 ━━━━━━━━━━━━━━━━━━━━ 3s 0us/step



347570176/473402300 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step



350224384/473402300 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step



352436224/473402300 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step



355393536/473402300 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step



357179392/473402300 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step



359858176/473402300 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step



362045440/473402300 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step



364281856/473402300 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step



364298240/473402300 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step



364306432/473402300 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step



364314624/473402300 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step



364322816/473402300 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step



364331008/473402300 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step



364339200/473402300 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step



364347392/473402300 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step



364355584/473402300 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step



364363776/473402300 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step



364371968/473402300 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step



364380160/473402300 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step



364396544/473402300 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step



364445696/473402300 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step



364601344/473402300 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step



365084672/473402300 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step



366510080/473402300 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step



369491968/473402300 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step



372400128/473402300 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step



375521280/473402300 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step



378535936/473402300 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step



381558784/473402300 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step



384475136/473402300 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step



387571712/473402300 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step



390463488/473402300 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step



393551872/473402300 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step



396632064/473402300 ━━━━━━━━━━━━━━━━━━━━ 2s 0us/step



399704064/473402300 ━━━━━━━━━━━━━━━━━━━━ 1s 0us/step



402767872/473402300 ━━━━━━━━━━━━━━━━━━━━ 1s 0us/step



405790720/473402300 ━━━━━━━━━━━━━━━━━━━━ 1s 0us/step



408854528/473402300 ━━━━━━━━━━━━━━━━━━━━ 1s 0us/step



411975680/473402300 ━━━━━━━━━━━━━━━━━━━━ 1s 0us/step



414982144/473402300 ━━━━━━━━━━━━━━━━━━━━ 1s 0us/step



418045952/473402300 ━━━━━━━━━━━━━━━━━━━━ 1s 0us/step



421167104/473402300 ━━━━━━━━━━━━━━━━━━━━ 1s 0us/step



423878656/473402300 ━━━━━━━━━━━━━━━━━━━━ 1s 0us/step



426999808/473402300 ━━━━━━━━━━━━━━━━━━━━ 1s 0us/step



430112768/473402300 ━━━━━━━━━━━━━━━━━━━━ 1s 0us/step



433053696/473402300 ━━━━━━━━━━━━━━━━━━━━ 1s 0us/step



436125696/473402300 ━━━━━━━━━━━━━━━━━━━━ 0s 0us/step



439189504/473402300 ━━━━━━━━━━━━━━━━━━━━ 0s 0us/step



442286080/473402300 ━━━━━━━━━━━━━━━━━━━━ 0s 0us/step



445063168/473402300 ━━━━━━━━━━━━━━━━━━━━ 0s 0us/step



448118784/473402300 ━━━━━━━━━━━━━━━━━━━━ 0s 0us/step



451166208/473402300 ━━━━━━━━━━━━━━━━━━━━ 0s 0us/step



454262784/473402300 ━━━━━━━━━━━━━━━━━━━━ 0s 0us/step



457293824/473402300 ━━━━━━━━━━━━━━━━━━━━ 0s 0us/step



460275712/473402300 ━━━━━━━━━━━━━━━━━━━━ 0s 0us/step



463011840/473402300 ━━━━━━━━━━━━━━━━━━━━ 0s 0us/step



466018304/473402300 ━━━━━━━━━━━━━━━━━━━━ 0s 0us/step



469057536/473402300 ━━━━━━━━━━━━━━━━━━━━ 0s 0us/step



472145920/473402300 ━━━━━━━━━━━━━━━━━━━━ 0s 0us/step



473402300/473402300 ━━━━━━━━━━━━━━━━━━━━ 12s 0us/step

We can use the trimesh package to read and visualize the .off mesh files.

mesh = trimesh.load(os.path.join(DATA_DIR, "chair/train/chair_0001.off"))
mesh.show()

To convert a mesh file to a point cloud we first need to sample points on the mesh surface. .sample() performs a uniform random sampling. Here we sample at 2048 locations and visualize in matplotlib.

points = mesh.sample(2048)

fig = plt.figure(figsize=(5, 5))
ax = fig.add_subplot(111, projection="3d")
ax.scatter(points[:, 0], points[:, 1], points[:, 2])
ax.set_axis_off()
plt.show()

png

To generate a tf.data.Dataset() we need to first parse through the ModelNet data folders. Each mesh is loaded and sampled into a point cloud before being added to a standard python list and converted to a numpy array. We also store the current enumerate index value as the object label and use a dictionary to recall this later.

def parse_dataset(num_points=2048):
    train_points = []
    train_labels = []
    test_points = []
    test_labels = []
    class_map = {}
    folders = glob.glob(os.path.join(DATA_DIR, "[!README]*"))

    for i, folder in enumerate(folders):
        print("processing class: {}".format(os.path.basename(folder)))
        # store folder name with ID so we can retrieve later
        class_map[i] = folder.split("/")[-1]
        # gather all files
        train_files = glob.glob(os.path.join(folder, "train/*"))
        test_files = glob.glob(os.path.join(folder, "test/*"))

        for f in train_files:
            train_points.append(trimesh.load(f).sample(num_points))
            train_labels.append(i)

        for f in test_files:
            test_points.append(trimesh.load(f).sample(num_points))
            test_labels.append(i)

    return (
        np.array(train_points),
        np.array(test_points),
        np.array(train_labels),
        np.array(test_labels),
        class_map,
    )

Set the number of points to sample and batch size and parse the dataset. This can take ~5minutes to complete.

NUM_POINTS = 2048
NUM_CLASSES = 10
BATCH_SIZE = 32

train_points, test_points, train_labels, test_labels, CLASS_MAP = parse_dataset(
    NUM_POINTS
)
processing class: bathtub

processing class: monitor

processing class: desk

processing class: dresser

processing class: toilet

processing class: bed

processing class: sofa

processing class: chair

processing class: night_stand

processing class: table

Our data can now be read into a tf.data.Dataset() object. We set the shuffle buffer size to the entire size of the dataset as prior to this the data is ordered by class. Data augmentation is important when working with point cloud data. We create a augmentation function to jitter and shuffle the train dataset.

def augment(points, label):
    # jitter points
    points += keras.random.uniform(points.shape, -0.005, 0.005, dtype="float64")
    # shuffle points
    points = keras.random.shuffle(points)
    return points, label


train_size = 0.8
dataset = tf_data.Dataset.from_tensor_slices((train_points, train_labels))
test_dataset = tf_data.Dataset.from_tensor_slices((test_points, test_labels))
train_dataset_size = int(len(dataset) * train_size)

dataset = dataset.shuffle(len(train_points)).map(augment)
test_dataset = test_dataset.shuffle(len(test_points)).batch(BATCH_SIZE)

train_dataset = dataset.take(train_dataset_size).batch(BATCH_SIZE)
validation_dataset = dataset.skip(train_dataset_size).batch(BATCH_SIZE)

Build a model

Each convolution and fully-connected layer (with exception for end layers) consists of Convolution / Dense -> Batch Normalization -> ReLU Activation.

def conv_bn(x, filters):
    x = layers.Conv1D(filters, kernel_size=1, padding="valid")(x)
    x = layers.BatchNormalization(momentum=0.0)(x)
    return layers.Activation("relu")(x)


def dense_bn(x, filters):
    x = layers.Dense(filters)(x)
    x = layers.BatchNormalization(momentum=0.0)(x)
    return layers.Activation("relu")(x)

PointNet consists of two core components. The primary MLP network, and the transformer net (T-net). The T-net aims to learn an affine transformation matrix by its own mini network. The T-net is used twice. The first time to transform the input features (n, 3) into a canonical representation. The second is an affine transformation for alignment in feature space (n, 3). As per the original paper we constrain the transformation to be close to an orthogonal matrix (i.e. ||X*X^T - I|| = 0).

class OrthogonalRegularizer(keras.regularizers.Regularizer):
    def __init__(self, num_features, l2reg=0.001):
        self.num_features = num_features
        self.l2reg = l2reg
        self.eye = ops.eye(num_features)

    def __call__(self, x):
        x = ops.reshape(x, (-1, self.num_features, self.num_features))
        xxt = ops.tensordot(x, x, axes=(2, 2))
        xxt = ops.reshape(xxt, (-1, self.num_features, self.num_features))
        return ops.sum(self.l2reg * ops.square(xxt - self.eye))

We can then define a general function to build T-net layers.

def tnet(inputs, num_features):
    # Initialise bias as the identity matrix
    bias = keras.initializers.Constant(np.eye(num_features).flatten())
    reg = OrthogonalRegularizer(num_features)

    x = conv_bn(inputs, 32)
    x = conv_bn(x, 64)
    x = conv_bn(x, 512)
    x = layers.GlobalMaxPooling1D()(x)
    x = dense_bn(x, 256)
    x = dense_bn(x, 128)
    x = layers.Dense(
        num_features * num_features,
        kernel_initializer="zeros",
        bias_initializer=bias,
        activity_regularizer=reg,
    )(x)
    feat_T = layers.Reshape((num_features, num_features))(x)
    # Apply affine transformation to input features
    return layers.Dot(axes=(2, 1))([inputs, feat_T])

The main network can be then implemented in the same manner where the t-net mini models can be dropped in a layers in the graph. Here we replicate the network architecture published in the original paper but with half the number of weights at each layer as we are using the smaller 10 class ModelNet dataset.

inputs = keras.Input(shape=(NUM_POINTS, 3))

x = tnet(inputs, 3)
x = conv_bn(x, 32)
x = conv_bn(x, 32)
x = tnet(x, 32)
x = conv_bn(x, 32)
x = conv_bn(x, 64)
x = conv_bn(x, 512)
x = layers.GlobalMaxPooling1D()(x)
x = dense_bn(x, 256)
x = layers.Dropout(0.3)(x)
x = dense_bn(x, 128)
x = layers.Dropout(0.3)(x)

outputs = layers.Dense(NUM_CLASSES, activation="softmax")(x)

model = keras.Model(inputs=inputs, outputs=outputs, name="pointnet")
model.summary()
Model: "pointnet"
┏━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━┓
┃ Layer (type)        ┃ Output Shape      ┃ Param # ┃ Connected to         ┃
┡━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━┩
│ input_layer         │ (None, 2048, 3)   │       0 │ -                    │
│ (InputLayer)        │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ conv1d (Conv1D)     │ (None, 2048, 32)  │     128 │ input_layer[0][0]    │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ batch_normalization │ (None, 2048, 32)  │     128 │ conv1d[0][0]         │
│ (BatchNormalizatio
 │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ activation          │ (None, 2048, 32)  │       0 │ batch_normalization
 │
│ (Activation)        │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ conv1d_1 (Conv1D)   │ (None, 2048, 64)  │   2,112 │ activation[0][0]     │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ batch_normalizatio
 │ (None, 2048, 64)  │     256 │ conv1d_1[0][0]       │
│ (BatchNormalizatio
 │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ activation_1        │ (None, 2048, 64)  │       0 │ batch_normalization
 │
│ (Activation)        │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ conv1d_2 (Conv1D)   │ (None, 2048, 512) │  33,280 │ activation_1[0][0]   │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ batch_normalizatio
 │ (None, 2048, 512) │   2,048 │ conv1d_2[0][0]       │
│ (BatchNormalizatio
 │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ activation_2        │ (None, 2048, 512) │       0 │ batch_normalization
 │
│ (Activation)        │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ global_max_pooling
 │ (None, 512)       │       0 │ activation_2[0][0]   │
│ (GlobalMaxPooling1
 │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ dense (Dense)       │ (None, 256)       │ 131,328 │ global_max_pooling1
 │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ batch_normalizatio
 │ (None, 256)       │   1,024 │ dense[0][0]          │
│ (BatchNormalizatio
 │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ activation_3        │ (None, 256)       │       0 │ batch_normalization
 │
│ (Activation)        │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ dense_1 (Dense)     │ (None, 128)       │  32,896 │ activation_3[0][0]   │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ batch_normalizatio
 │ (None, 128)       │     512 │ dense_1[0][0]        │
│ (BatchNormalizatio
 │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ activation_4        │ (None, 128)       │       0 │ batch_normalization
 │
│ (Activation)        │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ dense_2 (Dense)     │ (None, 9)         │   1,161 │ activation_4[0][0]   │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ reshape (Reshape)   │ (None, 3, 3)      │       0 │ dense_2[0][0]        │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ dot (Dot)           │ (None, 2048, 3)   │       0 │ input_layer[0][0],   │
│                     │                   │         │ reshape[0][0]        │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ conv1d_3 (Conv1D)   │ (None, 2048, 32)  │     128 │ dot[0][0]            │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ batch_normalizatio
 │ (None, 2048, 32)  │     128 │ conv1d_3[0][0]       │
│ (BatchNormalizatio
 │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ activation_5        │ (None, 2048, 32)  │       0 │ batch_normalization
 │
│ (Activation)        │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ conv1d_4 (Conv1D)   │ (None, 2048, 32)  │   1,056 │ activation_5[0][0]   │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ batch_normalizatio
 │ (None, 2048, 32)  │     128 │ conv1d_4[0][0]       │
│ (BatchNormalizatio
 │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ activation_6        │ (None, 2048, 32)  │       0 │ batch_normalization
 │
│ (Activation)        │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ conv1d_5 (Conv1D)   │ (None, 2048, 32)  │   1,056 │ activation_6[0][0]   │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ batch_normalizatio
 │ (None, 2048, 32)  │     128 │ conv1d_5[0][0]       │
│ (BatchNormalizatio
 │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ activation_7        │ (None, 2048, 32)  │       0 │ batch_normalization
 │
│ (Activation)        │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ conv1d_6 (Conv1D)   │ (None, 2048, 64)  │   2,112 │ activation_7[0][0]   │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ batch_normalizatio
 │ (None, 2048, 64)  │     256 │ conv1d_6[0][0]       │
│ (BatchNormalizatio
 │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ activation_8        │ (None, 2048, 64)  │       0 │ batch_normalization
 │
│ (Activation)        │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ conv1d_7 (Conv1D)   │ (None, 2048, 512) │  33,280 │ activation_8[0][0]   │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ batch_normalizatio
 │ (None, 2048, 512) │   2,048 │ conv1d_7[0][0]       │
│ (BatchNormalizatio
 │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ activation_9        │ (None, 2048, 512) │       0 │ batch_normalization
 │
│ (Activation)        │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ global_max_pooling
 │ (None, 512)       │       0 │ activation_9[0][0]   │
│ (GlobalMaxPooling1
 │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ dense_3 (Dense)     │ (None, 256)       │ 131,328 │ global_max_pooling1
 │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ batch_normalizatio
 │ (None, 256)       │   1,024 │ dense_3[0][0]        │
│ (BatchNormalizatio
 │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ activation_10       │ (None, 256)       │       0 │ batch_normalization
 │
│ (Activation)        │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ dense_4 (Dense)     │ (None, 128)       │  32,896 │ activation_10[0][0]  │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ batch_normalizatio
 │ (None, 128)       │     512 │ dense_4[0][0]        │
│ (BatchNormalizatio
 │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ activation_11       │ (None, 128)       │       0 │ batch_normalization
 │
│ (Activation)        │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ dense_5 (Dense)     │ (None, 1024)      │ 132,096 │ activation_11[0][0]  │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ reshape_1 (Reshape) │ (None, 32, 32)    │       0 │ dense_5[0][0]        │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ dot_1 (Dot)         │ (None, 2048, 32)  │       0 │ activation_6[0][0],  │
│                     │                   │         │ reshape_1[0][0]      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ conv1d_8 (Conv1D)   │ (None, 2048, 32)  │   1,056 │ dot_1[0][0]          │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ batch_normalizatio
 │ (None, 2048, 32)  │     128 │ conv1d_8[0][0]       │
│ (BatchNormalizatio
 │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ activation_12       │ (None, 2048, 32)  │       0 │ batch_normalization
 │
│ (Activation)        │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ conv1d_9 (Conv1D)   │ (None, 2048, 64)  │   2,112 │ activation_12[0][0]  │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ batch_normalizatio
 │ (None, 2048, 64)  │     256 │ conv1d_9[0][0]       │
│ (BatchNormalizatio
 │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ activation_13       │ (None, 2048, 64)  │       0 │ batch_normalization
 │
│ (Activation)        │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ conv1d_10 (Conv1D)  │ (None, 2048, 512) │  33,280 │ activation_13[0][0]  │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ batch_normalizatio
 │ (None, 2048, 512) │   2,048 │ conv1d_10[0][0]      │
│ (BatchNormalizatio
 │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ activation_14       │ (None, 2048, 512) │       0 │ batch_normalization
 │
│ (Activation)        │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ global_max_pooling
 │ (None, 512)       │       0 │ activation_14[0][0]  │
│ (GlobalMaxPooling1
 │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ dense_6 (Dense)     │ (None, 256)       │ 131,328 │ global_max_pooling1
 │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ batch_normalizatio
 │ (None, 256)       │   1,024 │ dense_6[0][0]        │
│ (BatchNormalizatio
 │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ activation_15       │ (None, 256)       │       0 │ batch_normalization
 │
│ (Activation)        │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ dropout (Dropout)   │ (None, 256)       │       0 │ activation_15[0][0]  │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ dense_7 (Dense)     │ (None, 128)       │  32,896 │ dropout[0][0]        │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ batch_normalizatio
 │ (None, 128)       │     512 │ dense_7[0][0]        │
│ (BatchNormalizatio
 │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ activation_16       │ (None, 128)       │       0 │ batch_normalization
 │
│ (Activation)        │                   │         │                      │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ dropout_1 (Dropout) │ (None, 128)       │       0 │ activation_16[0][0]  │
├─────────────────────┌───────────────────┌─────────┌───────────────────────
│ dense_8 (Dense)     │ (None, 10)        │   1,290 │ dropout_1[0][0]      │
└─────────────────────┮───────────────────┮─────────┮──────────────────────┘
 Total params: 748,979 (2.86 MB)
 Trainable params: 742,899 (2.83 MB)
 Non-trainable params: 6,080 (23.75 KB)

Train model

Once the model is defined it can be trained like any other standard classification model using .compile() and .fit().

model.compile(
    loss="sparse_categorical_crossentropy",
    optimizer=keras.optimizers.Adam(learning_rate=0.001),
    metrics=["sparse_categorical_accuracy"],
)

model.fit(train_dataset, epochs=20, validation_data=validation_dataset)
Epoch 1/20

1/100 ━━━━━━━━━━━━━━━━━━━━ 16:59 10s/step - loss: 70.7465 - sparse_categorical_accuracy: 0.2188



2/100 ━━━━━━━━━━━━━━━━━━━━ 2:06 1s/step - loss: 69.8872 - sparse_categorical_accuracy: 0.1953



3/100 ━━━━━━━━━━━━━━━━━━━━ 2:00 1s/step - loss: 69.4798 - sparse_categorical_accuracy: 0.1823



4/100 ━━━━━━━━━━━━━━━━━━━━ 1:57 1s/step - loss: 68.7454 - sparse_categorical_accuracy: 0.1719



5/100 ━━━━━━━━━━━━━━━━━━━━ 1:53 1s/step - loss: 67.8508 - sparse_categorical_accuracy: 0.1700



6/100 ━━━━━━━━━━━━━━━━━━━━ 1:50 1s/step - loss: 67.0352 - sparse_categorical_accuracy: 0.1703



7/100 ━━━━━━━━━━━━━━━━━━━━ 1:47 1s/step - loss: 66.3409 - sparse_categorical_accuracy: 0.1702



8/100 ━━━━━━━━━━━━━━━━━━━━ 1:45 1s/step - loss: 65.5973 - sparse_categorical_accuracy: 0.1734



9/100 ━━━━━━━━━━━━━━━━━━━━ 1:43 1s/step - loss: 64.8169 - sparse_categorical_accuracy: 0.1761



10/100 ━━━━━━━━━━━━━━━━━━━━ 1:41 1s/step - loss: 64.0699 - sparse_categorical_accuracy: 0.1769



11/100 ━━━━━━━━━━━━━━━━━━━━ 1:39 1s/step - loss: 63.3220 - sparse_categorical_accuracy: 0.1779



12/100 ━━━━━━━━━━━━━━━━━━━━ 1:38 1s/step - loss: 62.6677 - sparse_categorical_accuracy: 0.1776



13/100 ━━━━━━━━━━━━━━━━━━━━ 1:36 1s/step - loss: 62.0234 - sparse_categorical_accuracy: 0.1778



14/100 ━━━━━━━━━━━━━━━━━━━━ 1:35 1s/step - loss: 61.4256 - sparse_categorical_accuracy: 0.1774



15/100 ━━━━━━━━━━━━━━━━━━━━ 1:34 1s/step - loss: 60.8435 - sparse_categorical_accuracy: 0.1772



16/100 ━━━━━━━━━━━━━━━━━━━━ 1:32 1s/step - loss: 60.2982 - sparse_categorical_accuracy: 0.1771



17/100 ━━━━━━━━━━━━━━━━━━━━ 1:31 1s/step - loss: 59.7788 - sparse_categorical_accuracy: 0.1773



18/100 ━━━━━━━━━━━━━━━━━━━━ 1:29 1s/step - loss: 59.2792 - sparse_categorical_accuracy: 0.1777



19/100 ━━━━━━━━━━━━━━━━━━━━ 1:28 1s/step - loss: 58.7959 - sparse_categorical_accuracy: 0.1782



20/100 ━━━━━━━━━━━━━━━━━━━━ 1:27 1s/step - loss: 58.3345 - sparse_categorical_accuracy: 0.1787



21/100 ━━━━━━━━━━━━━━━━━━━━ 1:25 1s/step - loss: 57.8916 - sparse_categorical_accuracy: 0.1794



22/100 ━━━━━━━━━━━━━━━━━━━━ 1:24 1s/step - loss: 57.4650 - sparse_categorical_accuracy: 0.1803



23/100 ━━━━━━━━━━━━━━━━━━━━ 1:23 1s/step - loss: 57.0690 - sparse_categorical_accuracy: 0.1811



24/100 ━━━━━━━━━━━━━━━━━━━━ 1:22 1s/step - loss: 56.6876 - sparse_categorical_accuracy: 0.1819



25/100 ━━━━━━━━━━━━━━━━━━━━ 1:20 1s/step - loss: 56.3285 - sparse_categorical_accuracy: 0.1827



26/100 ━━━━━━━━━━━━━━━━━━━━ 1:19 1s/step - loss: 55.9864 - sparse_categorical_accuracy: 0.1834



27/100 ━━━━━━━━━━━━━━━━━━━━ 1:18 1s/step - loss: 55.6550 - sparse_categorical_accuracy: 0.1843



28/100 ━━━━━━━━━━━━━━━━━━━━ 1:17 1s/step - loss: 55.3351 - sparse_categorical_accuracy: 0.1852



29/100 ━━━━━━━━━━━━━━━━━━━━ 1:16 1s/step - loss: 55.0261 - sparse_categorical_accuracy: 0.1863



30/100 ━━━━━━━━━━━━━━━━━━━━ 1:15 1s/step - loss: 54.7329 - sparse_categorical_accuracy: 0.1872



31/100 ━━━━━━━━━━━━━━━━━━━━ 1:13 1s/step - loss: 54.4503 - sparse_categorical_accuracy: 0.1882



32/100 ━━━━━━━━━━━━━━━━━━━━ 1:12 1s/step - loss: 54.1778 - sparse_categorical_accuracy: 0.1891



33/100 ━━━━━━━━━━━━━━━━━━━━ 1:11 1s/step - loss: 53.9170 - sparse_categorical_accuracy: 0.1900



34/100 ━━━━━━━━━━━━━━━━━━━━ 1:10 1s/step - loss: 53.6651 - sparse_categorical_accuracy: 0.1909



35/100 ━━━━━━━━━━━━━━━━━━━━ 1:09 1s/step - loss: 53.4239 - sparse_categorical_accuracy: 0.1916



36/100 ━━━━━━━━━━━━━━━━━━━━ 1:08 1s/step - loss: 53.1926 - sparse_categorical_accuracy: 0.1922



37/100 ━━━━━━━━━━━━━━━━━━━━ 1:07 1s/step - loss: 52.9695 - sparse_categorical_accuracy: 0.1929



38/100 ━━━━━━━━━━━━━━━━━━━━ 1:05 1s/step - loss: 52.7542 - sparse_categorical_accuracy: 0.1935



39/100 ━━━━━━━━━━━━━━━━━━━━ 1:04 1s/step - loss: 52.5469 - sparse_categorical_accuracy: 0.1940



40/100 ━━━━━━━━━━━━━━━━━━━━ 1:03 1s/step - loss: 52.3461 - sparse_categorical_accuracy: 0.1946



41/100 ━━━━━━━━━━━━━━━━━━━━ 1:02 1s/step - loss: 52.1509 - sparse_categorical_accuracy: 0.1950



42/100 ━━━━━━━━━━━━━━━━━━━━ 1:01 1s/step - loss: 51.9608 - sparse_categorical_accuracy: 0.1955



43/100 ━━━━━━━━━━━━━━━━━━━━ 1:00 1s/step - loss: 51.7759 - sparse_categorical_accuracy: 0.1960



44/100 ━━━━━━━━━━━━━━━━━━━━ 59s 1s/step - loss: 51.5960 - sparse_categorical_accuracy: 0.1966



45/100 ━━━━━━━━━━━━━━━━━━━━ 58s 1s/step - loss: 51.4224 - sparse_categorical_accuracy: 0.1971



46/100 ━━━━━━━━━━━━━━━━━━━━ 57s 1s/step - loss: 51.2539 - sparse_categorical_accuracy: 0.1976



47/100 ━━━━━━━━━━━━━━━━━━━━ 56s 1s/step - loss: 51.0897 - sparse_categorical_accuracy: 0.1982



48/100 ━━━━━━━━━━━━━━━━━━━━ 55s 1s/step - loss: 50.9300 - sparse_categorical_accuracy: 0.1987



49/100 ━━━━━━━━━━━━━━━━━━━━ 54s 1s/step - loss: 50.7742 - sparse_categorical_accuracy: 0.1992



50/100 ━━━━━━━━━━━━━━━━━━━━ 52s 1s/step - loss: 50.6223 - sparse_categorical_accuracy: 0.1997



51/100 ━━━━━━━━━━━━━━━━━━━━ 51s 1s/step - loss: 50.4747 - sparse_categorical_accuracy: 0.2001



52/100 ━━━━━━━━━━━━━━━━━━━━ 50s 1s/step - loss: 50.3312 - sparse_categorical_accuracy: 0.2006



53/100 ━━━━━━━━━━━━━━━━━━━━ 49s 1s/step - loss: 50.1910 - sparse_categorical_accuracy: 0.2011



54/100 ━━━━━━━━━━━━━━━━━━━━ 48s 1s/step - loss: 50.0539 - sparse_categorical_accuracy: 0.2017



55/100 ━━━━━━━━━━━━━━━━━━━━ 47s 1s/step - loss: 49.9200 - sparse_categorical_accuracy: 0.2022



56/100 ━━━━━━━━━━━━━━━━━━━━ 46s 1s/step - loss: 49.7896 - sparse_categorical_accuracy: 0.2027



57/100 ━━━━━━━━━━━━━━━━━━━━ 45s 1s/step - loss: 49.6620 - sparse_categorical_accuracy: 0.2032



58/100 ━━━━━━━━━━━━━━━━━━━━ 44s 1s/step - loss: 49.5372 - sparse_categorical_accuracy: 0.2037



59/100 ━━━━━━━━━━━━━━━━━━━━ 43s 1s/step - loss: 49.4152 - sparse_categorical_accuracy: 0.2041



60/100 ━━━━━━━━━━━━━━━━━━━━ 42s 1s/step - loss: 49.2957 - sparse_categorical_accuracy: 0.2046



61/100 ━━━━━━━━━━━━━━━━━━━━ 41s 1s/step - loss: 49.1790 - sparse_categorical_accuracy: 0.2050



62/100 ━━━━━━━━━━━━━━━━━━━━ 40s 1s/step - loss: 49.0646 - sparse_categorical_accuracy: 0.2054



63/100 ━━━━━━━━━━━━━━━━━━━━ 39s 1s/step - loss: 48.9525 - sparse_categorical_accuracy: 0.2058



64/100 ━━━━━━━━━━━━━━━━━━━━ 37s 1s/step - loss: 48.8427 - sparse_categorical_accuracy: 0.2062



65/100 ━━━━━━━━━━━━━━━━━━━━ 36s 1s/step - loss: 48.7353 - sparse_categorical_accuracy: 0.2065



66/100 ━━━━━━━━━━━━━━━━━━━━ 35s 1s/step - loss: 48.6299 - sparse_categorical_accuracy: 0.2069



67/100 ━━━━━━━━━━━━━━━━━━━━ 34s 1s/step - loss: 48.5266 - sparse_categorical_accuracy: 0.2072



68/100 ━━━━━━━━━━━━━━━━━━━━ 33s 1s/step - loss: 48.4277 - sparse_categorical_accuracy: 0.2075



69/100 ━━━━━━━━━━━━━━━━━━━━ 32s 1s/step - loss: 48.3308 - sparse_categorical_accuracy: 0.2078



70/100 ━━━━━━━━━━━━━━━━━━━━ 31s 1s/step - loss: 48.2357 - sparse_categorical_accuracy: 0.2081



71/100 ━━━━━━━━━━━━━━━━━━━━ 30s 1s/step - loss: 48.1423 - sparse_categorical_accuracy: 0.2084



72/100 ━━━━━━━━━━━━━━━━━━━━ 29s 1s/step - loss: 48.0505 - sparse_categorical_accuracy: 0.2087



73/100 ━━━━━━━━━━━━━━━━━━━━ 28s 1s/step - loss: 47.9604 - sparse_categorical_accuracy: 0.2090



74/100 ━━━━━━━━━━━━━━━━━━━━ 27s 1s/step - loss: 47.8719 - sparse_categorical_accuracy: 0.2093



75/100 ━━━━━━━━━━━━━━━━━━━━ 26s 1s/step - loss: 47.7852 - sparse_categorical_accuracy: 0.2096



76/100 ━━━━━━━━━━━━━━━━━━━━ 25s 1s/step - loss: 47.7000 - sparse_categorical_accuracy: 0.2098



77/100 ━━━━━━━━━━━━━━━━━━━━ 24s 1s/step - loss: 47.6164 - sparse_categorical_accuracy: 0.2101



78/100 ━━━━━━━━━━━━━━━━━━━━ 23s 1s/step - loss: 47.5342 - sparse_categorical_accuracy: 0.2104



79/100 ━━━━━━━━━━━━━━━━━━━━ 22s 1s/step - loss: 47.4536 - sparse_categorical_accuracy: 0.2106



80/100 ━━━━━━━━━━━━━━━━━━━━ 21s 1s/step - loss: 47.3744 - sparse_categorical_accuracy: 0.2109



81/100 ━━━━━━━━━━━━━━━━━━━━ 19s 1s/step - loss: 47.2967 - sparse_categorical_accuracy: 0.2112



82/100 ━━━━━━━━━━━━━━━━━━━━ 18s 1s/step - loss: 47.2202 - sparse_categorical_accuracy: 0.2114



83/100 ━━━━━━━━━━━━━━━━━━━━ 17s 1s/step - loss: 47.1450 - sparse_categorical_accuracy: 0.2117



84/100 ━━━━━━━━━━━━━━━━━━━━ 16s 1s/step - loss: 47.0711 - sparse_categorical_accuracy: 0.2119



85/100 ━━━━━━━━━━━━━━━━━━━━ 15s 1s/step - loss: 46.9984 - sparse_categorical_accuracy: 0.2122



86/100 ━━━━━━━━━━━━━━━━━━━━ 14s 1s/step - loss: 46.9270 - sparse_categorical_accuracy: 0.2124



87/100 ━━━━━━━━━━━━━━━━━━━━ 13s 1s/step - loss: 46.8568 - sparse_categorical_accuracy: 0.2126



88/100 ━━━━━━━━━━━━━━━━━━━━ 12s 1s/step - loss: 46.7877 - sparse_categorical_accuracy: 0.2129



89/100 ━━━━━━━━━━━━━━━━━━━━ 11s 1s/step - loss: 46.7196 - sparse_categorical_accuracy: 0.2131



90/100 ━━━━━━━━━━━━━━━━━━━━ 10s 1s/step - loss: 46.6525 - sparse_categorical_accuracy: 0.2133



91/100 ━━━━━━━━━━━━━━━━━━━━ 9s 1s/step - loss: 46.5865 - sparse_categorical_accuracy: 0.2135



92/100 ━━━━━━━━━━━━━━━━━━━━ 8s 1s/step - loss: 46.5215 - sparse_categorical_accuracy: 0.2137



93/100 ━━━━━━━━━━━━━━━━━━━━ 7s 1s/step - loss: 46.4574 - sparse_categorical_accuracy: 0.2139



94/100 ━━━━━━━━━━━━━━━━━━━━ 6s 1s/step - loss: 46.3946 - sparse_categorical_accuracy: 0.2141



95/100 ━━━━━━━━━━━━━━━━━━━━ 5s 1s/step - loss: 46.3327 - sparse_categorical_accuracy: 0.2143



96/100 ━━━━━━━━━━━━━━━━━━━━ 4s 1s/step - loss: 46.2717 - sparse_categorical_accuracy: 0.2145



97/100 ━━━━━━━━━━━━━━━━━━━━ 3s 1s/step - loss: 46.2115 - sparse_categorical_accuracy: 0.2147



98/100 ━━━━━━━━━━━━━━━━━━━━ 2s 1s/step - loss: 46.1522 - sparse_categorical_accuracy: 0.2149



99/100 ━━━━━━━━━━━━━━━━━━━━ 1s 1s/step - loss: 46.0937 - sparse_categorical_accuracy: 0.2151



100/100 ━━━━━━━━━━━━━━━━━━━━ 0s 1s/step - loss: 46.0345 - sparse_categorical_accuracy: 0.2154



100/100 ━━━━━━━━━━━━━━━━━━━━ 119s 1s/step - loss: 45.9764 - sparse_categorical_accuracy: 0.2156 - val_loss: 4122951.0000 - val_sparse_categorical_accuracy: 0.3154

Epoch 2/20

1/100 ━━━━━━━━━━━━━━━━━━━━ 1:44 1s/step - loss: 36.7920 - sparse_categorical_accuracy: 0.2500



2/100 ━━━━━━━━━━━━━━━━━━━━ 1:42 1s/step - loss: 36.8501 - sparse_categorical_accuracy: 0.2188



3/100 ━━━━━━━━━━━━━━━━━━━━ 1:39 1s/step - loss: 36.8194 - sparse_categorical_accuracy: 0.2049



4/100 ━━━━━━━━━━━━━━━━━━━━ 1:37 1s/step - loss: 36.7948 - sparse_categorical_accuracy: 0.1947



5/100 ━━━━━━━━━━━━━━━━━━━━ 1:35 1s/step - loss: 36.7802 - sparse_categorical_accuracy: 0.1907



6/100 ━━━━━━━━━━━━━━━━━━━━ 1:34 1s/step - loss: 36.7761 - sparse_categorical_accuracy: 0.1911



7/100 ━━━━━━━━━━━━━━━━━━━━ 1:33 1s/step - loss: 36.7720 - sparse_categorical_accuracy: 0.1937



8/100 ━━━━━━━━━━━━━━━━━━━━ 1:33 1s/step - loss: 36.7660 - sparse_categorical_accuracy: 0.1964



9/100 ━━━━━━━━━━━━━━━━━━━━ 1:32 1s/step - loss: 36.7617 - sparse_categorical_accuracy: 0.1977



10/100 ━━━━━━━━━━━━━━━━━━━━ 1:30 1s/step - loss: 36.7567 - sparse_categorical_accuracy: 0.1992



11/100 ━━━━━━━━━━━━━━━━━━━━ 1:30 1s/step - loss: 36.7558 - sparse_categorical_accuracy: 0.2007



12/100 ━━━━━━━━━━━━━━━━━━━━ 1:29 1s/step - loss: 36.7534 - sparse_categorical_accuracy: 0.2022



13/100 ━━━━━━━━━━━━━━━━━━━━ 1:28 1s/step - loss: 36.7539 - sparse_categorical_accuracy: 0.2033



14/100 ━━━━━━━━━━━━━━━━━━━━ 1:27 1s/step - loss: 36.7521 - sparse_categorical_accuracy: 0.2049



15/100 ━━━━━━━━━━━━━━━━━━━━ 1:26 1s/step - loss: 36.7500 - sparse_categorical_accuracy: 0.2064



16/100 ━━━━━━━━━━━━━━━━━━━━ 1:25 1s/step - loss: 36.7464 - sparse_categorical_accuracy: 0.2087



17/100 ━━━━━━━━━━━━━━━━━━━━ 1:25 1s/step - loss: 36.7410 - sparse_categorical_accuracy: 0.2116



18/100 ━━━━━━━━━━━━━━━━━━━━ 1:24 1s/step - loss: 36.7356 - sparse_categorical_accuracy: 0.2138



19/100 ━━━━━━━━━━━━━━━━━━━━ 1:23 1s/step - loss: 36.7314 - sparse_categorical_accuracy: 0.2157



20/100 ━━━━━━━━━━━━━━━━━━━━ 1:21 1s/step - loss: 36.7275 - sparse_categorical_accuracy: 0.2178



21/100 ━━━━━━━━━━━━━━━━━━━━ 1:20 1s/step - loss: 36.7235 - sparse_categorical_accuracy: 0.2196



22/100 ━━━━━━━━━━━━━━━━━━━━ 1:19 1s/step - loss: 36.7189 - sparse_categorical_accuracy: 0.2218



23/100 ━━━━━━━━━━━━━━━━━━━━ 1:18 1s/step - loss: 36.7141 - sparse_categorical_accuracy: 0.2241



24/100 ━━━━━━━━━━━━━━━━━━━━ 1:17 1s/step - loss: 36.7087 - sparse_categorical_accuracy: 0.2262



25/100 ━━━━━━━━━━━━━━━━━━━━ 1:16 1s/step - loss: 36.7027 - sparse_categorical_accuracy: 0.2283



26/100 ━━━━━━━━━━━━━━━━━━━━ 1:15 1s/step - loss: 36.6970 - sparse_categorical_accuracy: 0.2303



27/100 ━━━━━━━━━━━━━━━━━━━━ 1:14 1s/step - loss: 36.6911 - sparse_categorical_accuracy: 0.2325



28/100 ━━━━━━━━━━━━━━━━━━━━ 1:13 1s/step - loss: 36.6862 - sparse_categorical_accuracy: 0.2342



29/100 ━━━━━━━━━━━━━━━━━━━━ 1:12 1s/step - loss: 36.6818 - sparse_categorical_accuracy: 0.2357



30/100 ━━━━━━━━━━━━━━━━━━━━ 1:11 1s/step - loss: 36.6766 - sparse_categorical_accuracy: 0.2372



31/100 ━━━━━━━━━━━━━━━━━━━━ 1:10 1s/step - loss: 36.6717 - sparse_categorical_accuracy: 0.2387



32/100 ━━━━━━━━━━━━━━━━━━━━ 1:09 1s/step - loss: 36.6670 - sparse_categorical_accuracy: 0.2403



33/100 ━━━━━━━━━━━━━━━━━━━━ 1:08 1s/step - loss: 36.6629 - sparse_categorical_accuracy: 0.2418



34/100 ━━━━━━━━━━━━━━━━━━━━ 1:07 1s/step - loss: 36.6591 - sparse_categorical_accuracy: 0.2431



35/100 ━━━━━━━━━━━━━━━━━━━━ 1:06 1s/step - loss: 36.6551 - sparse_categorical_accuracy: 0.2444



36/100 ━━━━━━━━━━━━━━━━━━━━ 1:05 1s/step - loss: 36.6513 - sparse_categorical_accuracy: 0.2456



37/100 ━━━━━━━━━━━━━━━━━━━━ 1:04 1s/step - loss: 36.6478 - sparse_categorical_accuracy: 0.2467



38/100 ━━━━━━━━━━━━━━━━━━━━ 1:03 1s/step - loss: 36.6441 - sparse_categorical_accuracy: 0.2477



39/100 ━━━━━━━━━━━━━━━━━━━━ 1:02 1s/step - loss: 36.6405 - sparse_categorical_accuracy: 0.2487



40/100 ━━━━━━━━━━━━━━━━━━━━ 1:01 1s/step - loss: 36.6368 - sparse_categorical_accuracy: 0.2497



41/100 ━━━━━━━━━━━━━━━━━━━━ 1:00 1s/step - loss: 36.6331 - sparse_categorical_accuracy: 0.2507



42/100 ━━━━━━━━━━━━━━━━━━━━ 59s 1s/step - loss: 36.6330 - sparse_categorical_accuracy: 0.2515



43/100 ━━━━━━━━━━━━━━━━━━━━ 58s 1s/step - loss: 36.6330 - sparse_categorical_accuracy: 0.2523



44/100 ━━━━━━━━━━━━━━━━━━━━ 57s 1s/step - loss: 36.6331 - sparse_categorical_accuracy: 0.2531



45/100 ━━━━━━━━━━━━━━━━━━━━ 56s 1s/step - loss: 36.6330 - sparse_categorical_accuracy: 0.2538



46/100 ━━━━━━━━━━━━━━━━━━━━ 55s 1s/step - loss: 36.6330 - sparse_categorical_accuracy: 0.2546



47/100 ━━━━━━━━━━━━━━━━━━━━ 54s 1s/step - loss: 36.6330 - sparse_categorical_accuracy: 0.2554



48/100 ━━━━━━━━━━━━━━━━━━━━ 53s 1s/step - loss: 36.6330 - sparse_categorical_accuracy: 0.2561



49/100 ━━━━━━━━━━━━━━━━━━━━ 52s 1s/step - loss: 36.6331 - sparse_categorical_accuracy: 0.2568



50/100 ━━━━━━━━━━━━━━━━━━━━ 51s 1s/step - loss: 36.6331 - sparse_categorical_accuracy: 0.2575



51/100 ━━━━━━━━━━━━━━━━━━━━ 50s 1s/step - loss: 36.6332 - sparse_categorical_accuracy: 0.2582



52/100 ━━━━━━━━━━━━━━━━━━━━ 49s 1s/step - loss: 36.6332 - sparse_categorical_accuracy: 0.2588



53/100 ━━━━━━━━━━━━━━━━━━━━ 48s 1s/step - loss: 36.6331 - sparse_categorical_accuracy: 0.2594



54/100 ━━━━━━━━━━━━━━━━━━━━ 47s 1s/step - loss: 36.6330 - sparse_categorical_accuracy: 0.2600



55/100 ━━━━━━━━━━━━━━━━━━━━ 46s 1s/step - loss: 36.6329 - sparse_categorical_accuracy: 0.2606



56/100 ━━━━━━━━━━━━━━━━━━━━ 45s 1s/step - loss: 36.6331 - sparse_categorical_accuracy: 0.2612



57/100 ━━━━━━━━━━━━━━━━━━━━ 44s 1s/step - loss: 36.6332 - sparse_categorical_accuracy: 0.2618



58/100 ━━━━━━━━━━━━━━━━━━━━ 43s 1s/step - loss: 36.6332 - sparse_categorical_accuracy: 0.2624



59/100 ━━━━━━━━━━━━━━━━━━━━ 42s 1s/step - loss: 36.6331 - sparse_categorical_accuracy: 0.2630



60/100 ━━━━━━━━━━━━━━━━━━━━ 41s 1s/step - loss: 36.6331 - sparse_categorical_accuracy: 0.2636



61/100 ━━━━━━━━━━━━━━━━━━━━ 40s 1s/step - loss: 36.6330 - sparse_categorical_accuracy: 0.2641



62/100 ━━━━━━━━━━━━━━━━━━━━ 39s 1s/step - loss: 36.6330 - sparse_categorical_accuracy: 0.2646



63/100 ━━━━━━━━━━━━━━━━━━━━ 38s 1s/step - loss: 36.6329 - sparse_categorical_accuracy: 0.2652



64/100 ━━━━━━━━━━━━━━━━━━━━ 37s 1s/step - loss: 36.6329 - sparse_categorical_accuracy: 0.2657



65/100 ━━━━━━━━━━━━━━━━━━━━ 36s 1s/step - loss: 36.6330 - sparse_categorical_accuracy: 0.2662



66/100 ━━━━━━━━━━━━━━━━━━━━ 35s 1s/step - loss: 36.6332 - sparse_categorical_accuracy: 0.2667



67/100 ━━━━━━━━━━━━━━━━━━━━ 34s 1s/step - loss: 36.6336 - sparse_categorical_accuracy: 0.2671



68/100 ━━━━━━━━━━━━━━━━━━━━ 33s 1s/step - loss: 36.6340 - sparse_categorical_accuracy: 0.2674



69/100 ━━━━━━━━━━━━━━━━━━━━ 32s 1s/step - loss: 36.6346 - sparse_categorical_accuracy: 0.2678



70/100 ━━━━━━━━━━━━━━━━━━━━ 30s 1s/step - loss: 36.6352 - sparse_categorical_accuracy: 0.2682



71/100 ━━━━━━━━━━━━━━━━━━━━ 29s 1s/step - loss: 36.6359 - sparse_categorical_accuracy: 0.2685



72/100 ━━━━━━━━━━━━━━━━━━━━ 28s 1s/step - loss: 36.6365 - sparse_categorical_accuracy: 0.2688



73/100 ━━━━━━━━━━━━━━━━━━━━ 27s 1s/step - loss: 36.6371 - sparse_categorical_accuracy: 0.2690



74/100 ━━━━━━━━━━━━━━━━━━━━ 26s 1s/step - loss: 36.6377 - sparse_categorical_accuracy: 0.2693



75/100 ━━━━━━━━━━━━━━━━━━━━ 25s 1s/step - loss: 36.6384 - sparse_categorical_accuracy: 0.2696



76/100 ━━━━━━━━━━━━━━━━━━━━ 24s 1s/step - loss: 36.6389 - sparse_categorical_accuracy: 0.2698



77/100 ━━━━━━━━━━━━━━━━━━━━ 23s 1s/step - loss: 36.6394 - sparse_categorical_accuracy: 0.2700



78/100 ━━━━━━━━━━━━━━━━━━━━ 22s 1s/step - loss: 36.6398 - sparse_categorical_accuracy: 0.2703



79/100 ━━━━━━━━━━━━━━━━━━━━ 21s 1s/step - loss: 36.6401 - sparse_categorical_accuracy: 0.2706



80/100 ━━━━━━━━━━━━━━━━━━━━ 20s 1s/step - loss: 36.6406 - sparse_categorical_accuracy: 0.2708



81/100 ━━━━━━━━━━━━━━━━━━━━ 19s 1s/step - loss: 36.6411 - sparse_categorical_accuracy: 0.2710



82/100 ━━━━━━━━━━━━━━━━━━━━ 18s 1s/step - loss: 36.6415 - sparse_categorical_accuracy: 0.2712



83/100 ━━━━━━━━━━━━━━━━━━━━ 17s 1s/step - loss: 36.6419 - sparse_categorical_accuracy: 0.2714



84/100 ━━━━━━━━━━━━━━━━━━━━ 16s 1s/step - loss: 36.6423 - sparse_categorical_accuracy: 0.2716



85/100 ━━━━━━━━━━━━━━━━━━━━ 15s 1s/step - loss: 36.6426 - sparse_categorical_accuracy: 0.2718



86/100 ━━━━━━━━━━━━━━━━━━━━ 14s 1s/step - loss: 36.6429 - sparse_categorical_accuracy: 0.2720



87/100 ━━━━━━━━━━━━━━━━━━━━ 13s 1s/step - loss: 36.6431 - sparse_categorical_accuracy: 0.2723



88/100 ━━━━━━━━━━━━━━━━━━━━ 12s 1s/step - loss: 36.6432 - sparse_categorical_accuracy: 0.2725



89/100 ━━━━━━━━━━━━━━━━━━━━ 11s 1s/step - loss: 36.6433 - sparse_categorical_accuracy: 0.2727



90/100 ━━━━━━━━━━━━━━━━━━━━ 10s 1s/step - loss: 36.6434 - sparse_categorical_accuracy: 0.2730



91/100 ━━━━━━━━━━━━━━━━━━━━ 9s 1s/step - loss: 36.6435 - sparse_categorical_accuracy: 0.2732



92/100 ━━━━━━━━━━━━━━━━━━━━ 8s 1s/step - loss: 36.6435 - sparse_categorical_accuracy: 0.2734



93/100 ━━━━━━━━━━━━━━━━━━━━ 7s 1s/step - loss: 36.6434 - sparse_categorical_accuracy: 0.2736



94/100 ━━━━━━━━━━━━━━━━━━━━ 6s 1s/step - loss: 36.6432 - sparse_categorical_accuracy: 0.2738



95/100 ━━━━━━━━━━━━━━━━━━━━ 5s 1s/step - loss: 36.6430 - sparse_categorical_accuracy: 0.2740



96/100 ━━━━━━━━━━━━━━━━━━━━ 4s 1s/step - loss: 36.6427 - sparse_categorical_accuracy: 0.2742



97/100 ━━━━━━━━━━━━━━━━━━━━ 3s 1s/step - loss: 36.6424 - sparse_categorical_accuracy: 0.2744



98/100 ━━━━━━━━━━━━━━━━━━━━ 2s 1s/step - loss: 36.6421 - sparse_categorical_accuracy: 0.2746



99/100 ━━━━━━━━━━━━━━━━━━━━ 1s 1s/step - loss: 36.6418 - sparse_categorical_accuracy: 0.2748



100/100 ━━━━━━━━━━━━━━━━━━━━ 0s 1s/step - loss: 36.6402 - sparse_categorical_accuracy: 0.2749



100/100 ━━━━━━━━━━━━━━━━━━━━ 108s 1s/step - loss: 36.6386 - sparse_categorical_accuracy: 0.2751 - val_loss: 20961250112658389073920.0000 - val_sparse_categorical_accuracy: 0.3191

Epoch 3/20

1/100 ━━━━━━━━━━━━━━━━━━━━ 57:33 35s/step - loss: 35.9745 - sparse_categorical_accuracy: 0.3438



2/100 ━━━━━━━━━━━━━━━━━━━━ 1:39 1s/step - loss: 36.1432 - sparse_categorical_accuracy: 0.3359



3/100 ━━━━━━━━━━━━━━━━━━━━ 1:38 1s/step - loss: 36.1628 - sparse_categorical_accuracy: 0.3420



4/100 ━━━━━━━━━━━━━━━━━━━━ 1:39 1s/step - loss: 36.1912 - sparse_categorical_accuracy: 0.3424



5/100 ━━━━━━━━━━━━━━━━━━━━ 1:38 1s/step - loss: 36.2222 - sparse_categorical_accuracy: 0.3390



6/100 ━━━━━━━━━━━━━━━━━━━━ 1:37 1s/step - loss: 36.2318 - sparse_categorical_accuracy: 0.3345



7/100 ━━━━━━━━━━━━━━━━━━━━ 1:36 1s/step - loss: 36.2484 - sparse_categorical_accuracy: 0.3301



8/100 ━━━━━━━━━━━━━━━━━━━━ 1:35 1s/step - loss: 36.2639 - sparse_categorical_accuracy: 0.3284



9/100 ━━━━━━━━━━━━━━━━━━━━ 1:33 1s/step - loss: 36.2697 - sparse_categorical_accuracy: 0.3282



10/100 ━━━━━━━━━━━━━━━━━━━━ 1:33 1s/step - loss: 36.2697 - sparse_categorical_accuracy: 0.3304



11/100 ━━━━━━━━━━━━━━━━━━━━ 1:32 1s/step - loss: 36.2697 - sparse_categorical_accuracy: 0.3316



12/100 ━━━━━━━━━━━━━━━━━━━━ 1:30 1s/step - loss: 36.2714 - sparse_categorical_accuracy: 0.3319



13/100 ━━━━━━━━━━━━━━━━━━━━ 1:29 1s/step - loss: 36.2731 - sparse_categorical_accuracy: 0.3319



14/100 ━━━━━━━━━━━━━━━━━━━━ 1:28 1s/step - loss: 36.2716 - sparse_categorical_accuracy: 0.3325



15/100 ━━━━━━━━━━━━━━━━━━━━ 1:27 1s/step - loss: 36.2714 - sparse_categorical_accuracy: 0.3327



16/100 ━━━━━━━━━━━━━━━━━━━━ 1:26 1s/step - loss: 36.2703 - sparse_categorical_accuracy: 0.3325



17/100 ━━━━━━━━━━━━━━━━━━━━ 1:25 1s/step - loss: 36.2685 - sparse_categorical_accuracy: 0.3322



18/100 ━━━━━━━━━━━━━━━━━━━━ 1:24 1s/step - loss: 36.2665 - sparse_categorical_accuracy: 0.3322



19/100 ━━━━━━━━━━━━━━━━━━━━ 1:23 1s/step - loss: 36.2672 - sparse_categorical_accuracy: 0.3320



20/100 ━━━━━━━━━━━━━━━━━━━━ 1:22 1s/step - loss: 36.2689 - sparse_categorical_accuracy: 0.3316



21/100 ━━━━━━━━━━━━━━━━━━━━ 1:22 1s/step - loss: 36.2700 - sparse_categorical_accuracy: 0.3311



22/100 ━━━━━━━━━━━━━━━━━━━━ 1:21 1s/step - loss: 36.2712 - sparse_categorical_accuracy: 0.3307



23/100 ━━━━━━━━━━━━━━━━━━━━ 1:20 1s/step - loss: 36.2732 - sparse_categorical_accuracy: 0.3301



24/100 ━━━━━━━━━━━━━━━━━━━━ 1:19 1s/step - loss: 36.2753 - sparse_categorical_accuracy: 0.3293



25/100 ━━━━━━━━━━━━━━━━━━━━ 1:18 1s/step - loss: 36.2772 - sparse_categorical_accuracy: 0.3284



26/100 ━━━━━━━━━━━━━━━━━━━━ 1:16 1s/step - loss: 36.2789 - sparse_categorical_accuracy: 0.3275



27/100 ━━━━━━━━━━━━━━━━━━━━ 1:15 1s/step - loss: 36.2803 - sparse_categorical_accuracy: 0.3266



28/100 ━━━━━━━━━━━━━━━━━━━━ 1:14 1s/step - loss: 36.2832 - sparse_categorical_accuracy: 0.3258



29/100 ━━━━━━━━━━━━━━━━━━━━ 1:13 1s/step - loss: 36.2886 - sparse_categorical_accuracy: 0.3251



30/100 ━━━━━━━━━━━━━━━━━━━━ 1:12 1s/step - loss: 36.2944 - sparse_categorical_accuracy: 0.3245



31/100 ━━━━━━━━━━━━━━━━━━━━ 1:11 1s/step - loss: 36.3001 - sparse_categorical_accuracy: 0.3237



32/100 ━━━━━━━━━━━━━━━━━━━━ 1:10 1s/step - loss: 36.3053 - sparse_categorical_accuracy: 0.3231



33/100 ━━━━━━━━━━━━━━━━━━━━ 1:09 1s/step - loss: 36.3102 - sparse_categorical_accuracy: 0.3226



34/100 ━━━━━━━━━━━━━━━━━━━━ 1:08 1s/step - loss: 36.3150 - sparse_categorical_accuracy: 0.3221



35/100 ━━━━━━━━━━━━━━━━━━━━ 1:07 1s/step - loss: 36.3196 - sparse_categorical_accuracy: 0.3216



36/100 ━━━━━━━━━━━━━━━━━━━━ 1:06 1s/step - loss: 36.3239 - sparse_categorical_accuracy: 0.3212



37/100 ━━━━━━━━━━━━━━━━━━━━ 1:05 1s/step - loss: 36.3281 - sparse_categorical_accuracy: 0.3209



38/100 ━━━━━━━━━━━━━━━━━━━━ 1:04 1s/step - loss: 36.3322 - sparse_categorical_accuracy: 0.3204



39/100 ━━━━━━━━━━━━━━━━━━━━ 1:03 1s/step - loss: 36.3358 - sparse_categorical_accuracy: 0.3201



40/100 ━━━━━━━━━━━━━━━━━━━━ 1:02 1s/step - loss: 36.3392 - sparse_categorical_accuracy: 0.3199



41/100 ━━━━━━━━━━━━━━━━━━━━ 1:01 1s/step - loss: 36.3423 - sparse_categorical_accuracy: 0.3196



42/100 ━━━━━━━━━━━━━━━━━━━━ 1:00 1s/step - loss: 36.3453 - sparse_categorical_accuracy: 0.3195



43/100 ━━━━━━━━━━━━━━━━━━━━ 58s 1s/step - loss: 36.3482 - sparse_categorical_accuracy: 0.3193



44/100 ━━━━━━━━━━━━━━━━━━━━ 57s 1s/step - loss: 36.3509 - sparse_categorical_accuracy: 0.3193



45/100 ━━━━━━━━━━━━━━━━━━━━ 56s 1s/step - loss: 36.3534 - sparse_categorical_accuracy: 0.3192



46/100 ━━━━━━━━━━━━━━━━━━━━ 55s 1s/step - loss: 36.3557 - sparse_categorical_accuracy: 0.3191



47/100 ━━━━━━━━━━━━━━━━━━━━ 54s 1s/step - loss: 36.3577 - sparse_categorical_accuracy: 0.3191



48/100 ━━━━━━━━━━━━━━━━━━━━ 53s 1s/step - loss: 36.3597 - sparse_categorical_accuracy: 0.3190



49/100 ━━━━━━━━━━━━━━━━━━━━ 52s 1s/step - loss: 36.3617 - sparse_categorical_accuracy: 0.3188



50/100 ━━━━━━━━━━━━━━━━━━━━ 51s 1s/step - loss: 36.3636 - sparse_categorical_accuracy: 0.3186



51/100 ━━━━━━━━━━━━━━━━━━━━ 50s 1s/step - loss: 36.3654 - sparse_categorical_accuracy: 0.3183



52/100 ━━━━━━━━━━━━━━━━━━━━ 49s 1s/step - loss: 36.3671 - sparse_categorical_accuracy: 0.3181



53/100 ━━━━━━━━━━━━━━━━━━━━ 48s 1s/step - loss: 36.3687 - sparse_categorical_accuracy: 0.3179



54/100 ━━━━━━━━━━━━━━━━━━━━ 47s 1s/step - loss: 36.3705 - sparse_categorical_accuracy: 0.3177



55/100 ━━━━━━━━━━━━━━━━━━━━ 46s 1s/step - loss: 36.3723 - sparse_categorical_accuracy: 0.3175



56/100 ━━━━━━━━━━━━━━━━━━━━ 45s 1s/step - loss: 36.3744 - sparse_categorical_accuracy: 0.3173



57/100 ━━━━━━━━━━━━━━━━━━━━ 44s 1s/step - loss: 36.3764 - sparse_categorical_accuracy: 0.3171



58/100 ━━━━━━━━━━━━━━━━━━━━ 43s 1s/step - loss: 36.3784 - sparse_categorical_accuracy: 0.3170



59/100 ━━━━━━━━━━━━━━━━━━━━ 42s 1s/step - loss: 36.3805 - sparse_categorical_accuracy: 0.3168



60/100 ━━━━━━━━━━━━━━━━━━━━ 41s 1s/step - loss: 36.3824 - sparse_categorical_accuracy: 0.3167



61/100 ━━━━━━━━━━━━━━━━━━━━ 40s 1s/step - loss: 36.3843 - sparse_categorical_accuracy: 0.3166



62/100 ━━━━━━━━━━━━━━━━━━━━ 39s 1s/step - loss: 36.3862 - sparse_categorical_accuracy: 0.3165



63/100 ━━━━━━━━━━━━━━━━━━━━ 38s 1s/step - loss: 36.3879 - sparse_categorical_accuracy: 0.3164



64/100 ━━━━━━━━━━━━━━━━━━━━ 37s 1s/step - loss: 36.3893 - sparse_categorical_accuracy: 0.3163



65/100 ━━━━━━━━━━━━━━━━━━━━ 36s 1s/step - loss: 36.3907 - sparse_categorical_accuracy: 0.3163



66/100 ━━━━━━━━━━━━━━━━━━━━ 35s 1s/step - loss: 36.3921 - sparse_categorical_accuracy: 0.3162



67/100 ━━━━━━━━━━━━━━━━━━━━ 34s 1s/step - loss: 36.3933 - sparse_categorical_accuracy: 0.3162



68/100 ━━━━━━━━━━━━━━━━━━━━ 33s 1s/step - loss: 36.3944 - sparse_categorical_accuracy: 0.3161



69/100 ━━━━━━━━━━━━━━━━━━━━ 32s 1s/step - loss: 36.3953 - sparse_categorical_accuracy: 0.3161



70/100 ━━━━━━━━━━━━━━━━━━━━ 31s 1s/step - loss: 36.3962 - sparse_categorical_accuracy: 0.3160



71/100 ━━━━━━━━━━━━━━━━━━━━ 30s 1s/step - loss: 36.3971 - sparse_categorical_accuracy: 0.3160



72/100 ━━━━━━━━━━━━━━━━━━━━ 29s 1s/step - loss: 36.3978 - sparse_categorical_accuracy: 0.3159



73/100 ━━━━━━━━━━━━━━━━━━━━ 27s 1s/step - loss: 36.3986 - sparse_categorical_accuracy: 0.3159



74/100 ━━━━━━━━━━━━━━━━━━━━ 26s 1s/step - loss: 36.3994 - sparse_categorical_accuracy: 0.3158



75/100 ━━━━━━━━━━━━━━━━━━━━ 25s 1s/step - loss: 36.4003 - sparse_categorical_accuracy: 0.3157



76/100 ━━━━━━━━━━━━━━━━━━━━ 24s 1s/step - loss: 36.4011 - sparse_categorical_accuracy: 0.3157



77/100 ━━━━━━━━━━━━━━━━━━━━ 23s 1s/step - loss: 36.4019 - sparse_categorical_accuracy: 0.3156



78/100 ━━━━━━━━━━━━━━━━━━━━ 22s 1s/step - loss: 36.4026 - sparse_categorical_accuracy: 0.3156



79/100 ━━━━━━━━━━━━━━━━━━━━ 21s 1s/step - loss: 36.4032 - sparse_categorical_accuracy: 0.3155



80/100 ━━━━━━━━━━━━━━━━━━━━ 20s 1s/step - loss: 36.4038 - sparse_categorical_accuracy: 0.3155



81/100 ━━━━━━━━━━━━━━━━━━━━ 19s 1s/step - loss: 36.4045 - sparse_categorical_accuracy: 0.3155



82/100 ━━━━━━━━━━━━━━━━━━━━ 18s 1s/step - loss: 36.4051 - sparse_categorical_accuracy: 0.3154



83/100 ━━━━━━━━━━━━━━━━━━━━ 17s 1s/step - loss: 36.4058 - sparse_categorical_accuracy: 0.3154



84/100 ━━━━━━━━━━━━━━━━━━━━ 16s 1s/step - loss: 36.4066 - sparse_categorical_accuracy: 0.3154



85/100 ━━━━━━━━━━━━━━━━━━━━ 15s 1s/step - loss: 36.4072 - sparse_categorical_accuracy: 0.3154



86/100 ━━━━━━━━━━━━━━━━━━━━ 14s 1s/step - loss: 36.4079 - sparse_categorical_accuracy: 0.3154



87/100 ━━━━━━━━━━━━━━━━━━━━ 13s 1s/step - loss: 36.4085 - sparse_categorical_accuracy: 0.3154



88/100 ━━━━━━━━━━━━━━━━━━━━ 12s 1s/step - loss: 36.4091 - sparse_categorical_accuracy: 0.3154



89/100 ━━━━━━━━━━━━━━━━━━━━ 11s 1s/step - loss: 36.4097 - sparse_categorical_accuracy: 0.3154



90/100 ━━━━━━━━━━━━━━━━━━━━ 10s 1s/step - loss: 36.4104 - sparse_categorical_accuracy: 0.3154



91/100 ━━━━━━━━━━━━━━━━━━━━ 9s 1s/step - loss: 36.4110 - sparse_categorical_accuracy: 0.3154



92/100 ━━━━━━━━━━━━━━━━━━━━ 8s 1s/step - loss: 36.4117 - sparse_categorical_accuracy: 0.3153



93/100 ━━━━━━━━━━━━━━━━━━━━ 7s 1s/step - loss: 36.4123 - sparse_categorical_accuracy: 0.3153



94/100 ━━━━━━━━━━━━━━━━━━━━ 6s 1s/step - loss: 36.4129 - sparse_categorical_accuracy: 0.3152



95/100 ━━━━━━━━━━━━━━━━━━━━ 5s 1s/step - loss: 36.4135 - sparse_categorical_accuracy: 0.3152



96/100 ━━━━━━━━━━━━━━━━━━━━ 4s 1s/step - loss: 36.4142 - sparse_categorical_accuracy: 0.3152



97/100 ━━━━━━━━━━━━━━━━━━━━ 3s 1s/step - loss: 36.4150 - sparse_categorical_accuracy: 0.3151



98/100 ━━━━━━━━━━━━━━━━━━━━ 2s 1s/step - loss: 36.4157 - sparse_categorical_accuracy: 0.3151



99/100 ━━━━━━━━━━━━━━━━━━━━ 1s 1s/step - loss: 36.4164 - sparse_categorical_accuracy: 0.3151



100/100 ━━━━━━━━━━━━━━━━━━━━ 0s 1s/step - loss: 36.4156 - sparse_categorical_accuracy: 0.3150



100/100 ━━━━━━━━━━━━━━━━━━━━ 142s 1s/step - loss: 36.4148 - sparse_categorical_accuracy: 0.3150 - val_loss: 14661139300352.0000 - val_sparse_categorical_accuracy: 0.2240

Epoch 4/20

1/100 ━━━━━━━━━━━━━━━━━━━━ 1:40 1s/step - loss: 36.7380 - sparse_categorical_accuracy: 0.5312



2/100 ━━━━━━━━━━━━━━━━━━━━ 1:40 1s/step - loss: 36.7969 - sparse_categorical_accuracy: 0.4844



3/100 ━━━━━━━━━━━━━━━━━━━━ 1:38 1s/step - loss: 36.7860 - sparse_categorical_accuracy: 0.4653



4/100 ━━━━━━━━━━━━━━━━━━━━ 1:36 1s/step - loss: 36.7852 - sparse_categorical_accuracy: 0.4447



5/100 ━━━━━━━━━━━━━━━━━━━━ 1:35 1s/step - loss: 36.7560 - sparse_categorical_accuracy: 0.4370



6/100 ━━━━━━━━━━━━━━━━━━━━ 1:35 1s/step - loss: 36.7412 - sparse_categorical_accuracy: 0.4293



7/100 ━━━━━━━━━━━━━━━━━━━━ 1:34 1s/step - loss: 36.7300 - sparse_categorical_accuracy: 0.4221



8/100 ━━━━━━━━━━━━━━━━━━━━ 1:33 1s/step - loss: 36.7233 - sparse_categorical_accuracy: 0.4148



9/100 ━━━━━━━━━━━━━━━━━━━━ 1:32 1s/step - loss: 36.7190 - sparse_categorical_accuracy: 0.4073



10/100 ━━━━━━━━━━━━━━━━━━━━ 1:31 1s/step - loss: 36.7201 - sparse_categorical_accuracy: 0.3990



11/100 ━━━━━━━━━━━━━━━━━━━━ 1:30 1s/step - loss: 36.7176 - sparse_categorical_accuracy: 0.3925



12/100 ━━━━━━━━━━━━━━━━━━━━ 1:30 1s/step - loss: 36.7097 - sparse_categorical_accuracy: 0.3882



13/100 ━━━━━━━━━━━━━━━━━━━━ 1:29 1s/step - loss: 36.7017 - sparse_categorical_accuracy: 0.3850



14/100 ━━━━━━━━━━━━━━━━━━━━ 1:28 1s/step - loss: 36.6936 - sparse_categorical_accuracy: 0.3819



15/100 ━━━━━━━━━━━━━━━━━━━━ 1:27 1s/step - loss: 36.6858 - sparse_categorical_accuracy: 0.3786



16/100 ━━━━━━━━━━━━━━━━━━━━ 1:26 1s/step - loss: 36.6785 - sparse_categorical_accuracy: 0.3752



17/100 ━━━━━━━━━━━━━━━━━━━━ 1:26 1s/step - loss: 36.6711 - sparse_categorical_accuracy: 0.3723



18/100 ━━━━━━━━━━━━━━━━━━━━ 1:24 1s/step - loss: 36.6637 - sparse_categorical_accuracy: 0.3695



19/100 ━━━━━━━━━━━━━━━━━━━━ 1:23 1s/step - loss: 36.6692 - sparse_categorical_accuracy: 0.3668



20/100 ━━━━━━━━━━━━━━━━━━━━ 1:22 1s/step - loss: 36.6728 - sparse_categorical_accuracy: 0.3647



21/100 ━━━━━━━━━━━━━━━━━━━━ 1:21 1s/step - loss: 36.6748 - sparse_categorical_accuracy: 0.3631



22/100 ━━━━━━━━━━━━━━━━━━━━ 1:20 1s/step - loss: 36.6766 - sparse_categorical_accuracy: 0.3616



23/100 ━━━━━━━━━━━━━━━━━━━━ 1:19 1s/step - loss: 36.6783 - sparse_categorical_accuracy: 0.3601



24/100 ━━━━━━━━━━━━━━━━━━━━ 1:18 1s/step - loss: 36.6799 - sparse_categorical_accuracy: 0.3588



25/100 ━━━━━━━━━━━━━━━━━━━━ 1:17 1s/step - loss: 36.6818 - sparse_categorical_accuracy: 0.3576



26/100 ━━━━━━━━━━━━━━━━━━━━ 1:16 1s/step - loss: 36.6836 - sparse_categorical_accuracy: 0.3565



27/100 ━━━━━━━━━━━━━━━━━━━━ 1:15 1s/step - loss: 36.6852 - sparse_categorical_accuracy: 0.3555



28/100 ━━━━━━━━━━━━━━━━━━━━ 1:14 1s/step - loss: 36.6879 - sparse_categorical_accuracy: 0.3545



29/100 ━━━━━━━━━━━━━━━━━━━━ 1:13 1s/step - loss: 36.6908 - sparse_categorical_accuracy: 0.3535



30/100 ━━━━━━━━━━━━━━━━━━━━ 1:12 1s/step - loss: 36.6939 - sparse_categorical_accuracy: 0.3525



31/100 ━━━━━━━━━━━━━━━━━━━━ 1:11 1s/step - loss: 36.6971 - sparse_categorical_accuracy: 0.3515



32/100 ━━━━━━━━━━━━━━━━━━━━ 1:10 1s/step - loss: 36.7002 - sparse_categorical_accuracy: 0.3506



33/100 ━━━━━━━━━━━━━━━━━━━━ 1:09 1s/step - loss: 36.7032 - sparse_categorical_accuracy: 0.3498



34/100 ━━━━━━━━━━━━━━━━━━━━ 1:08 1s/step - loss: 36.7059 - sparse_categorical_accuracy: 0.3492



35/100 ━━━━━━━━━━━━━━━━━━━━ 1:07 1s/step - loss: 36.7085 - sparse_categorical_accuracy: 0.3487



36/100 ━━━━━━━━━━━━━━━━━━━━ 1:06 1s/step - loss: 36.7110 - sparse_categorical_accuracy: 0.3481



37/100 ━━━━━━━━━━━━━━━━━━━━ 1:05 1s/step - loss: 36.7138 - sparse_categorical_accuracy: 0.3476



38/100 ━━━━━━━━━━━━━━━━━━━━ 1:04 1s/step - loss: 36.7167 - sparse_categorical_accuracy: 0.3472



39/100 ━━━━━━━━━━━━━━━━━━━━ 1:03 1s/step - loss: 36.7196 - sparse_categorical_accuracy: 0.3468



40/100 ━━━━━━━━━━━━━━━━━━━━ 1:02 1s/step - loss: 36.7225 - sparse_categorical_accuracy: 0.3463



41/100 ━━━━━━━━━━━━━━━━━━━━ 1:01 1s/step - loss: 36.7254 - sparse_categorical_accuracy: 0.3459



42/100 ━━━━━━━━━━━━━━━━━━━━ 1:00 1s/step - loss: 36.7283 - sparse_categorical_accuracy: 0.3455



43/100 ━━━━━━━━━━━━━━━━━━━━ 59s 1s/step - loss: 36.7311 - sparse_categorical_accuracy: 0.3450



44/100 ━━━━━━━━━━━━━━━━━━━━ 58s 1s/step - loss: 36.7339 - sparse_categorical_accuracy: 0.3446



45/100 ━━━━━━━━━━━━━━━━━━━━ 57s 1s/step - loss: 36.7364 - sparse_categorical_accuracy: 0.3441



46/100 ━━━━━━━━━━━━━━━━━━━━ 56s 1s/step - loss: 36.7387 - sparse_categorical_accuracy: 0.3437



47/100 ━━━━━━━━━━━━━━━━━━━━ 55s 1s/step - loss: 36.7410 - sparse_categorical_accuracy: 0.3432



48/100 ━━━━━━━━━━━━━━━━━━━━ 54s 1s/step - loss: 36.7433 - sparse_categorical_accuracy: 0.3428



49/100 ━━━━━━━━━━━━━━━━━━━━ 53s 1s/step - loss: 36.7454 - sparse_categorical_accuracy: 0.3424



50/100 ━━━━━━━━━━━━━━━━━━━━ 51s 1s/step - loss: 36.7475 - sparse_categorical_accuracy: 0.3420



51/100 ━━━━━━━━━━━━━━━━━━━━ 50s 1s/step - loss: 36.7496 - sparse_categorical_accuracy: 0.3416



52/100 ━━━━━━━━━━━━━━━━━━━━ 49s 1s/step - loss: 36.7515 - sparse_categorical_accuracy: 0.3413



53/100 ━━━━━━━━━━━━━━━━━━━━ 48s 1s/step - loss: 36.7532 - sparse_categorical_accuracy: 0.3410



54/100 ━━━━━━━━━━━━━━━━━━━━ 47s 1s/step - loss: 36.7547 - sparse_categorical_accuracy: 0.3407



55/100 ━━━━━━━━━━━━━━━━━━━━ 46s 1s/step - loss: 36.7561 - sparse_categorical_accuracy: 0.3404



56/100 ━━━━━━━━━━━━━━━━━━━━ 45s 1s/step - loss: 36.7575 - sparse_categorical_accuracy: 0.3401



57/100 ━━━━━━━━━━━━━━━━━━━━ 44s 1s/step - loss: 36.7590 - sparse_categorical_accuracy: 0.3398



58/100 ━━━━━━━━━━━━━━━━━━━━ 43s 1s/step - loss: 36.7603 - sparse_categorical_accuracy: 0.3396



59/100 ━━━━━━━━━━━━━━━━━━━━ 42s 1s/step - loss: 36.7617 - sparse_categorical_accuracy: 0.3393



60/100 ━━━━━━━━━━━━━━━━━━━━ 41s 1s/step - loss: 36.7629 - sparse_categorical_accuracy: 0.3390



61/100 ━━━━━━━━━━━━━━━━━━━━ 40s 1s/step - loss: 36.7641 - sparse_categorical_accuracy: 0.3387



62/100 ━━━━━━━━━━━━━━━━━━━━ 39s 1s/step - loss: 36.7653 - sparse_categorical_accuracy: 0.3383



63/100 ━━━━━━━━━━━━━━━━━━━━ 38s 1s/step - loss: 36.7665 - sparse_categorical_accuracy: 0.3380



64/100 ━━━━━━━━━━━━━━━━━━━━ 37s 1s/step - loss: 36.7676 - sparse_categorical_accuracy: 0.3376



65/100 ━━━━━━━━━━━━━━━━━━━━ 36s 1s/step - loss: 36.7687 - sparse_categorical_accuracy: 0.3373



66/100 ━━━━━━━━━━━━━━━━━━━━ 35s 1s/step - loss: 36.7696 - sparse_categorical_accuracy: 0.3369



67/100 ━━━━━━━━━━━━━━━━━━━━ 34s 1s/step - loss: 36.7705 - sparse_categorical_accuracy: 0.3366



68/100 ━━━━━━━━━━━━━━━━━━━━ 33s 1s/step - loss: 36.7713 - sparse_categorical_accuracy: 0.3363



69/100 ━━━━━━━━━━━━━━━━━━━━ 32s 1s/step - loss: 36.7720 - sparse_categorical_accuracy: 0.3360



70/100 ━━━━━━━━━━━━━━━━━━━━ 31s 1s/step - loss: 36.7725 - sparse_categorical_accuracy: 0.3357



71/100 ━━━━━━━━━━━━━━━━━━━━ 30s 1s/step - loss: 36.7730 - sparse_categorical_accuracy: 0.3354



72/100 ━━━━━━━━━━━━━━━━━━━━ 29s 1s/step - loss: 36.7734 - sparse_categorical_accuracy: 0.3352



73/100 ━━━━━━━━━━━━━━━━━━━━ 28s 1s/step - loss: 36.7736 - sparse_categorical_accuracy: 0.3350



74/100 ━━━━━━━━━━━━━━━━━━━━ 27s 1s/step - loss: 36.7739 - sparse_categorical_accuracy: 0.3348



75/100 ━━━━━━━━━━━━━━━━━━━━ 26s 1s/step - loss: 36.7742 - sparse_categorical_accuracy: 0.3345



76/100 ━━━━━━━━━━━━━━━━━━━━ 25s 1s/step - loss: 36.7744 - sparse_categorical_accuracy: 0.3343



77/100 ━━━━━━━━━━━━━━━━━━━━ 24s 1s/step - loss: 36.7746 - sparse_categorical_accuracy: 0.3340



78/100 ━━━━━━━━━━━━━━━━━━━━ 23s 1s/step - loss: 36.7747 - sparse_categorical_accuracy: 0.3338



79/100 ━━━━━━━━━━━━━━━━━━━━ 22s 1s/step - loss: 36.7747 - sparse_categorical_accuracy: 0.3335



80/100 ━━━━━━━━━━━━━━━━━━━━ 20s 1s/step - loss: 36.7747 - sparse_categorical_accuracy: 0.3333



81/100 ━━━━━━━━━━━━━━━━━━━━ 19s 1s/step - loss: 36.7746 - sparse_categorical_accuracy: 0.3330



82/100 ━━━━━━━━━━━━━━━━━━━━ 18s 1s/step - loss: 36.7745 - sparse_categorical_accuracy: 0.3328



83/100 ━━━━━━━━━━━━━━━━━━━━ 17s 1s/step - loss: 36.7743 - sparse_categorical_accuracy: 0.3325



84/100 ━━━━━━━━━━━━━━━━━━━━ 16s 1s/step - loss: 36.7741 - sparse_categorical_accuracy: 0.3322



85/100 ━━━━━━━━━━━━━━━━━━━━ 15s 1s/step - loss: 36.7739 - sparse_categorical_accuracy: 0.3320



86/100 ━━━━━━━━━━━━━━━━━━━━ 14s 1s/step - loss: 36.7737 - sparse_categorical_accuracy: 0.3317



87/100 ━━━