Запуск инференса регрессионной модели
Этот раздел содержит инструкции по запуску инференса регрессионной модели с кодирующим и декодирующим блоком. Модель требуется предварительно создать, обучить и разместить для исполнения на нейроморфном процессоре.
Чтобы запустить инференс регрессионной модели:
- Подключите объединительную плату с нейроморфным процессором Алтай-2 к компьютеру с помощью интерфейсов
PCI-EилиUSB. - В директории вашего проекта создайте файл программы с расширением
.py, в котором будет реализован инференс модели. - В файле программы импортируйте модули библиотек, необходимые для инференса модели
Если требуется, определите псевдонимы с помощью оператора
as.Пример подключения объектов для инференса модели:
Python
from knp_ann2snn.altainn import TernaryDense
from knp_ann2snn.altainn import heaviside
from knp_ann2snn.altainn import Clip
from knp_ann2snn.python_altai import Altai
from keras.models import load_model
import matplotlib.pyplot as plt
from tqdm import tqdm
import numpy as np
- Создайте синусоиду и подготовьте данные для инференса.
Пример подготовки данных:
Python
# Определение количества элементов в наборе данных.
N = 4000
# Определение индекса, до которого элементы набора данных будут использования для обучения.
train_idx = 3000
# Определение индекса, до которого элементы, начиная с индекса train_idx, образуют тестовые данные.
test_idx = 4000
# Определение количества элементов в пакете (англ. batch).
elements_in_batch = 10
# Определение размерности выхода кодирующего блока.
encoder_output_shape = 25
# Определение размерности выхода нейронной сети.
snn_output_shape = 35
# Определение размерности выхода декодирующего блока.
decoder_output_shape = 1
# Создание синусоиды.
x = np.arange(N)
arr = np.sin(x)
# Формирование тестовых данных на основе elements_in_batch значений.
test_range = range(train_idx, test_idx - elements_in_batch - 1)
x_test = np.array([arr[i : i + elements_in_batch] for i in test_range])
y_test = np.array([[arr[i + elements_in_batch + 1]] for i in test_range])
- Загрузите модель, кодирующий и декодирующий блок.
Пример загрузки модели, кодирующего и декодирующего блока:
Python
altai = Altai()
# Укажите путь к конфигурационному файлу для загрузки на нейроморфный процессор
# и компонент для исполнения нейронной сети:
# hw – для инференса нейронной сети на аппаратном процессоре Алтай-2
# gm – для инференса нейронной сети на программном эмуляторе.
altai.build("sin.json","gm")
encoder = load_model(
"encoder_sin.keras",
custom_objects={
"heaviside_mod": heaviside
}
)
snn_model = load_model(
"snn_sin.keras",
custom_objects={
"TernaryDense": TernaryDense,
"heaviside_mod": heaviside,
"Clip": Clip
}
)
decoder = load_model("decoder_sin.keras")
- Запустите инференс.
Пример запуска инференса:
Python
predict = np.zeros(len(x_test))
# Запуск цикла предсказаний.
for i in tqdm(range(len(x_test))):
# Предсказание кодирующего блока.
encoded = encoder.predict_on_batch(x_test[i:i+1])
# Предсказание нейронной сети.
altai.prepare_spikes(encoded)
altai.start_ticks(1)
spikes_idx = altai.get_spikes()
spikes_idx = spikes_idx[spikes_idx!=-2147483647]
spikes = np.zeros(snn_output_shape)
spikes[spikes_idx] = 1
# Предсказание декодирующего блока.
decoded = decoder.predict_on_batch(spikes.reshape(1,-1))
# Обновление массива предсказаний.
predict[i] = decoded
predict = predict.reshape(len(predict))
y_test = y_test.reshape(len(y_test))
- Оцените результаты инференса. Для этого вы можете сравнить значения синусоиды с предсказаниями модели на графике.
Пример построения графика для оценки результатов инференса:
Python
# Построение графиков.
plt.plot(predict, "b")
plt.plot(y_test, "r", alpha=0.5)
plt.savefig("sin_inference.png")
plt.show()
- Запустите программу.