循环神经网络的从零开始实现 讨论区


#82

unigram应该是P(w)


#83

以为每一个输入,对应的label是它的下一个字,所以label数目会比data数目少一


#84

视频在哪里看到?感觉rnn的数据处理难度明显增加,只看文字教程很吃力.


#85

本节教程在12和14课,14课里讲了数据处理


#86

谢谢,正在看视频14课的批量采样。确实rnn这种数据样本样本之间的依赖性,导致数据处理复杂性增加。

另外有个建议,视频教程14介绍时上来就一起引入num_steps和batch_size. 这个我感觉有点过快,感觉可以先忽略batch_size,或者假定batch_size=1,关注num_steps和数据依赖性。因为batch_size这个事情很大程度是要提高运算性能的。因为数据依赖性本身就足够复杂,而再同时加入性能考虑,那就更加复杂。

所以我感觉对初步理解来说,num_steps和batch_size可以先后引入,降低分析的复杂性。后面再加入batch_size可以让复杂性逐步提高。


#87

image

视频14(37:09)中说随机批量采样下,第三个圈和第四个圈的关系给丢掉了。感觉这么说不完全对。因为虽然这里12个圈,分出了4个批量,但实际上,子序列的定义不一定是1-3, 4-6, 7-9, 10-12. 如果子序列的开始位置本身是随机的,那么就是有可能拿到3-5的子序列。这样的话圈3和圈4的关系并不会被丢掉。

所以这里说的随机批量,其实只是批量号码是随机,但每个批的开始位置都确定好了,这样效果是不是就不那么好。

另外第二种方法,上来就需要把整个序列劈成两半。。这个不是也丢掉了两半之间的依赖关系了吗?


#88

代码中并不是随机取任意开始位置的子序列。也就是把1-3, 4-6, 7-9, 10-12这四个子序列按随机顺序采样。虽然不是严格意义上的随机采样,但可以保证一个epoch能基本全部扫一遍训练数据


#89

为什么不要随机子序列的取样呢?这样既可以保留3-4之间的依赖关系,又不用像第二种方法把序列劈两半. 随机子序列也可以保证一个epoch全部扫一遍训练数据


#90

可以保证一个epoch能基本全部扫一遍训练数据

如果纯随机,极端情况是每次都抽到同一批量


#91

这种极端情况可以避免,比如用代码中的办法对corpus shuffle一次,然后从随机化的corpus中陆续(1-3, 2-4, 3-5, 4-6, etc) 取batch,直到取完,就可以全部扫一遍数据。


#92

楼主你好~请问周杰伦的歌词训练数据jaychou_lyrics.txt.zip在哪里可以下载啊~


#93

但这样跑完1个epoch的迭代次数和之前的就不一样了
一个epoch的迭代次数是
num_examples/batch_size


#94

#95

谢谢你!


#96

如果子序列也为随机,那1个epoch的迭代次数就会变成len(corpus) - num_steps,与batch_size无关,这样会大于教程中两种方法的迭代次数。教程中的两种方法其实都对batch size进行了切割,因此损失了一些子序列


#97

哦,我的意思是,一般的模型训练每个batch只包含batch_size个examples,num_iterations_per_epoch = num_examples / batch_size。如果希望每个epoch都能过一遍所有的example,同时又希望num_iterations_per_epoch最小,可以把全部example先shuffle一遍,然后按shuffle过的example序列,每个batch取batch_size个examples。


#98

去掉前面的’-’,直接输出字符串就可以了


#99

非常非常感谢!


#100

为什么随机批量采样的总样本数公式为:num_examples = (len(corpus_indices) - 1) // num_steps ?
如果序列为 “ABCDE”,num_steps = 2,则样本有:AB,BC,CD,标签分别是 BC,CD,DE
num_examples 应该为 (len(corpus_indices) - num_steps


#101

是non-overlapping的
样本:AB, CD
标签:BC, DE