问题描述
我正在将keras
LSTM
用于回归模型。我想对原始输入内容使用一种注意力机制,如本paper所述。
本文介绍了如何构建自定义的Attention层,该层在提供给LSTM
之前为原始输入赋予权重。我想利用新的keras Attention
层。在研究了如何实现这一点之后,我想到了以下模型:
sequence_input = layers.Input(shape=(time_steps,features),dtype='float32')
lstm,state_h,state_c = layers.LSTM(units=50,dropout=0.1,activation='tanh',return_state=True,kernel_regularizer=1e-6,recurrent_regularizer=1e-4,bias_regularizer=1e-6,return_sequences=True)(sequence_input)
context_vector,attention_weights = layers.Attention()([lstm,state_h])
output = Dense(units=1)(context_vector)
model = tf.keras.Model(inputs=sequence_input,outputs=output)
上面的模型在编译TypeError
层时给出了下面的Attention
:
TypeError: Cannot iterate over a tensor with unkNown first dimension.
这是因为sequence_input
,lstm
和state_h
的第一维是None
。我是Attention
层的新手,我很确定自己缺少一些东西。 keras documentation仅具有一个示例,其中Embedding
层紧随Input
层,对于每个样本均为float
的预测回归模型,我不需要这样做。>
PS:注意层之后可能还有其他问题。我尚未能够首先解决该问题。不声称此实现是正确的。
更新
一个问题是我正在将2D张量传递给Attention()。隐藏状态具有形状(无,50)。 LSTM不应为每个功能都具有隐藏状态,即(None,50,10)?,在this question之后,似乎应该将隐藏状态作为值传递。所以我不确定为什么尺寸不正确。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)