LSTM回归的Keras注意层问题

问题描述

我正在将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_inputlstmstate_h的第一维是None。我是Attention层的新手,我很确定自己缺少一些东西。 keras documentation仅具有一个示例,其中Embedding层紧随Input层,对于每个样本均为float的预测回归模型,我不需要这样做。>

PS:注意层之后可能还有其他问题。我尚未能够首先解决该问题。不声称此实现是正确的。

更新

一个问题是我正在将2D张量传递给Attention()。隐藏状态具有形状(无,50)。 LSTM不应为每个功能都具有隐藏状态,即(None,50,10)?,在this question之后,似乎应该将隐藏状态作为值传递。所以我不确定为什么尺寸不正确。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...