LSTM Grid Search - PullRequest
       64

LSTM Grid Search

0 голосов
/ 01 ноября 2019

У меня есть код ниже, который реализует архитектуру (в поиске по сетке), чтобы получить соответствующие параметры для ввода, узлов, эпох, размера пакета и ввода разностных временных рядов.

Задача, которую я имею, заключается в преобразованиинейронная сеть - от одного скрытого слоя LSTM до нескольких скрытых слоев LSTM.

В настоящий момент я могу выполнять код только со скрытыми слоями плотного типа без каких-либо ошибок, иначе я получу измерениеошибки, ошибки кортежа и так далее.

Проблема сохраняется только в разделе архитектуры нейронной сети.

Оригинальный код, который работает:

def model_fit(train, config):
    # unpack config
    n_input, n_nodes, n_epochs, n_batch, n_diff = config

    # Data
    if n_diff > 0:
        train = difference(train, n_diff)

    # Time series to supervised format
    data = series_to_supervised(train, n_in=n_input)

    train_x, train_y = data[:, :-1], data[:, -1]

    # Reshaping input data into [samples, timesteps, features]
    n_features = 1
    train_x = train_x.reshape((train_x.shape[0], train_x.shape[1], n_features))

    # Define model for (Grid search architecture)
    model = Sequential()
    model.add(LSTM(n_nodes, activation='relu', input_shape=(n_input, n_features)))
    model.add(Dense(n_nodes, activation='relu'))
    model.add(Dense(n_nodes, activation='relu'))
    model.add(Dense(n_nodes, activation='relu'))
    model.add(Dense(1))

    # Compile model (Grid search architecture)
    model.compile(loss='mse', optimizer='adam')

    # fit model
    model.fit(train_x, train_y, epochs=n_epochs, batch_size=n_batch, verbose=0)
    return model

Модифицированный LSTM-Код скрытого слоя, который не запускается:

# Define model for (Grid search architecture)
model = Sequential() 
model.add(LSTM(n_nodes, activation='relu', input_shape=(n_input, n_features), return_sequences=True))
model.add(LSTM(n_nodes, activation='relu', return_sequences=True))
model.add(LSTM(n_nodes, activation='relu', return_sequences=True))
model.add(LSTM(n_nodes, activation='relu', return_sequences=True))
model.add(TimeDistributed(Dense(1)))

Другой вариант, который также выдавал ошибку - ValueError: Ошибка при проверке цели: ожидаемое time_distributed_4 имеет 3 измерения, но получило массив сформа (34844, 1)

model = Sequential()
model.add(LSTM(n_nodes, activation='relu', input_shape=(n_input, n_features), return_sequences=True))
model.add(LSTM(n_nodes, activation='relu', return_sequences=False))
model.add(RepeatVector(n_input))
model.add(LSTM(n_nodes, activation='relu', return_sequences=True))
model.add(LSTM(n_nodes, activation='relu', return_sequences=True))
model.add(TimeDistributed(Dense(n_features)))

Может ли кто-нибудь с любым предложением, пожалуйста, помогите мне?

...