Как я могу повысить точность и уменьшить loss моей нейронной сети Keras/Tensorflow при обучении на наборе данных MNIST с кириллическими буквами?
Когда я запускаю обучение модели, я получаю высокий loss и низкий val_accuracy
Я использую dataset Кириллицы MNIST
import tensorflow as tf
from keras import layers, models, optimizers
from keras.optimizers import SGD
# Загрузка датасета
train_ds = tf.keras.preprocessing.image_dataset_from_directory(
'C:/job/dataset/Cyrillic/',
validation_split=0.2,
subset="training",
seed=123,
image_size=(64, 64),
batch_size=32)
val_ds = tf.keras.preprocessing.image_dataset_from_directory(
'C:/job/dataset/Cyrillic/',
validation_split=0.2,
subset="validation",
seed=123,
image_size=(64, 64),
batch_size=32)
num_classes = 33
# Нормализация данных
normalization_layer = tf.keras.layers.experimental.preprocessing.Rescaling(1./255)
train_ds = train_ds.map(lambda x, y: (normalization_layer(x), y))
val_ds = val_ds.map(lambda x, y: (normalization_layer(x), y))
# Создание модели с несколькими слоями
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(64, 64, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Dropout(0.25))
model.add(layers.Flatten())
model.add(layers.Dense(1, activation='relu'))
model.add(layers.Dense(33, activation='softmax'))
# Компиляция модели
sgd = optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
# model.compile(loss = "categorical_crossentropy", optimizer = opt)
model.compile(loss='sparse_categorical_crossentropy',
optimizer=sgd,
metrics=['accuracy'])
# Обучение модели
history = model.fit(train_ds, validation_data=val_ds, epochs=30)
# Сохранение модели
model.save("model/model.h5")
Epoch 1/30 362/362 [==============================] - 49s 134ms/step - loss: 3.4878 - accuracy: 0.0373 - val_loss: 3.4824 - val_accuracy: 0.0353
Epoch 2/30 362/362 [==============================] - 45s 125ms/step - loss: 3.4806 - accuracy: 0.0377 - val_loss: 3.4803 - val_accuracy: 0.0353
Я пробовал разные оптимизаторы, ничего не помогает Я хочу понять, что я делаю не так?