Вход 0 слоя conv1d_2 несовместим со слоем: : ожидаемый min_ndim=3, найден ndim=2. Полная форма получена: (Нет, 128). Для разработки LSTM-CNN

#machine-learning #deep-learning #computer-vision #conv-neural-network #lstm

Вопрос:

Я пытаюсь включить слой CNN в сеть LSTM, как показано на рисунке.

 model = Sequential()
model.add(LSTM(64, return_sequences = True, input_shape=(X_train.shape[1], X_train.shape[2]),activation='relu'))
model.add(Dropout(0.1)) model.add(LSTM(128, activation= 'relu')) 
model.add(Conv1D(32, kernel_size=3, activation='relu'))
model.add(Flatten()) model.add(Dense(1)) 

model.compile(loss='mean_squared_error', optimizer='adam')
 

Но это дает следующую ошибку о форме ввода. Пожалуйста, помогите решить эту проблему.

снимок экрана с ошибкой

Комментарии:

1. Не могли бы вы просто скопировать и вставить код сюда вместо добавления ссылок в свой вопрос?

2. # проектная сеть # модель = Последовательная() # модель.добавить(LSTM(64, return_sequences = True, input_shape=(X_train.shape[1], X_train.shape[2]),активация=’relu’)) # модель.добавить(Отсев(0,1)) модель.добавить(LSTM(128, активация= ‘relu’)) модель.добавить(Conv1D(32, размер ядра=3, активация=’relu’)) модель.добавить(Сгладить()) модель.добавить(Плотная(1)) модель.скомпилировать(потеря=’mean_squared_error’, оптимизатор=’adam’)

Ответ №1:

Попробуй это:

 model = Sequential()
model.add(LSTM(64, return_sequences = True, input_shape = (X_train.shape[1], X_train.shape[2]), activation='relu'))
model.add(Dropout(0.1))
model.add(LSTM(128, activation = 'relu', return_sequences = True))
model.add(Conv1D(32, kernel_size= 1, input_shape = (None, 128, 1), activation = 'relu'))
model.add(Flatten())
model.add(Dense(1))
 

Комментарии:

1. Отрицательный размер измерения, вызванный вычитанием 3 из 1 для ‘{{узел conv1d_12/conv1d}} = Conv2D[T=DT_FLOAT, data_format=»NHWC», расширения=[1, 1, 1, 1], explicit_paddings=[], заполнение=»ДОПУСТИМО», шаги=[1, 1, 1, 1], use_cudnn_on_gpu=true](conv1d_12/conv1d/Расширенные изображения, conv1d_12/conv1d/Расширенные изображения_1)’ с входными формами: [?,1,1,128], [1,3,128,32].

2. Он отлично работает на моем компьютере. Кстати, попробуйте сменить kernel_size = 1 Conv1D слой

3. Это было исправлено путем изменения kernel_size =1

4. # проектная сеть # модель = Последовательная() # модель.добавить(LSTM(64, return_sequences = True, input_shape=(X_train.shape[1], X_train.shape[2]),активация=’relu’)) # модель.добавить(Отсев(0,1)) модель.добавить(LSTM(128, активация= ‘relu’, return_sequences=True)) модель.добавить(Conv1D(32, размер ядра=1, активация=’relu’)) модель.добавить(Сгладить()) модель.добавить(Плотная(1)) модель.скомпилировать(потеря=’mean_squared_error’, оптимизатор=’adam’)

5. Если это устранило вашу проблему, не могли бы вы, пожалуйста, принять ответ, нажав на значок галочки слева?