微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

对如何将CONV1D和LSTM结合起来感到困惑

如何解决对如何将CONV1D和LSTM结合起来感到困惑

我正在努力理解结合了CONV1DLSTM的这段代码

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是? CONV1DLSTM的形状有点相似吗?

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层中的原因。

https://classroom.udacity.com/courses/ud187/lessons/6d543d5c-6b18-4ecf-9f0f-3fd034acd2cc/concepts/c10fb954-25ea-43e3-b22c-21b3e423eb05

对于使用forecasting的时间序列neural networks来说,这是一门很棒的课程

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。