您的位置:首页 > 编程语言 > Python开发

【论文笔记】Recurrent Neural Network Regularization

2016-12-11 23:45 549 查看
本文模型:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/models/rnn/ptb

这篇文章引用量也是超高,总体来说因为他有一个大亮点,那就是Dropout on RNN!

 

Overfit一直是困扰RNN的大问题,曾经有过不少实验对RNN加以dropout,但是效果都不好,因为循环放大了输入的噪声。

这篇文章的方法其实也已经有人提出过了,本文对此方法在很多任务(image caption/translation/language modeling/speech recognition)上进行了进一步的验证。

只有每个cell的input的output进行dropout,即L层dropout L+1 次(还有输出层),效果甚好,如图所示:



后面的文章中作者在几个任务上做了验证,文中说的也不多,这里不详细解释。

如果我们自己写模型,要怎么使用这个方法呢?我们下面在前面讲过的char-RNN with TensorFlow的基础上进行一下改进,其实很简单,就只有几行代码:


在train.py的55行左右加上如下代码,为命令行输入参数,dropout的比例。
#新增
#dropout比例
parser.add_argument('--keep_prob', type=float, default=0.5,
help='dropout ratio')


打开train.py,在cell = cell_fn(args.rnn_size, state_is_tuple=True)下面添加
#新增
if not infer: # 在训练时
# 这里这个dropoutwrapper其实是为每一个lstm cell的输入以及输出加入了dropout机制
cell = tf.nn.rnn_cell.DropoutWrapper(cell, output_keep_prob=args.keep_prob)

这里实际上就是在每一个LSTM cell外面包了一层dropout,对他的输出dropout。

在look_up = tf.nn.embedding_lookup(embedding, self.input_data)后面添加
#新增#对输入dropout
if not infer: # 在训练时
look_up = tf.nn.dropout(look_up, args.keep_prob)
这里就是对第一次输入dropout。

这样就完成本文的功能,是不是很简单?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐