为什么包裹一个层会删除Keras中另一个层的内核属性



我目前正在创建一个基于LSTM的时间序列预测网络,我想尝试使用Keras的Bidirectional包装器,看看它是否可以提高我的准确性。

但是,添加包装器会导致我的输出层丢失其kernel属性,这是有问题的,因为我的优化器试图访问它,导致编译时崩溃。

也就是说,当我这样做时:

model = Sequential()
model.add(LSTM(
100,
batch_input_shape=(batch_size, look_back, features),
))
model.add(Dense(1))
print(hasattr(model.layers[-1], 'kernel'))

真实

但是当像这样包装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'))

错误

解决方案是让你的网络预测一些东西,然后用你的自定义优化器进行编译:

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')

真实

最新更新