Ошибка при обучении CNN классификации текста в keras "ValueError: вход 0 несовместим со слоем" - PullRequest
0 голосов
/ 29 мая 2020

Я строю модель прогнозирования для данных последовательности, используя слой conv1d, предоставленный Керасом. Вот как я сделал

input_layer = Input(shape=(500,)) 
layer = Conv1D(128,5,activation="relu")(input_layer)
layer = MaxPooling1D(pool_size=2)(layer)
layer = Flatten()(layer)
layer = Dense(128, activation='relu')(layer)
output_layer = Dense(10, activation='softmax')(layer)
classifier = Model(input_layer, output_layer)
classifier.summary()
classifier.compile(optimizer=optimizers.Adam(), loss='sparse_categorical_crossentropy', metrics=['accuracy'])
return classifier

Однако я столкнулся со следующей ошибкой:

Traceback (most recent call last):
File "train.py", line 71, in <module>
classifier = create_cnn_model()
File "train.py", line 60, in create_cnn_model
layer = Conv1D(128,5, activation="relu")(input_layer)
File "C:\Python368\lib\site-packages\keras\backend\tensorflow_backend.py", line 75, in symbolic_fn
_wrapper
return func(*args, **kwargs)
File "C:\Python368\lib\site-packages\keras\engine\base_layer.py", line 446, in __call__
self.assert_input_compatibility(inputs)
File "C:\Python368\lib\site-packages\keras\engine\base_layer.py", line 342, in assert_input_compat
ibility
str(K.ndim(x)))
ValueError: Input 0 is incompatible with layer conv1d_1: expected ndim=3, found ndim=2

Я думаю, что input_shape в первом слое настроен неправильно. Как его настроить?

1 Ответ

0 голосов
/ 29 мая 2020

Верно, сверточным слоям требуется трехмерный ввод. Я предполагаю, что у вас есть одномерный временной ряд с 500 выборками. Вам нужно написать функцию для разделения временного ряда на шаги. Например:

     x             y
[t-n,...,t-2,t-1]  t

Таким образом, вы в основном используете последние n значений для прогнозирования следующего значения в вашем ряду. Тогда ваша форма ввода будет [len (x), n, 1]

...