赞
踩
20201101 -
昨天在整理论文的时候,看到了这篇论文《Generating Sequences With Recurrent Neural Networks》,实际上这篇论文我很早就看了,只不过当时没有具体来理解。昨天仔细看了看,发现他的这个网络结构图,跟我之前一致理解的那种形式不太一样,挺奇怪的。
这里无法理解的地方,就是为什么他的这个输入和多个隐藏层的都有关系呢?而且看下面的注释,并不是逻辑上的一个演示作用,而是实际的物理连接。该篇论文有一个博客[4]讲解了部分内容,可以从这里作为切入点。
那么基于这部分疑惑,我去搜索了这部分源码,通过[1]上的关联代码,虽然显示的是这个文章,但前面的star比较高的仓库都感觉不是这篇论文的。
第一个就不看了,是torch版本的,暂时没看,直接看的第二个,他们的实质内容应该是一样的,我来截取部分tensorflow的代码看看。
class Model(): def __init__(self, args, training=True): self.args = args if not training: args.batch_size = 1 args.seq_length = 1 # choose different rnn cell if args.model == 'rnn': cell_fn = rnn.RNNCell elif args.model == 'gru': cell_fn = rnn.GRUCell elif args.model == 'lstm': cell_fn = rnn.LSTMCell elif args.model == 'nas': cell_fn = rnn.NASCell else: raise Exception("model type not supported: {}".format(args.model)) # warp multi layered rnn cell into one cell with dropout cells = [] for _ in range(args.num_layers): cell = cell_fn(args.rnn_size) if training and (args.output_keep_prob < 1.0 or args.input_keep_prob < 1.0): cell = rnn.DropoutWrapper(cell, input_keep_prob=args.input_keep_prob, output_keep_prob=args.output_keep_prob) cells.append(cell) self.cell = cell = rnn.MultiRNNCell(cells, state_is_tuple=True)
可以看到,他就是一个多层的RNN模型,所以这里其实挺尴尬的,也就是说,论文中图中展示的,跟实际上代码的好像不一样,不知道是什么地方我理解错了。上面的代码是我比较熟悉的,之前使用keras就是弄的这种东西。
char-rnn
的代码是由博客[3]所引出,只不过他使用的是torch。但是这个博客我之前在学习LSTM的时候看到过,很多文章都引用了他,我也仔细看过,只不过当时没有具体去看他后面生成文本的部分。他所使用的模型,就是我所熟悉的,只不过在这个里面,他是生成的序列,而不是像keras中,默认输出的最后一个状态。这里算是有所不同,但是没什么本质上的区别。
但是这里呢,最关键的是,他后面的文本生成部分的内容,他生成了小说,生成了俚语,甚至最后还有源代码,不过当然他自己也说了,可能这个源代码没有办法编译,而且可能也没有含义,但是毕竟提供了一种思路。我之前也看过利用GAN来生成DGA的文章。
说到底,最初的问题还是没有解决,这篇论文的图中的网络结构,到底是什么意思?这部分可能需要看他所关联的代码中更多的部分。要解决的本质问题就是,这个网络结构到底是真的,还是仅仅是抽象化的描述。
另外,就是需要考虑后续进行RNN实现相关的生成测试了。
[1]Generating Sequences With Recurrent Neural Networks
[2]char-rnn-tensorflow
[3]The Unreasonable Effectiveness of Recurrent Neural Networks
[4]Handwriting Generation Demo in TensorFlow
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。