Вопрос или проблема
Можете ли вы сказать мне, как построить автоэнкодер с одной матрицей (4, 4) с целыми числами? Я хочу построить автоэнкодер для данных, упомянутых ниже. Я не знаю, нужно ли сначала преобразовывать десятичные числа в двоичные с помощью one-hot кодирования или нейронная сеть распознает целые числа. Например:
входные данные = массив([[ 4, 3, 8, 6],
[ 1, 1, 2, 2],
[24, 18, 32, 24],
[ 6, 6, 8, 8]])
автоэнкодер(данные)
выходные данные = массив([[ 4, 3, 8, 6],
[ 1, 1, 2, 2],
[24, 18, 32, 24]
[ 6, 6, 8, 8]])
Вы можете преобразовать ваши данные в float32 и подать их в стек LSTM автоэнкодера с линейной активацией.
Следующая архитектура работает, но вы можете ее доработать:
входные_данные = np.array([[[4, 3, 8, 6], [1, 1, 2, 2], [24, 18, 32, 24], [6, 6, 8, 8]]]).astype(np.float32)
model = tf.keras.Sequential([
tf.keras.layers.LSTM(4, return_sequences=True, activation="linear"),
tf.keras.layers.LSTM(2, return_sequences=True, activation="linear"),
tf.keras.layers.LSTM(1, return_sequences=True, activation="linear"),
tf.keras.layers.LSTM(2, return_sequences=True, activation="linear"),
tf.keras.layers.LSTM(4, return_sequences=True, activation="linear"),
])
model.compile(optimizer="Adam", loss="MAE", metrics=["MSE"])
model.fit(входные_данные, входные_данные, epochs=200000)
Что у меня получилось после 200 000 эпох!:
[[[ 3.9911306 2.9956746 7.989547 5.9939675 ]
[ 0.9976706 0.99182177 2.0006196 1.9999651 ]
[23.9897 17.996624 31.995388 24.006733 ]
[ 6.0549197 5.9584255 8.023056 8.003849 ]]]
Ответ или решение
Создание Автоэнкодера для Матрицы Целых Чисел
Автоэнкодеры являются мощным инструментом для обработки и сжатия данных, и в данной статье мы охватим процесс построения автоэнкодера на основе многослойной временной модели LSTM (Long Short-Term Memory) для работы с матрицей размерности 4×4, содержащей целые числа.
Шаг 1: Подготовка Данных
Для начала нужно подготовить исходные данные. В вашем случае данные представлены в следующем формате:
import numpy as np
input_data = np.array([[4, 3, 8, 6],
[1, 1, 2, 2],
[24, 18, 32, 24],
[6, 6, 8, 8]]).astype(np.float32)
Здесь каждый элемент массива преобразован в тип float32
. Преобразование в вещественный тип необходимо для корректной работы нейронной сети, так как большинство библиотек для работы с нейронными сетями, включая TensorFlow, ожидают входные данные в формате с плавающей запятой.
Шаг 2: Определение Архитектуры Автоэнкодера
Далее определим архитектуру автоэнкодера с помощью библиотеки TensorFlow и Keras. Мы будем использовать несколько слоев LSTM для извлечения признаков и последующего восстановлений данных:
import tensorflow as tf
model = tf.keras.Sequential([
tf.keras.layers.LSTM(4, return_sequences=True, activation="linear", input_shape=(1, 4)),
tf.keras.layers.LSTM(2, return_sequences=True, activation="linear"),
tf.keras.layers.LSTM(1, return_sequences=True, activation="linear"),
tf.keras.layers.LSTM(2, return_sequences=True, activation="linear"),
tf.keras.layers.LSTM(4, return_sequences=True, activation="linear"),
])
model.compile(optimizer="Adam", loss="mean_absolute_error", metrics=["mean_squared_error"])
Здесь первый слой LSTM принимает входные данные с размерностью (1, 4)
, что соответствует количеству временных шагов (в нашем случае это 1) и количеству признаков (4 элемента в строке).
Шаг 3: Обучение Модели
Для обучения модели мы используем метод fit()
, который принимает входные данные и соответствующие целевые значения (в нашем случае это те же данные, так как автоэнкодер обучается на восстановление входных данных):
input_data = input_data.reshape((1, 4, 4)) # изменяем форму для LSTM
model.fit(input_data, input_data, epochs=200000)
Обратите внимание, что форма данных должна быть (батч, временные шаги, признаки)
, поэтому мы изменяем размерность массива.
Шаг 4: Оценка Результатов
После обучения модели, вы можете получить восстановленные данные:
reconstructed_data = model.predict(input_data)
print(reconstructed_data)
На выходе вы получите матрицу, которая близка к исходным данным, но может содержать некоторые небольшие искажения из-за природы обучения:
# Пример вывода
[[[ 3.9911306 2.9956746 7.989547 5.9939675 ]
[ 0.9976706 0.99182177 2.0006196 1.9999651 ]
[23.9897 17.996624 31.995388 24.006733 ]
[ 6.0549197 5.9584255 8.023056 8.003849 ]]]
Заключение
В результате, мы успешно создали простой автоэнкодер для обработки матрицы целых чисел. Используя архитектуру LSTM, мы обеспечиваем возможность работы с последовательностями, что может быть особенно полезно, если ваши данные имеют временную зависимость. Построенная модель может быть дополнительно настроена путем изменения количества слоев, нейронов в слоях и гиперпараметров обучения. Попробуйте различные комбинации, чтобы достичь наилучших показателей восстановления для ваших конкретных данных.