Создание и обучение нейронной сети из тернарных слоев для классификации изображений

26 декабря 2025

ID 273484

Этот раздел содержит инструкции по созданию нейронной сети для классификации изображений и ее обучению. Нейронная сеть создана с помощью тернарных слоев пакета ANN2SNN.

Чтобы создать и обучить нейронную сеть из тернарных слоев для классификации изображений:

  1. В директории вашего проекта создайте файл программы с расширением .py, в котором будет создана и обучена нейронная сеть.
  2. В файле программы импортируйте модули библиотек, необходимые для создания и исполнения нейронной сети.

    Если требуется, определите псевдонимы с помощью оператора 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

  3. Создайте нейронную сеть. Укажите функцию 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()

  4. Подготовьте данные для обучения.

    Пример подготовки данных 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,))

  5. Создайте Callback-функцию для сохранения нейронной сети.

    Пример Callback-функции:

    Python

    # Сохранение обученной нейронной сети в файл mnist.h5.

    model_chekpoint_callback = ModelCheckpoint(

    filepath="mnist.keras",

    monitor="accuracy",

    mode="max",

    save_best_only=True,

    )

  6. Обучите нейронную сеть.

    Пример обучения нейронной сети:

    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}%")

  7. Запустите программу.

Вам помогла эта статья?
Что нам нужно улучшить?
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!