如何解决对如何将CONV1D和LSTM结合起来感到困惑
我正在努力理解结合了CONV1D
和LSTM
的这段代码。
model = tf.keras.models.Sequential([
tf.keras.layers.Conv1D(filters=32,kernel_size=5,strides=1,padding="causal",activation="relu",input_shape=[None,1]),tf.keras.layers.LSTM(64,return_sequences=True),tf.keras.layers.Dense(30,activation="relu"),tf.keras.layers.Dense(10,tf.keras.layers.Dense(1),tf.keras.layers.Lambda(lambda x: x * 400)
])
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv1d (Conv1D) (None,None,32) 192
_________________________________________________________________
lstm (LSTM) (None,64) 24832
_________________________________________________________________
lstm_1 (LSTM) (None,64) 33024
_________________________________________________________________
dense (Dense) (None,30) 1950
_________________________________________________________________
dense_1 (Dense) (None,10) 310
_________________________________________________________________
dense_2 (Dense) (None,1) 11
_________________________________________________________________
lambda (Lambda) (None,1) 0
=================================================================
Total params: 60,319
Trainable params: 60,319
Non-trainable params: 0
_________________________________________________________________
如果我们删除CONV1D
层和第二个LSTM
层,我就很好。但是,我对这种结构深感困惑。
首先,为什么要在第二return_sequences=True
层中添加LSTM
?通常,在发生return_sequences=True
的情况下,我们仅在第一LSTM
层添加stacked LSTM
。在此模型中,我们将其添加到两者中。
第二,为什么input_shape=[None,1]
层中的CONV1D
是? CONV1D
和LSTM
的形状有点相似吗?
Conv1D: (batch,length,channels)
LSTM: (batch,timesteps,features)
如果您可以共享一个说明如何组合这两种模型的链接,将不胜感激。
解决方法
如果您希望输出为序列,例如,要预测下一个10个值,则最后一个return_sequences
应该是True
。如果数据中有10个时间步长,它将返回10个时间步长的序列。例如:
import numpy as np
import tensorflow as tf
model = tf.keras.models.Sequential([
tf.keras.layers.Conv1D(filters=32,kernel_size=5,strides=1,padding="causal",activation="relu",input_shape=[None,1]),tf.keras.layers.LSTM(64,return_sequences=True),tf.keras.layers.Dense(30,activation="relu"),tf.keras.layers.Dense(10,tf.keras.layers.Dense(1),tf.keras.layers.Lambda(lambda x: x * 400)
])
model(np.random.rand(1,10,1))
<tf.Tensor: shape=(1,1),dtype=float32,numpy=
array([[[ 0.12037009],[ 0.19570792],[ 0.3986496 ],[ 0.56172705],[-0.06423644],[-0.4780491 ],[-0.82960564],[-1.2271142 ],[-1.8704925 ],[-2.294954 ]]],dtype=float32)>
我不明白你的第二个问题。
,此代码使用sequence-to-sequence
预测,而不使用此视频中所述的sequence-to-vector
(下面的链接)。这就是我们将return_sequences=True
放在两个LSTM
层中的原因。
对于使用forecasting
的时间序列neural networks
来说,这是一门很棒的课程
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。