keras上的RNN代码理解
来源:互联网 发布:装修图制作软件 编辑:程序博客网 时间:2024/06/01 10:20
keras上的RNN代码理解
来自我的github:https://github.com/B-C-WANG/AI.Learning/tree/master/AI.Learning.Notes.RNN.I
babi_memnn.py
用记忆神经网络训练bAbI数据集
- bAbI数据集下载到一半时如果取消,会得到不完整的文件而报错,此时应当在代码中打印出下载地址,如path = get_file(...) print(path)
,然后删除这个文件,不过一般在home目录下,windows在用户目录下
- 在分析代码时,先直接看模型summary以及喂入的数据集,之后返回看数据集是怎样得到的。
1. 函数tokenize(sent)
:输入一个句子,将句子的每一个词和符号作为元素存储在list中
2. parse_stories(lines, only_supporting)
:only_supporting为True时,只有支持答案的句子才会出现。这个函数基于tokenize
,针对bAbI的数据集,输入行,得到单词的list
3. get_stories()
:基于parse_stories
,输入文件名,解析出句子中词语的list,比如某个输出:[(['Mary', 'moved', 'to', 'the', 'bathroom', '.', 'John', 'went', 'to', 'the', 'hallway', '.'], ['Where', 'is', 'Mary', '?'], 'bathroom'), 每个set是一个完整的问题,含有两个list和一个string,前一个list是描述,后一个是问题,最后一个string是答案
vectorize_stories()`直接转换为词向量,一个单词具有独一无二的序号
4.
5. 描述的最大长度为68个单词,问题的最大长度为4个单词,用来训练的数据为10000组,用来测试的数据为1000组
6. 所采用的问题集都是关于空间位置逻辑的,比如“a在b处,b在c处,问d在哪?”因而,描述的shape为(None, 68),多为[0,0,0,…,18,n,1],因为问题结尾多为”the … .”。问题的shape为(None, 4),几乎都为[7,13,n,2],对应于”where is … ?”,而答案的shape为(None, 22),是22维的独热编码(整个数据集的词汇量为22个,多为“bedroom, hallway, bathroom”等空间位置词汇,以及人名)
模型结构
模型结构包含并联层,在layer前用n-m-l注明,n为层的深度,m,l等等为同一个串联层的标志,在这里m=1代表描述的输入,m=2代表问题的输入。layer后面的括号中代表了对哪个层进行了运算(省略了dropout和activation层)
之后输出的(None, 22)和结果和真实答案(None, 22)进行损失计算。
babi_rnn.py
数据处理与上一例类似,只不过改变了数据集,描述的最大长度为552,问题最大长度为5,答案的维度(总也就是词汇量)为36
模型结构
conv_lstm.py
- 这个例子首先认为创造一个移动的矩形,形成一段影片,之后根据这个影片预测出矩形之后的移动,涉及到图像处理和时间序列,因而需要ConvLSTM
- 需要较高显存才可执行,可将n_samples调低一些,同时调整which
- 模型结构(输入为(batch_size, n_frames[帧数], width, height, channels))
1. 创建一个指定大小、帧率和batch_size的影片作为输入。在影片中添加3~7个正方形,设定正方形的运动起始点和运动方向
2. 创建输入数据,即创建正方形的移动影片,并在视频加上噪点,是为了防止数据为0,增强模型robust
2. 创建下一刻的数据作为y,y的影片时间为输入的时间t+1,相当于y总是快于输入一秒,这样训练能够预测,y不加入噪点
3. 用上述模型,以完整影片作为输入,影片时间+1的y作为求取loss的输出,进行训练
预测和可视化
1. 训练完成之后,首先用which变量选择一个sample,之后会取7帧作为输入,进行fit,得到预测之后的几帧,变量为track
2. 截取和预测片段相同的真实片段track2,将track和track2的每一帧作图在一起,输出图像进行对比
imdb_lstm.py
利用LSTM处理IMDB数据集,IMDB是一个网络电影数据集,输入是已经转化为词向量的数据,输出为正面或负面评价,是二分类问题。
模型
imdb_cnn_lstm.py
在IMDB中使用conv1D的卷积。LSTM可以处理序列化的数据,而一维卷积则是类似于2维卷积,处理序列上相关的数据。
模型
imdb_bidirecational_lstm.py
双向LSTM网络
模型
mnist_hierarchical_rnn.py
多层反馈神经网络,这个例子中是采用的keras函数式建模(不同于
Model.add(),采用layer(parameters)(last_layer))。
模型
将(28, 1)的行向量用LSTM编码成(128)的行向量,之后将(28, 128)的图形用LSTM编码成(128)的图像向量,最后全连接获得标签。
体会
- embedding层是专用于语言处理的层,能够降低维度,在词向量数据集IMDB中经常使用,而在图形处理采用convLSTM时,没有用到这个层。这个层的具体作用可见keras手册
- LSTM层在keras中的使用类似于dense层,convLSTM也可直接当做conv使用,在了解了LSTM的机理之后可以不用造轮子直接使用
- keras上的RNN代码理解
- TensorFlow/Keras中CNN和RNN数据结构的理解
- Keras RNN 与 情感分类(代码)
- [深度学习框架] Keras上使用RNN进行mnist分类
- RNN的理解
- RNN的简单理解
- keras一些example代码理解
- 十分钟掌握Keras实现RNN的seq2seq学习
- RNN的简单理解-part2
- rnn学习,keras rnn实践 文本生成
- keras的一些例子理解
- 代码 RNN
- 理解递归神经网络(RNN)的展开
- 深度学习-RNN网络的理解
- RNN上的BPTT的简单推导
- 用Python写出LSTM-RNN的代码!
- [代码]基于RNN的文本生成算法
- K-RNN算法的Matlab代码
- Android视频直播的实现
- BZOJ 2850: 巧克力王国 kdtree
- iOS调用QQ客户端,发起临时会话
- RxBus基于Rxjava2.0---支持Sticky事件
- Rxjava2.0 再探---操作符
- keras上的RNN代码理解
- 用Qt开发安卓应用,是不是不成熟?有什么缺陷?
- 怎样使用Delphi让应用程序不在系统任务条上显示呢?
- jdbc的批量操作
- centos7 scrapy 创建项目报错 TLSVersion.TLSv1_1: SSL.OP_NO_TLSv1_1,
- JAVA中使用JSON进行数据传递
- 逆波兰表达式
- POJ 3250 Bad Hair Day (单调栈)
- KVM 操作虚拟机常用命令