Tensorflow LSTM回归的Keras注意层问题

Tensorflow LSTM回归的Keras注意层问题,tensorflow,keras,deep-learning,lstm,attention-model,Tensorflow,Keras,Deep Learning,Lstm,Attention Model,我使用kerasLSTM作为回归模型。我想利用一种对原始输入的注意机制,这在本文中解释得很好 本文描述了如何构建一个定制的注意层,在输入到LSTM之前为原始输入赋予权重。我想利用新的keras注意层。在研究了如何实现这一点后,我提出了以下模型: sequence_input = layers.Input(shape=(time_steps, features), dtype='float32') lstm, state_h, state_c = layers.LSTM(units=50,

我使用
keras
LSTM
作为回归模型。我想利用一种对原始输入的注意机制,这在本文中解释得很好

本文描述了如何构建一个定制的注意层,在输入到
LSTM
之前为原始输入赋予权重。我想利用新的keras
注意
层。在研究了如何实现这一点后,我提出了以下模型:

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: Cannot iterate over a tensor with unknown first dimension.
这是因为
sequence\u input
lstm
state\u h
的第一维度是
None
。我是新来的
注意
层,我很确定我错过了一些东西。唯一的例子是
嵌入
层跟随
输入
层,这不是预测回归模型所需要的,其中每个样本都是
浮点

PS:注意层之后可能还有其他问题。我还没能先解决这个问题。不声称此实现是正确的

更新
一个问题是我正在将2D张量传递给注意()。隐藏状态具有形状(无,50)。LSTM不应该为每个功能都有一个隐藏状态,即(无、50、10)?接下来,似乎应该将隐藏状态作为值传递。所以我不确定为什么维度不正确。

Keras注意层接受3D数据,你正在传递3D和2D。。。还要注意你想做什么achieve@MarcoCerlianilstm返回的隐藏状态为(无,50)。每个特征不应该有一个隐藏状态吗?我建议您使用@Marccerliani,答案是“值是隐藏状态[batch\u dim,features],我们在其中为矩阵运算[batch\u dim,1,features]添加时间维度。但是隐藏状态返回[batch\u dim,units]相反,是的,出于这个原因,我们添加了一个时间维度,以便在3D中使用它