Как создать многомерные матрицы в качестве входных данных для нейронной сети? - PullRequest
3 голосов
/ 13 апреля 2020

Я пытаюсь создать нейронную сеть с многомерной входной матрицей. Входные данные могут иметь размер 2x7, 8x7 или любое другое измерение с 7 столбцами. (Этот вход используется для структуры l oop, показанной ниже)

Мой вопрос: как создать обучающий DataFrame, который мог бы содержать несколько таких матриц с разными измерениями для питания нейронной сети? Я пытался обучить модель для l oop для каждой матрицы, но должен быть более подходящий метод для создания такого набора данных.

Примечание: я пытаюсь получить один вход со всеми такими различными размерными матрицами и это может легко сопоставить с их соответствующими выходами. Таким образом, входные данные должны выглядеть следующим образом (a, b, 7), где a - это число точек данных, которые являются матрицами с различной длиной строк, b - это количество строк в этом конкретном matrix and 7 - количество столбцов во всех матрицах.

Данные являются примером данных временного ряда, которые пользователи создали по времени. Поэтому мне нужно держать каждый ряд отдельных матриц в своем порядке. И вывод будет сгенерирован в следующий раз, когда пользователь создаст новую строку. Пожалуйста, поймите, в центре этого вопроса находится не модель, а способ представления этих данных для модели.

Вот код моей модели:

model.add(Lambda(lambda x: tf.expand_dims(x, axis=1), input_shape=[7]))
model.add(Dense(2048, activation='tanh'))
model.add(Dense(1024, activation='tanh'))
model.add(Dense(512, activation='tanh'))
model.add(Dense(216, activation='tanh'))
model.add(Flatten())
model.add(Dense(128, activation='tanh'))
model.add(Dense(7, activation='tanh'))
model.summary()

Мой l oop для Подходящая модель выглядит следующим образом:

for user_id in user_ids:
    df = dailytable[dailytable['user_id']==user_id]
    if df.shape[0] > 3:
        X = df.iloc[:-1, :]
        Y = df.iloc[-1, :]
        Y = tf.reshape(Y, (1, 7))
        if len(X.axes[0].tolist()) > 3:
            model.fit(X, Y, epochs=5, steps_per_epoch=1)

Я хочу создать некоторую структуру данных, которая содержит все мои матрицы. Это будет выглядеть как трехмерная матрица. И все эти матрицы имеют разные входные формы, как описано выше. Но имеют одинаковый выход, т.е. 1x7. Вместо использования структуры l oop я хочу пропустить один ввод в начале обучения.

1 Ответ

0 голосов
/ 17 апреля 2020

Моделирование любого временного ряда имеет ту же проблему. Вы должны взглянуть на CNN или RNN, поскольку они допускают переменные размеры. В случае CNN вы можете иметь вход с 7 каналами и переменной длины.

С полностью связанным слоем у вас есть вход с фиксированной формой. Таким образом, вы либо применяете заполнение нулями, чтобы выполнить максимальный размер, как уже было предложено, либо используете в качестве входных данных оконный сдвинутый сигнал (что и делает CNN).

...