Создание и обучение регрессионной модели

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

Вы можете использовать эту инструкцию при разработке прикладных решений.

Чтобы создать и обучить регрессионную модель:

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

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

  3. Создайте синусоиду и подготовьте данные для обучения.

    Пример подготовки данных:

    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])

  4. Создайте регрессионную модель. Для этого создайте кодирующий блок, импульсную нейронную сеть и декодирующий блок.

    Пример создания регрессионной модели:

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

  5. Обучите модель.

    Пример обучения модели:

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

  6. Сохраните кодирующий блок, нейронную сеть и декодирующий блок.

    Пример сохранения:

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

  7. Запустите программу.
В начало