TensorFlow框架下的RNN实践小结
截至目前,TensorFlow的RNN APIs还处于Draft阶段。不过据官方解释,RNN的相关API已经出现在Tutorials里了,大幅度的改动应该是不大可能,现在入手TF的RNN APIs风险应该是不大的。
目前TF的RNN APIs主要集中在tensorflow.models.rnn中的rnn和rnn_cell两个模块。其中,后者定义了一些常用的RNN cells,包括RNN和优化的LSTM、GRU等等;前者则提供了一些helper方法。
创建一个基础的RNN很简单:
1 |
from tensorflow.models.rnn import rnn_cell |
2 |
cell = rnn_cell.BasicRNNCell(inputs, state) |
创建一个LSTM或者GRU的cell?
1 |
cell = rnn_cell.BasicLSTMCell(num_units) #最最基础的,不带peephole。 |
2 |
cell = rnn_cell.LSTMCell(num_units, input_size) #可以设置peephole等属性。 |
3 |
cell = rnn_cell.GRUCell(num_units) |
调用呢?
1 |
output, state = cell(input, state) |
这样自己按timestep调用需要设置variable_scope的reuse属性为True,懒人怎么做,TF也给想好了:
1 |
state = cell.zero_state(batch_size, dtype=tf.float32) |
2 |
outputs, states = rnn.rnn(cell, inputs, initial_state=state) |
再懒一点:
1 |
outputs, states = rnn.rnn(cell, inputs, dtype=tf.float32) |
怕overfit,加个Dropout如何?
1 |
cell = rnn_cell.DropoutWrapper(cell, input_keep_prob=0.5, output_keep_prob=0.5) |
做个三层的带Dropout的网络?
1 |
cell = rnn_cell.DropoutWrapper(cell, output_keep_prob=0.5) |
2 |
cell = rnn_cell.MultiRNNCell([cell] * 3) |
3 |
inputs = tf.nn.dropout(inputs, 0.5) #给第一层单独加个Dropout。 |
一个坑——用rnn.rnn要按照timestep来转换一下输入数据,比如像这样:
1 |
inputs = [tf.reshape(t, (input_dim[0], 1)) for t in tf.split(1, input_dim[1], inputs)] |
rnn.rnn()的输出也是对应每一个timestep的,如果只关心最后一步的输出,取outputs[-1]即可。
注意一下子返回值的dimension和对应关系,损失函数和其它情况没有大的区别。
目前饱受诟病的是TF本身还不支持Theano中scan()那样可以轻松实现的不定长输入的RNN,不过有人反馈说Theano中不定长训练起来还不如提前给inputs加个padding改成定长的训练快。
TensorFlow框架下的RNN实践小结的更多相关文章
- TensorFlow框架(5)之机器学习实践
1. Iris data set Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理.Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集.数据集包含150个数据集,分为3类, ...
- TensorFlow框架(6)之RNN循环神经网络详解
1. RNN循环神经网络 1.1 结构 循环神经网络(recurrent neural network,RNN)源自于1982年由Saratha Sathasivam 提出的霍普菲尔德网络.RNN的主 ...
- python机器学习TensorFlow框架
TensorFlow框架 关注公众号"轻松学编程"了解更多. 一.简介 TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运 ...
- AlexeyAB DarkNet YOLOv3框架解析与应用实践(五)
AlexeyAB DarkNet YOLOv3框架解析与应用实践(五) RNNs in Darknet 递归神经网络是表示随时间变化的数据的强大模型.为了更好地介绍RNNs,我强烈推荐Andrej K ...
- MySQL在Django框架下的基本操作(MySQL在Linux下配置)
[原]本文根据实际操作主要介绍了Django框架下MySQL的一些常用操作,核心内容如下: ------------------------------------------------------ ...
- 人工智能 tensorflow框架-->简介及安装01
简介:Tensorflow是google于2015年11月开源的第二代机器学习框架. Tensorflow名字理解:图形边中流动的数据叫张量(Tensor),因此叫Tensorflow 既 张量流动 ...
- 【TensorFlow篇】--Tensorflow框架实现SoftMax模型识别手写数字集
一.前述 本文讲述用Tensorflow框架实现SoftMax模型识别手写数字集,来实现多分类. 同时对模型的保存和恢复做下示例. 二.具体原理 代码一:实现代码 #!/usr/bin/python ...
- Tensorflow之MNIST的最佳实践思路总结
Tensorflow之MNIST的最佳实践思路总结 在上两篇文章中已经总结出了深层神经网络常用方法和Tensorflow的最佳实践所需要的知识点,如果对这些基础不熟悉,可以返回去看一下.在< ...
- 基于TensorFlow的循环神经网络(RNN)
RNN适用场景 循环神经网络(Recurrent Neural Network)适合处理和预测时序数据 RNN的特点 RNN的隐藏层之间的节点是有连接的,他的输入是输入层的输出向量.extend(上一 ...
随机推荐
- [20171225]RMAN-06808: SECTION SIZE cannot be used when piece limit is in effect.txt
[20171225]RMAN-06808: SECTION SIZE cannot be used when piece limit is in effect.txt --//朋友拿我的一些例子来测试 ...
- centos6启动服务说明
centos6启动服务说明 阅读目录 centos6.9最小化安装下的启动服务 其他服务(仅供参考,持续更新) 此表转自:参考1.参考2.另有多处补充及纠正. 1. centos6.9最小化安装下的启 ...
- PowerDesin把name复制到Comment,把Comment复制到Name
PowerDesin把name复制到Comment,把Comment复制到Name的方法: PowerDesigner->Tools->Execute Commands->Edit/ ...
- SQLServer限制IP,限制用户,限制SSMS登录
SQL Server不像Mysql那样原生支持限制IP登录. 但可以使用Login触发器来实现. 以下为使用Login触发器实现限制用户u_user_r在指定IP192.168.1.205使用SSMS ...
- NPOI帮助类
/// <summary> /// NPOI导出帮助类 /// </summary> public class NPOIHelper { /// <summary> ...
- C#语言————第四章 深入C#的String类
*********类型转换**************** Convert与Parse的区别: Convert可以将任何内置类型转换为其他任何内置类型 XX.Parse:只能将字符串转换为XX类型例如 ...
- [转]js版的md5()
转自:http://blog.163.com/a_hc/blog/static/1623434200831832441896/ <script language=javascript>/* ...
- Linux进程描述符task_struct结构体详解--Linux进程的管理与调度(一)【转】
Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,这个结构体包含了一个进程所需的所有信息.它定义在include/linux/sched.h文件中. 谈到task_str ...
- xshell 5连接NAT模式的虚拟机
这里简称真实的外部电脑为主机.当虚拟机NAT模式上网时(区别于桥接上网,桥接上网的话,主机和虚拟机可以互访),虚拟机是可以访问主机的,但是由于NAT机制,导致主机不能访问虚拟机,那么如何让主机上的xs ...
- [Compression] Hadoop 压缩
0. 说明 Hadoop 压缩介绍 && 压缩格式总结 && 压缩编解码器测试 1. 介绍 [文件压缩的好处] 文件压缩的好处如下: 减少存储文件所需要的磁盘空间 加速 ...