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中使用它