语言模型数据集(周杰伦专辑歌词) 讨论区

http://zh.diveintodeeplearning.org/chapter_recurrent-neural-networks/lang-model-dataset.html

红线部分我不懂为什么要batch_len-1,如果减1 我觉得结果就缺了一半,


但是我去掉减1运行代码就报错。
新手刚学习深度学习,想问问哪位小哥哥能解决一下我的疑问,我将万分的感谢。:blush:

1赞

data_len 就是歌词的长度,你这是36,但是他的索引只到35。刚好你的num_step选择的是6, 36//6 = 6,在循环中当i =5,i = 56=30,输出Y时,i+num_step+1 =37,索引溢出了。而35//6 = 5, i在循环中当最大为4,i = 46=24,输出Y时,i+num_step+1 =31,索引不会溢出。
-1 就是为了避免溢出的情况,其实你这刚好赶巧了,现在提供的代码,不 -1 也不会有错。

时隔这么久还是能秒懂,万分感谢.:blush:

36 输出就4个样本? X:[3,4,5,6,7,8] Y[4,5,6,7,8,9,10] 这种不要了?

X=[]
Y=[]
while i+1<len(corpus-num_step):
X.append(corpus[i:i+num_step])
Y.append(corpus[i+1:i+num_step+1])
i+=1
#生成batch
batch 不是在训练过程中直接指定的吗?
整个划分到训练奇奇怪怪

char-level 的歌词生成方法,有什么方法可以改进吗?提高生成的歌词质量。

还有一种随机小批量的方法就是两个序列可以前后错开一位,这样可以生成更多的随机样本
num_examples = len(corpus_indices) - num_steps - 1
epoch_size = num_examples // batch_size
example_indices = list(range(num_examples))
random.shuffle(example_indices)

def _data(pos):
    return corpus_indices[pos:pos + num_steps]

for i in range(0,epoch_size):
    i = i * batch_size
    batch_indices = example_indices[i:i + batch_size]
    X = [_data(j) for j in batch_indices]
    Y = [_data(j + 1) for j in batch_indices]
    yield nd.array(X,ctx),nd.array(Y,ctx)

就是说我的的那种 也可以是吧 在随机batch的方法下

这个看起来挺不错的,赞!

不过有没有谁能搞定序列样本是完整句子的方法?

我最近在做,你可以参考后面章节情感分析那里,不过我没有看那个我是自己scratch的。

1赞

歌词数据集哪里可以下载到,有提供数据吗/?

我想请问一下这个教程里面batch执行的机制。我记得Stochastic gradient descent中,是根据一整个批量更新权重的,那么将这个原理搬到这里,为什么最后划分的batch结果是:
X: [[ 0. 1. 2. 3. 4. 5.], [15. 16. 17. 18. 19. 20.]]
X: [[ 6. 7. 8. 9. 10. 11.], [21. 22. 23. 24. 25. 26.]]

而不是:
X: [[ 0. 1. 2. 3. 4. 5.], [ 6. 7. 8. 9. 10. 11.] ]
X: [[15. 16. 17. 18. 19. 20.], [21. 22. 23. 24. 25. 26.]]

若是按照这个教程里的划分方法,怎么运用SGD而不重复初始化隐藏层状态。每个批量里不同epoch的数据(比如[[ 0. 1. 2. 3. 4. 5.]与 [ 6. 7. 8. 9. 10. 11.]的隐藏状态不会相互干扰嘛?
请大神指教,谢谢!

同样有这个疑惑

ctx是什么?

指定存储在gpu上 第4.6节有讲