Этот раздел содержит инструкции по созданию регрессионной модели с обучаемыми блоками, кодирующие и декодирующие данные, и ее обучению. Модель создана с помощью тернарных слоев пакета ANN2SNN.
Вы можете использовать эту инструкцию при разработке прикладных решений.
Чтобы создать и обучить регрессионную модель:
.py, в котором будет создана и обучена модель.Если требуется, определите псевдонимы с помощью оператора as.
Пример подключения объектов для создания и обучения регрессионной модели:
Python
from knp_ann2snn.altainn import 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.callbacks import ModelCheckpoint
from keras.layers import Dense
import matplotlib.pyplot as plt
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 значений.
train_range = range(train_idx - elements_in_batch - 1)
x_train = np.array([arr[i : i + elements_in_batch] for i in train_range])
y_train = np.array([[arr[i + elements_in_batch + 1]] for i in train_range])
# Формирование тестовых данных на основе 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
# Создание кодирующего блока с одним слоем, который преобразует данные в спайки.
encoder = Sequential(
[
Dense(
encoder_output_shape,
activation=heaviside,
input_shape=(elements_in_batch,)
)
]
)
# Создание импульсной нейронной сети.
snn = Sequential(
[
TernaryDense(
snn_output_shape,
activation=heaviside,
input_shape=(encoder_output_shape,),
use_bias=False
)
]
)
# Создание декодирующего блока с одним слоем, который преобразует спайки в целевое значение.
decoder = Sequential(
[
Dense(
decoder_output_shape,
activation="linear",
input_shape=(snn_output_shape,)
)
]
)
# Создание модели с кодирующим блоком, нейронной сетью и декодирующим блоком.
model = Sequential([encoder, snn, decoder])
model.compile(optimizer="adam", loss="mse")
Пример обучения модели:
Python
# Обучение модели на тренировочных данных.
checkpoint = ModelCheckpoint(
"sin_model.keras",
monitor="val_loss",
verbose=1,
save_best_only=True,
mode="min"
)
model.fit(x_train, y_train, epochs=50, validation_data=(x_test, y_test), callbacks=[])
model.save("sin_model.keras")
# Загрузка модели.
model = load_model(
"sin_model.keras",
custom_objects={
"heaviside_mod": heaviside,
"Clip": Clip,
"TernaryDense": TernaryDense,
},
)
# Получение предсказаний.
predict_test = model.predict(x_test)
predict_test = predict_test.flatten()
# Построение графиков по предсказанным и целевым значениям.
plt.plot(predict_test, "b")
plt.plot(y_test, "r", alpha=0.5)
plt.savefig("sin_train.png")
Пример сохранения:
Python
# Сохранение кодирующего блока в файл encoder_sin.keras.
model.layers[0].save("encoder_sin.keras")
# Сохранение нейронной сети в файл snn_sin.keras.
model.layers[1].save("snn_sin.keras")
# Сохранение декодирующего блока в файл decoder_sin.keras.
model.layers[2].save("decoder_sin.keras")