Настройка формы ввода для задачи НЛП в R (Rstudio) с использованием сверточного слоя keras 1D, когда ожидается трехмерный ввод (тензор) - PullRequest
0 голосов
/ 02 апреля 2019

Я использую язык программирования R и использую Keras API для создания функционала 1D CNN.

У меня есть матрица моего набора данных со следующими строками * объектов (6000 * 1024).

Входной слой устанавливается с использованием следующего кода:

input_layer = layer_input(shape = 1024, batch_shape = c(nrow(train_matrix),1024), dtype = 'float64') 

и затем я создаю 1-й слой конвона следующим образом:

conv1 = input_layer %>% layer_conv_1d(filters = 32, kernel_size = 50, strides = 10, input_shape = 1024, batch_input_shape = list(NULL, 1024) ,dtype = 'float64', activation = 'relu' )

Но я получаю следующую ошибку:

Ошибка в py_call_impl (вызываемый, точки $ args, точки $ ключевые слова): ValueError: вход 0 несовместим со слоем conv1d: ожидаемый ndim = 3, найденный ndim = 2

Я полагаю, это связано с тем, что слой 1D cnn ожидает ввода в следующем виде

Форма ввода: трехмерный тензор с формой: (batch_size, steps, input_dim)

Я понимаю, что мне нужно изменить свои данные как (NULL, nrow(train_matrix), 1; поскольку это было предложено в различных ответах на одну и ту же проблему, возникающую для керас при использовании в Python.

Если я прав,

  1. какие значения я должен предоставить входному слою
  2. как мне изменить свои тренировочные данные?
  3. означает ли это, что мне также необходимо изменить данные теста?

также, если мое понимание неверно, что следует делать иначе?

1 Ответ

0 голосов
/ 03 апреля 2019

Входной слой производил 2-мерный тензор, тогда как 1-мерный сверточный слой ожидает 3-й тензор в качестве входного.Хорошее объяснение того, почему keras ожидает этого и как вы должны изменить свой 2-мерный ввод в 3d, можно найти в этом ответе .

Я использовал функцию Keras R API k_reshape( 2d_tensor, (list_of_new_dims)) -> k_reshape(input_layer, list(nrow(train_matrix), num_of_feature_vectors, 1).

nrow(train_matrix) - общее количество строк в моей матрице (без выборок)

num_of_feature_vectors - общее количество столбцов в матрице (общее количество объектов)

1 - я хочу, чтобы трехмерный тензор содержал только 1 элемент по оси z, поэтому для оси z задано значение 1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...