Создание и обучение нейронной сети из тернарных слоев для классификации изображений
Этот раздел содержит инструкции по созданию нейронной сети для классификации изображений и ее обучению. Нейронная сеть создана с помощью тернарных слоев пакета ANN2SNN.
Чтобы создать и обучить нейронную сеть из тернарных слоев для классификации изображений:
- В директории вашего проекта создайте файл программы с расширением
.py, в котором будет создана и обучена нейронная сеть. - В файле программы импортируйте модули библиотек, необходимые для создания и исполнения нейронной сети.
Если требуется, определите псевдонимы с помощью оператора
as.Пример подключения объектов для создания и исполнения сверточной нейронной сети:
Python
from knp_ann2snn.altainn import TernaryConv2D, TernaryDense
from knp_ann2snn.altainn import heaviside
from knp_ann2snn.altainn import Clip
from tensorflow import keras
from keras.models import Sequential, load_model
from keras.layers import Flatten
from keras.callbacks import ModelCheckpoint
import tensorflow as tf
- Создайте нейронную сеть. Укажите функцию
softmaxв качестве функции активации для выходного слоя.Пример создания нейронной сети с тремя сверточными слоями:
Python
model = Sequential(
[
TernaryConv2D(1, 2, strides=2, activation=heaviside, input_shape=(28, 28, 1)),
Flatten(),
TernaryDense(10, activation="softmax")
]
)
model.compile(optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"])
model.summary()
- Подготовьте данные для обучения.
Пример подготовки данных MNIST для обучения:
Python
# Загрузка данных MNIST для обучения.
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
# Кодирование целевых меток.
y_train = tf.keras.utils.to_categorical(y_train)
y_test = tf.keras.utils.to_categorical(y_test)
# Нормализация входных данных.
x_train = x_train / 255
x_test = x_test / 255
# Приведение входных данных в бинарный вид.
x_train[x_train > 0.5] = 1
x_train[x_train <= 0.5] = 0
x_test[x_test > 0.5] = 1
x_test[x_test <= 0.5] = 0
# Замена размерности данных (28, 28) на (28, 28, 1) для правильной работы сверточных слоев.
x_train = x_train.reshape(x_train.shape + (1,))
x_test = x_test.reshape(x_test.shape + (1,))
- Создайте Callback-функцию для сохранения нейронной сети.
Пример Callback-функции:
Python
# Сохранение обученной нейронной сети в файл mnist.h5.
model_chekpoint_callback = ModelCheckpoint(
filepath="mnist.keras",
monitor="accuracy",
mode="max",
save_best_only=True,
)
- Обучите нейронную сеть.
Пример обучения нейронной сети:
Python
# Запуск обучения на тренировочных данных.
model.fit(x_train, y_train, epochs = 15, verbose = 1, callbacks=[model_chekpoint_callback])
# Загрузка обученной модели.
model = load_model(
"mnist.keras",
custom_objects = {
"heaviside_mod": heaviside,
"TernaryDense": TernaryDense,
"TernaryConv2D": TernaryConv2D,
"Clip": Clip
}
)
# Оценка точности нейронной сети.
print(f"Точность модели: {model.evaluate(x_test, y_test, verbose = 1)[1]*100:.2f}%")
- Запустите программу.