Почему обертывание слоя удаляет атрибут ядра другого слоя в Keras? - PullRequest
0 голосов
/ 05 марта 2020

В настоящее время я создаю сеть на основе LSTM для прогнозирования временных рядов, и я хотел попробовать использовать оболочку Keras 'Bidirectional, чтобы посмотреть, может ли это повысить мою точность.

Однако добавление оболочки приводит к мой выходной слой теряет свой атрибут kernel, что проблематично c, так как мой оптимизатор пытается получить к нему доступ, что приводит к cra sh во время компиляции.

То есть, когда я делаю :

model = Sequential()
model.add(LSTM(
    100,
    batch_input_shape=(batch_size, look_back, features),
))
model.add(Dense(1))

print(hasattr(model.layers[-1], 'kernel'))

True

Но при переносе LSTM примерно так:

model = Sequential()
model.add(Bidirectional(LSTM(
    100,
    batch_input_shape=(batch_size, look_back, features),
)))
model.add(Dense(1))

print(hasattr(model.layers[-1], 'kernel'))

False

1 Ответ

0 голосов
/ 05 марта 2020

Решение состоит в том, чтобы ваша сеть что-то предсказывала, а затем скомпилировала это с помощью пользовательского оптимизатора:

model = Sequential()
model.add(Bidirectional(LSTM(
    100,
    batch_input_shape=(batch_size, look_back, features),
)))
model.add(Dense(1))

model.predict(np.zeros((batch_size, look_back, features)))
print(hasattr(model.layers[-1], 'kernel'))
model.compile(optimizer=CustomOptimizer(), loss='mse')

True

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...