Получение ошибки при вводе данных в слой Conv1D в модели Keras - PullRequest
0 голосов
/ 03 октября 2018

Я использую векторные данные tf-idf в качестве входных данных для моей модели Keras.Векторы tf-idf имеют следующую форму:

<class 'scipy.sparse.csr.csr_matrix'> (25000, 310617)

Код:

inputs = Input((X_train.shape[1],))
convnet1=Conv1D(128,3,padding='same',activation='relu')(inputs)

Ошибка:

ValueError: Вход 0 несовместим со слоем conv1d_25:ожидаемый ndim = 3, найденный ndim = 2

Когда я преобразовываю вход в Input(None,X_train.shape[1],), тогда я получаю ошибку во время подгонки, потому что размер входа был изменен на 3.

1 Ответ

0 голосов
/ 03 октября 2018

Как упоминалось в ошибке (т. Е. expected ndim=3, found ndim=2), Conv1D принимает 3D-массив в качестве входных данных.Поэтому, если вы хотите передать этот массив в него, вам сначала нужно изменить его форму:

X_train = X_train.reshape((X_train.shape[0], X_train.shape[1], 1))

, а также установить соответствующую форму входного слоя:

inputs = Input(X_train.shape[1:])

Однако,Conv1D обычно используется для обработки последовательностей (например, последовательности слов в предложении) или временных данных (например, временных рядов температуры погоды).И именно поэтому он принимает входные данные в форме (num_samples, num_timesteps or sequence_len, num_features).Применение его к представлению tf-idf, у которого нет последовательного порядка, может быть неэффективным.Вместо этого я предлагаю вам использовать слой Dense.Или же, вместо использования tf-idf, вы можете также подавать необработанные данные (т.е. тексты или предложения) непосредственно в слой Embedding и использовать слой Conv1D или LSTM после него.

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