Python 如何将自定义初始权重设置为biLSTM图层Keras?
我目前正致力于构建BiLSTM,并注意使用Antlion算法优化BiLSTM层权重。Antlion Alogrithm在MATLAB代码中,我能够集成Python和MATLAB以获得优化权重,如下所示:Python 如何将自定义初始权重设置为biLSTM图层Keras?,python,tensorflow,keras,bilstm,Python,Tensorflow,Keras,Bilstm,我目前正致力于构建BiLSTM,并注意使用Antlion算法优化BiLSTM层权重。Antlion Alogrithm在MATLAB代码中,我能够集成Python和MATLAB以获得优化权重,如下所示: #LSTM hidden nodes hidden_nodes=11 import matlab.engine eng = matlab.engine.start_matlab() #call optimised_weights.m [forward_kernel, backward_ker
#LSTM hidden nodes
hidden_nodes=11
import matlab.engine
eng = matlab.engine.start_matlab()
#call optimised_weights.m
[forward_kernel, backward_kernel,forward_recurrent, backward_recurrent]=eng.optimised_weights(int(hidden_nodes),nargout=4)
eng.quit()
## convert to nparray
forward_kernel=np.array(forward_kernel)
backward_kernel=np.array(backward_kernel)
forward_recurrent=np.array(forward_recurrent)
backward_recurrent=np.array(backward_recurrent)
我目前面临如下模型中创建的BiLSTM层的权重和偏差设置问题(未设置自定义初始权重):
我尝试过以下方法:
model.add(Bidirectional(LSTM(hidden_nodes, return_sequences=True,
weights=[forward_kernel,forward_recurrent,np.zeros(20,),backward_kernel,backward_recurrent,np.zeros(20,)])))
但是一旦模型被编译,权重和偏差就会改变…即使内核、递归和偏差初始化器被设置为无
我已经提到了这个链接:但无法将其与我的问题联系起来
如果你们能提供解决这个问题的见解,如果我遗漏了一些基本部分,我将不胜感激。如有需要,我很乐意与大家分享更多细节
谢谢 使用
tf.constant\u初始值设定项
将自定义权重设置为np.array
。此外,当您使用双向层时,需要使用自定义权重明确指定反向层
layer = Bidirectional(
LSTM(
hidden_nodes,
return_sequences=True,
kernel_initializer=tf.constant_initializer(forward_kernel),
recurrent_initializer=tf.constant_initializer(forward_recurrent),
),
backward_layer=LSTM(
hidden_nodes,
return_sequences=True,
kernel_initializer=tf.constant_initializer(backward_kernel),
recurrent_initializer=tf.constant_initializer(backward_recurrent),
go_backwards=True,
),
)
注意砝码的预期形状。由于层的输入是(批、时间步、特征)
,因此权重应具有以下形状(以说明LSTM单元中的4个门):
- 内核:
(功能,4个隐藏节点)
- 重复:
(隐藏节点,4个*隐藏节点)
- 偏差:
(4个隐藏节点)
layer = Bidirectional(
LSTM(
hidden_nodes,
return_sequences=True,
kernel_initializer=tf.constant_initializer(forward_kernel),
recurrent_initializer=tf.constant_initializer(forward_recurrent),
),
backward_layer=LSTM(
hidden_nodes,
return_sequences=True,
kernel_initializer=tf.constant_initializer(backward_kernel),
recurrent_initializer=tf.constant_initializer(backward_recurrent),
go_backwards=True,
),
)