1

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

 in_neurons = 1 
     out_neurons = 1 
     hidden_neurons = 20 
     nb_features = 9 

     # retrieve data 
     y_train = train.pop(target).values 
     X_train = pd.concat([train[['QTR_HR_START', 'QTR_HR_END', 'HOLIDAY_RANK_', 'SPECIAL_EVENT_RANK_', 
            'IS_AM', 'IS_TOP_RANKED', 'AWARDS_WINS_ANY', 'YEARS_SINCE_RELEASE']], 
          pd.DataFrame({'DATETIME': pd.DatetimeIndex(train['DATETIME']).astype(np.int64)})]) 
     X_train = X_train.values 

     y_test = test.pop(target).values 
     X_test = pd.concat([test[['QTR_HR_START', 'QTR_HR_END', 'HOLIDAY_RANK_', 'SPECIAL_EVENT_RANK_', 
            'IS_AM', 'IS_TOP_RANKED', 'AWARDS_WINS_ANY', 'YEARS_SINCE_RELEASE']], 
      pd.DataFrame({'DATETIME': pd.DatetimeIndex(test['DATETIME']).astype(np.int64)})]) 
     X_test = X_test.values 

     model = Sequential() 
     model.add(TimeDistributed(Dense(8, input_shape=(X_train.shape[0], 100, nb_features), activation='softmax'))) 
     model.add(LSTM(4, dropout_W=0.2, dropout_U=0.2)) 
     model.add(Dense(1)) 
     model.add(Activation("sigmoid")) 
     model.compile(loss="mean_squared_error", optimizer="rmsprop", metrics=['accuracy']) 

После запуска кода, я получил исключение:

рейз Exception («Первый слой в Sequential модели должны» Исключение. Первый слой в Sequential модель должна получить input_shape или batch_input_shape аргумент

Пожалуйста, советы, где я не прав

EDIT1: я просто настроил модель, как упоминалось в официальной документации - http://keras.io/layers/recurrent/

model.add(LSTM(32, input_dim=nb_features, input_length=100)) 
model.compile(loss="mean_squared_error", optimizer="rmsprop", metrics=['accuracy']) 

Исключение: Ошибка при проверке модели ввода: ожидается lstm_input_1 иметь 3 размеры, но есть массив с формой (48614 , 9)

+1

Я думаю, что Keras ожидает от вас разделить ваши данные в последовательности последовательных данные. Именно поэтому он ожидает, что входные данные будут иметь три измерения. Посмотрите, как данные подготовлены в [этом учебнике] (http://danielhnyk.cz/predicting-sequences-vectors-keras-using-rnn-lstm/). – sietschie

ответ

3

Это старый, но я отправляю его для будущего использования. Keras как входные данные 3D-данных, как указано в ошибке. Это образцы, временные шаги, функции. Несмотря на то, что у вас есть (48614, 9), Keras воспринимает его как 2D - [образцы, функции]. Для того, чтобы исправить это, сделать что-то вроде этого

def reshape_dataset(train): 
    trainX = numpy.reshape(train, (train.shape[0], 1, train.shape[1])) 
    return numpy.array(trainX) 

x = reshape_dataset(your_dataset_48614, 9) 

Теперь X должен быть 48614,1, 9 что [образцы, временные шаги, особенности] - 3D

+0

Вы также можете использовать 'model.add (RepeatVector (1))'. Он добавит дополнительное измерение. – indraforyou

Смежные вопросы