Как я могу исправить TypeError: неподдерживаемые типы операндов для +: 'int' и 'NoneType' при обработке метода Bagging - PullRequest
0 голосов
/ 04 июля 2019

Мне нужно использовать метод Bagging для LSTM, обучение на данных временных рядов. Я определил базовую модель и использую KerasRegressor для связи с scikit-learn. Но имейте AttributeError: у объекта 'KerasRegressor' нет атрибута 'loss'. Как я могу это исправить?

Обновление: я использовал метод Маноджа Мохана (в первом комментарии) и добился успеха на этапе подбора. Однако проблема возникает как TypeError, когда я изменяю класс Manoj Mohan на

class MyKerasRegressor(KerasRegressor): 
    def fit(self, x, y, **kwargs):
        x = np.expand_dims(x, -2)
        super().fit(x, y, **kwargs)

    def predict(self, x, **kwargs):
        x = np.expand_dims(x, -2)
        super().predict(x, **kwargs)

Это решило проблему размерности предиката (), которая так же, как .fit (). Проблема:

TypeError                                 Traceback (most recent call last)
<ipython-input-84-68d76cb73e8b> in <module>
----> 1 pred_bag = bagging_model.predict(x_test)
TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'

Полный скрипт:

def model_base_LSTM():

    model_cii = Sequential()

    # Make layers
    model_cii.add(CuDNNLSTM(50, return_sequences=True,input_shape=((1, 20))))
    model_cii.add(Dropout(0.4))

    model_cii.add(CuDNNLSTM(50, return_sequences=True))
    model_cii.add(Dropout(0.4))

    model_cii.add(CuDNNLSTM(50, return_sequences=True))
    model_cii.add(Dropout(0.4))

    model_cii.add(CuDNNLSTM(50, return_sequences=True))
    model_cii.add(Dropout(0.4))

    model_cii.add(Flatten())
    # Output layer
    model_cii.add(Dense(1))

    # Compile
    model_cii.compile(optimizer = 'adam', loss = 'mean_squared_error', metrics=['accuracy'])

    return model_cii

model = MyKerasRegressor(build_fn = model_base_LSTM, epochs=100, batch_size =70)
bagging_model = BaggingRegressor(base_estimator=model, n_estimators=10)
train_model = bagging_model.fit(x_train, y_train)

bagging_model.predict(x_test)

Output:
TypeError                                 Traceback (most recent call last)
<ipython-input-84-68d76cb73e8b> in <module>
----> 1 pred_bag = bagging_model.predict(x_test)
TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'

1 Ответ

1 голос
/ 04 июля 2019

Ошибка в методе model_base_LSTM().Замените

return model

на

return model_cii

Исправлено «Ошибка при проверке ввода», дополнительный размер может быть добавлен следующим образом.Это также решает проблему scikit-learn (2 измерения) и проблемы Keras LSTM (3 измерения).Создайте подкласс KerasRegressor для обработки несоответствия размеров.

class MyKerasRegressor(KerasRegressor):
    def fit(self, x, y, **kwargs):
        x = np.expand_dims(x, -2)
        return super().fit(x, y, **kwargs)

    def predict(self, x, **kwargs):
        x = np.expand_dims(x, -2)
        return super().predict(x, **kwargs)

model = MyKerasRegressor(build_fn = model_base_LSTM, epochs=100, batch_size =70)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...