Keras LSTM из цикла for, используя функциональный API с произвольным количеством слоев - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь построить сеть через функциональный API keras, предоставляя два списка, содержащие количество единиц слоев LSTM и слоев FC (Dense). Я хочу проанализировать 20 последовательных сегментов (пакетов), которые содержат временные шаги fs каждый и 2 значения (2 функции на временной шаг). Это мой код:

Rec = [4,4,4]  
FC = [8,4,2,1]    
def keras_LSTM(Rec,FC,fs, n_witness, lr=0.04, optimizer='Adam'):
    model_LSTM = Input(batch_shape=(20,fs,n_witness))
    return_state_bool=True
    for i in range(shape(Rec)[0]):
        nRec = Rec[i]
        if i == shape(Rec)[0]-1:
            return_state_bool=False
        model_LSTM = LSTM(nRec, return_sequences=True,return_state=return_state_bool,
                     stateful=True, input_shape=(None,n_witness),            
                     name='LSTM'+str(i))(model_LSTM)
    for j in range(shape(FC)[0]):
        nFC = FC[j]
        model_LSTM = Dense(nFC)(model_LSTM)
        model_LSTM = LeakyReLU(alpha=0.01)(model_LSTM)
    nFC_final = 1
    model_LSTM = Dense(nFC_final)(model_LSTM)
    predictions = LeakyReLU(alpha=0.01)(model_LSTM)

    full_model_LSTM = Model(inputs=model_LSTM, outputs=predictions)
    model_LSTM.compile(optimizer=keras.optimizers.Adam(lr=lr, beta_1=0.9, beta_2=0.999,
                    epsilon=1e-8, decay=0.066667, amsgrad=False), loss='mean_squared_error')
    return full_model_LSTM

model_new = keras_LSTM(Rec, FC, fs=fs, n_witness=n_wit)
model_new.summary()

При компиляции я получаю следующую ошибку:

ValueError: График отключен: невозможно получить значение для тензорного тензора («input_1: 0», shape = (20, 2048, 2), dtype = float32) на слое «input_1». Следующие предыдущие слои были доступны без проблем: []

Что я на самом деле не совсем понимаю, но подозреваю, что это может иметь какое-то отношение к входам?

1 Ответ

0 голосов
/ 17 января 2019

Я решил проблему, изменив строку 4 кода следующим образом:

x = model_LSTM = Input(batch_shape=(20,fs,n_witness))

вместе со строкой 21, как показано ниже:

full_model_LSTM = Model(inputs=x, outputs=predictions)
...