Keras: вход 0 несовместим со слоем conv1d_5: ожидается ndim = 3, найдено ndim = 2 - PullRequest
1 голос
/ 28 февраля 2020

Я начинающий с Кераса. Я использую простой набор данных с 20 функциями для регрессионной модели. Я продолжаю получать ошибку, которая ожидала ndim = 3, нашла ndim = 2 для слоя conv2d. Это мой код:

def buildreg():
    regressor=Sequential()
    regressor.add(Dense(units=170,input_dim=20))
    regressor.add(Dense(units=25))
    regressor.add(Conv1D(16,5))
    regressor.add(Dense(units=100))
    regressor.add(Dense(units=55))
    regressor.add(Dense(units=10))
    regressor.add(Dense(units=60))
    regressor.add(Dense(units=1))
    regressor.compile(optimizer='adam',loss='mean_absolute_error')
    return regressor
from keras.wrappers.scikit_learn import KerasRegressor
model=KerasRegressor(build_fn=buildreg,batch_size=15,epochs=20)

На входе находится фрейм данных с 20 функциями. Набор данных очень маленький, около 1 тыс. Строк. Я в полной мере осознаю тот факт, что он переоденется. Правильно обработано. Данные отлично работают с MLPRegressor.

1 Ответ

0 голосов
/ 28 февраля 2020

1) Если вы хотите использовать Conv1D, используйте Conv1D в качестве первого слоя и укажите input_shape, как показано ниже

input_shape=(N_features, 1)

, а также измените форму вашего поезда (nb_of_examples, nb_of_features, 1).

Итак, ваш измененный код будет выглядеть так:

Processed--XTRAIN = Processed--XTRAIN.reshape(1457,20,1)

def buildreg():
    regressor=Sequential()
    regressor.add(Conv1D(16,5,input_shape=(20, 1)))
    regressor.add(Dense(units=170,input_dim=20))
    regressor.add(Dense(units=25))
    regressor.add(Dense(units=100))
    regressor.add(Dense(units=55))
    regressor.add(Dense(units=10))
    regressor.add(Dense(units=60))
    regressor.add(Dense(units=1))
    regressor.compile(optimizer='adam',loss='mean_absolute_error')
    return regressor
from keras.wrappers.scikit_learn import KerasRegressor
model=KerasRegressor(build_fn=buildreg,batch_size=15,epochs=20)

2) В противном случае вы можете удалить слой свертки и построить простую модель ANN. Просто используйте плотный слой для построения вашей модели.

Ваш код будет выглядеть примерно так

def buildreg():
    regressor=Sequential()
    regressor.add(Dense(units=170,input_dim=20))
    regressor.add(Dense(units=25))
    regressor.add(Dense(units=100))
    regressor.add(Dense(units=55))
    regressor.add(Dense(units=10))
    regressor.add(Dense(units=60))
    regressor.add(Dense(units=1))
    regressor.compile(optimizer='adam',loss='mean_absolute_error')
    return regressor
from keras.wrappers.scikit_learn import KerasRegressor
model=KerasRegressor(build_fn=buildreg,batch_size=15,epochs=20)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...