浅谈CNN和LSTM(例子)

本文深入探讨了循环神经网络RNN的问题及LSTM如何解决长期依赖问题。LSTM通过输入、输出和忘记门来管理记忆,有效地解决了梯度消失问题。此外,还介绍了CNN的基本结构,包括卷积层、ReLU激活、池化和全连接层,并通过识别图片为例展示了CNN的工作原理。

长短期记忆神经网络(LSTM)是一种特殊的循环神经网络(RNN)。
循环神经网络(RNN):是一类以序列数据为输入,在序列的演进方向进行递归且所有节点(循环单元)按链式连接的递归神经网络。
RNN在有序数据上进行学习,为记住数据,会像人一样产生对先前发生事件的记忆


RNN学习过程:
目标信息源经过长时间抵达最后时间点,会产生误差

在这里插入图片描述
反向传递时会将误差在每一步乘以自己的参数w。
w<1时,误差传递到初始时间时,会是一个接近0的数,对于初始时刻,误差相当于没有–梯度消失。
在这里插入图片描述
W>1时,误差传递到初始时间时,会是一个非常大数–梯度爆炸。
在这里插入图片描述
此上为RNN不能长期记忆的办法。
为此LSTM出现。
LSTM多出三个控制器:输入、输出、忘记。
在这里插入图片描述
LSTM多了一条全局控制记忆(主线)
原本RNN控制(分线)
在这里插入图片描述
输入:
如果数据非常重要,就会将内容写入主线进行分析
忘记:
如果原来的数据不想要,忘记控制会把原来的数据忘掉按比例替换成现在数据。
主线数据更新,依靠输入和忘记控制。
输出:
根据主线和分线数据,判断输出什么内容。
在这里插入图片描述


LSTM:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
注意:
1.σ一般选择Sigmoid作为激励函数。
2.tanh函数因为收敛速度比sigmoid函数要快,所以作为生成候选记忆的函数。
3.LSTM的激励函数是可以根据自身需求而更改的。
4.一个训练好的LSTM模型,它的每一个门都有各自的(u,W,b)。
5.当输入的序列不存在有用信息时,遗忘门f的值就会接近1,那么输入门i的值接近0,这样过去有用的信息就会被保存;反之当输入的序列存在重要信息时,遗忘门f的值就会接近0,那么输入门i的值接近1,此时LSTM模型遗忘过去的记忆,记录重要记忆。


CNN(卷积神经网络)结构:
CONV(卷积层,进行卷积计算然后求和)
Relu(激励层,激励函数为Relu)
POOL(池化层)
FC(全连接层)


例子:
我们以识别一张照片是X还是O作为我们的识别目的:
在这里插入图片描述

在CNN模型中,会比较特征(两张图片的的各个局部)。在这里插入图片描述
特征会捕捉图片中的共同要素,如下所示,所选出的三个矩阵被认为成最重要的特征。
在这里插入图片描述


卷积层(Convolution Layer)

卷积的目的是为了计算特征与图片局部的相符程度。
将每一个特征中矩阵的点与对应选中矩阵的点相乘,最后累加,除以矩阵里面数的个数,最终得到一个数字,放入新的矩阵中。如下图:
在这里插入图片描述

将这个特征矩阵沿着该图片每次滑动一格,最终得到的一个新的矩阵,如下图所示:

在这里插入图片描述

新的矩阵中的数字越接近1,则与对应位置的特征越接近。分别与三个特征进行卷积的结果如下所示:
在这里插入图片描述


Relu激励层
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


池化(Pooling)
一般我们用最大池化(寻找图像区域中的最大值)和平均池化(计算每个图像区域的平均值)。如图为最大池化:
在这里插入图片描述
对所有上一层得到的矩阵进行池化:
在这里插入图片描述
加大网络层数更好的降维:
在这里插入图片描述


全连接层(Fully connected layers)
得到降维后的矩阵,将其放入全连接层中。
ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NjgwMDU0Ng==,size_16,color_FFFFFF,t_70)
在这里插入图片描述
在这里插入图片描述


参考:
https://www.bilibili.com/video/BV1o4411R7B1?p=2
https://mp.weixin.qq.com/s/G5hNwX7mnJK11Cyr7E5b_Q

### VMD-CNN-LSTM CNN-LSTM 架构差异 #### VMD-CNN-LSTM架构特点 VMD (变分模态分解) 是一种用于信号处理的技术,能够将复杂的时间序列数据分解成多个本征模态函数(IMF)[^1]。当应用于CNN-LSTM框架时,在输入层之前加入了一个预处理阶段,即通过VMD算法对原始时间序列进行特征提取降噪。 这种改进使得后续的卷积神经网络(CNN)可以更专注于学习不同频率下的局部模式,而长短期记忆(LSTM)则负责捕捉长时间依赖关系。因此,VMD-CNN-LSTM不仅继承了传统CNN-LSTM的优点,还增强了对于非平稳性噪声敏感性的鲁棒性能. ```python import pyvmd2 as vmd from keras.models import Sequential from keras.layers import Conv1D,LSTM,Dense def build_vmd_cnn_lstm(input_shape,num_classes): model = Sequential() # Apply VMD decomposition before feeding into the network imfs,_=vmd.vmd_decompose(x_train) for i in range(len(imfs)): conv_layer = Conv1D(filters=64,kernel_size=3,padding='same',activation='relu') lstm_layer=LSTM(50,return_sequences=True if i<len(imfs)-1 else False) input_data=np.expand_dims(imfs[i],axis=-1).reshape(-1,*input_shape[-2:]) model.add(conv_layer) model.add(lstm_layer) output_layer=Dense(num_classes, activation="softmax") model.add(output_layer) return model ``` #### CNN-LSTM架构特点 相比之下,CNN-LSTM直接接收未经任何变换处理过的原始时间序列作为输入,并依次经过一维卷积操作提取空间特征以及LSTM单元捕获时间维度上的动态变化规律. 这种结构简单直观易于实现但是可能无法有效应对那些具有较强周期成分或存在较多干扰因素的数据集. ```python from keras.models import Model from keras.layers import Input,Conv1D,LSTM,Dense def build_cnn_lstm(input_shape,num_classes): inputs = Input(shape=input_shape) x = Conv1D(filters=64,kernel_size=3,padding='same',activation='relu')(inputs) x = LSTM(50)(x) outputs = Dense(num_classes, activation="softmax")(x) model = Model(inputs=[inputs],outputs=[outputs]) return model ``` ### 性能对比 由于加入了额外的VMD模块,VMD-CNN-LSTM通常能够在某些特定应用场景下取得更好的泛化能力更高的准确性,尤其是在面对含有多种频带特性的复合型信号时表现尤为突出.然而这也意味着计算成本会相应增加,训练时间内存消耗也会有所增长. 另一方面,CNN-LSTM虽然相对较为基础,但在大多数情况下已经足以满足一般需求,并且其简洁高效的特性使其成为许多实际项目中的首选方案之一.具体选择哪种模型取决于待解决问题的具体性质个人偏好等因素.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值