IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> LSTM结合一维CNN使用的基本理解 -> 正文阅读

[人工智能]LSTM结合一维CNN使用的基本理解

作者:recommend-item-box type_blog clearfix

????????结合一维 CNN 和 RNN 来处理长序列已经十分常见,然而这对组合对身为小白的我造成了一定的困扰。要知道CNN各通道的输出可是平行的,并不存在什么先后顺序,然而RNN却要求的输入却是序列,这一开始令我十分不解,而后通过对CNN和RNN的输出输入参数的数量和形状为切入点总算是让我搞明白了它们的运作机理。? ??

简化模型如下:

from keras.models import Sequential
from keras import layers

model = Sequential()
model.add(layers.Conv1D(64, 5, activation='relu',
                        input_shape=(None, 10)))
model.add(layers.LSTM(32))

看看模型的参数数量:

model.summary()
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv1d_1 (Conv1D)            (None, None, 64)          3264      
_________________________________________________________________
lstm_1 (LSTM)                (None, 32)                12416     
=================================================================
Total params: 15,680
Trainable params: 15,680
Non-trainable params: 0
_________________________________________________________________

可以看到卷积层的参数数量是3264个,计算公式为:

(过滤器的长度 * 输入的深度 + 1) * 卷积层通道数?

也就是(5 x 10 + 1)x 64 = 3264

LSTM层的参数数量是12416个,计算公式为:

4 x (64 x 32 + 32 x 32 + 32) = 12416

接下来大概介绍一下这两个参数数量代表什么含义(有错漏还请指正):

? ? ? ? 一维卷积层接受形状为[samples, time_steps, depth]的输入,以输入一句由n个单词组成,其中每个单词用长度为10的密集向量表示的句子为例,则该输入的samples=1,time_steps=n, depth=10,形状为[1, n,?10]。

????????假定该卷积层有64个长度为5的filter,由于filter的depth必须与input的depth等同,故weight参数数量为5x10x64,bias的数量为1x64

????????filter在time_steps轴上进行卷积操作,操作过程与二维卷积思路一致,当padding='same'的时候,卷积后每个channel应当得到长度仍为time_steps,深度为depth的二维张量,但由于要在depth轴上求和,所以每个channel给出长度为time_steps的一维张量,整个层最终给出形状为[samples, time_steps, channels]的输出,例子中为[1, n, 64], 该输出可直接传入LSTM层。其作用是将原本每个单词的特征(可以由Embeding给出)转化为cnn给出的特征,相当进行了一次抽象程度更高的embedding。另外,只需对卷积层的输出进行pooling操作就可以减小time_steps的长度(一般说来不对channels进行pooling,与二维卷积同样一致),毕竟过长的序列很容易导致训练过程中出各种幺蛾子。

? ? ? ? ?接下来LSTM层的参数数量就很好理解了,由于LSTM层得到的输入形状为[samples, time_steps, channels],由于LSTM自身有32个输出通道,那么根据LSTM的基本架构:

? ? ? ? ? ?output_t = activation(dot(state_t, Uo) + dot(input_t, Wo) ?+ bo) * c_t

Uo是一个形状为[32, 32]的矩阵,Wo是一个形状为[channels, 32]的矩阵,bo形状为[, 32],参数数量和为32 x 32 + 64?x 32?+?1 x 32 = 3104。又由于输入门,遗忘门和输出门三个变换的形式都和 基本RNN 单元相同,参数数量也相同,所以整个LSTM层的总参数数量为4 x 3104 = 12416

 

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-04 12:51:04  更:2021-10-04 12:52:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/22 10:56:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码