Запуск инференса нейронной сети из тернарных слоев для классификации изображений
Этот раздел содержит инструкции по запуску инференса нейронной сети для классификации изображений на нейроморфном процессоре Алтай-2. Нейронную сеть требуется предварительно создать с помощью тернарных слоев пакета ANN2SNN, обучить и разместить для исполнения на нейроморфном процессоре.
Чтобы запустить инференс нейронной сети из тернарных слоев для классификации изображений:
- Подключите объединительную плату с нейроморфным процессором Алтай-2 к компьютеру с помощью интерфейсов
PCI-EилиUSB. - В директории вашего проекта создайте файл программы с расширением
.py, в котором будет реализован инференс нейронной сети. - В файле программы импортируйте модули библиотек, необходимые для инференса нейронной сети.
Если требуется, определите псевдонимы с помощью оператора
as.Пример подключения объектов для инференса нейронной сети:
Python
from knp_ann2snn import Altai
import tensorflow as tf
import numpy as np
from tqdm import tqdm
- Создайте функцию для подсчета точности модели.
Пример функции для подсчета точности модели:
Python
def calculate_accuracy(array1,array2):
correct_predictions = sum(a == b for a, b in zip(array1,array2))
accuracy = correct_predictions / len(array1)
return accuracy
- Подготовьте данные для инференса.
Пример подготовки данных MNIST для инференса:
Python
# Загрузка модели.
altai = Altai()
# Укажите путь к конфигурационному файлу для загрузки на нейроморфный процессор
# и компонент для исполнения нейронной сети:
# hw – для инференса нейронной сети на аппаратном процессоре Алтай-2
# gm – для инференса нейронной сети на программном эмуляторе.
# Если функция активации на последнем слое - softmax, необходимо ее указать.
altai.build("mnist.json", "gm", activation="softmax")
# Загрузка данных MNIST для инференса.
(_, _), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
# Нормализация входных данных.
x_test = x_test / 255
# Приведение входных данных в бинарный вид.
x_test[x_test > 0.5] = 1
x_test[x_test <= 0.5] = 0
x_test = x_test.reshape(x_test.shape + (1,))
- Запустите инференс.
Пример инференса:
Python
pred = []
for i in tqdm(range(x_test.shape[0])):
# Преобразование входного вектора в спайки.
altai.prepare_spikes(x_test[i])
# Запуск генерации сигнала тик.
altai.start_ticks(2)
# Получение спайков от нейронной сети.
spikes_idx = altai.get_spikes()
# Берем -1 индекс из-за того, что интересует результат последнего тика.
predicted_class = spikes_idx[-1]
pred.append(predicted_class)
# Оценка точности нейронной сети.
print("Accuracy: ", calculate_accuracy(y_test, pred)* 100,"%")
- Запустите программу.