长短期记忆(LSTM) 讨论区

http://zh.diveintodeeplearning.org/chapter_recurrent-neural-networks/lstm.html

gluon官网教程运行出现这个错误:
…\utils.py:266: RuntimeWarning: invalid value encountered in greater
if norm > clipping_norm:
Traceback (most recent call last):
File “D:/deep/code/mxnet_test/gluon-tutorials-zh-master/rnn_test/GRU_test.py”, line 84, in
idx_to_char=idx_to_char, char_to_idx=char_to_idx)
File “…\utils.py”, line 349, in train_and_predict_rnn
exp(train_loss / num_examples)))
OverflowError: math range error

LSTM教程也一样

你的运行环境和python版本是什么,如果把num_steps改小呢

是不是grad clipping没起作用啊,不过我在CPU和GPU两个版本上的mxnet都没有办法复现这个错误,python3.6.

你可以先更新一下mxnet看看错误还在不:
pip install mxnet --pre --upgrade

如果不work,试试把梯度裁剪换成这个:

def grad_clipping(params, clipping_norm, ctx):
    """Gradient clipping."""
    if clipping_norm is not None:
        norm = nd.array([0.0], ctx)
        try:
            for p in params:
                norm += nd.sum(p.grad ** 2)
        except:
            for p in params:
                p.grad[:] *= 0
        else:
            norm = nd.sqrt(norm).asscalar()
            if norm > clipping_norm:
                for p in params:
                    p.grad[:] *= clipping_norm / norm

如果还不work,可以看看不打印ppl,只打印loss,看看loss有多大

你好,请问你解决了么?我也有用到了这个错误,而且当不打印困惑度的时候预测字都是一样的

后来发现是框架的一个bug,就是用GPU计算平方会inf,你把版本更新一下,看可以不,或者不用平方,用x*x。

谢谢~我最近才看的这个应该比较新,改成p.grad*p.grad好像就正常了

2赞

您好, 书上的lr=1e2, 这么大么?写错了吧…

同样好奇为什么这么大。

请教,有没有多层LSTM或者GRU的网络的简单实现,能给予参考。
输入为多个features,输出为数值标量(不是分类)。
用实例模型改了半天,还是不太好用,所以请教给点参考。谢谢。

多层RNN
http://zh.d2l.ai/chapter_natural-language-processing/sentiment-analysis-rnn.html

输出个数设1就能预测数值标量了

1赞

大佬们好, 对于函数train_and_predict_rnn 里面的sgd(params, lr, 1)有点疑问,我记得以前都是sgd(params, lr, batch_size)才对


求大佬们指教一下。

aston大神,沐神,你们好。真的很想知道练习中的 * 既然候选记忆细胞已通过使用tanh函数确保值域在-1到1之间,为什么隐藏状态还需要再次使用tanh函数来确保输出值域在-1到1之间?这个问题的答案,能回答下吗?谢谢了。

1赞

你可以看一下with里面的最后一句话,l 已经mean()过了,也就是说已经除以了batch_size,而以前一般都是直接求各自的 l 以及其梯度,所以sgd时才需要除以batch_size,所以这里算是提前除好了batch_size

1赞

看了前面的章节,已经理解了。 谢谢啊

大佬您好, 我在参照文本情感分析代码照着抄写时候发现 glove_embedding = text.embedding.create(
‘glove’, pretrained_file_name=‘glove.6B.100d.txt’, vocabulary=vocab) 这句话我不能处理,我不是用他的glove 我是自己创建了一个文本
image

区别

image

我使用 text.embedding.create( ‘glove’, pretrained_file_name=‘AGCT.5d.txt’, vocabulary=vocab) 报错不知道怎么改,我是基因数据一串AGCT字符串,本人学生物的,编程实在不行,求问需要怎么改动呢?万分感谢 !

不好意思我还没看到那后面,学地比较慢,我也不太清楚

顶一下,我也没想明白这个问题。

大佬们好,这节学习了lstm收货颇多,但是对多隐层lstm还有点疑问,想来请教一下各位,


上面是原始的lstm 下面是我理解的多隐层lstm,不知道对不对,还有就是红线处Ht-1需不需要连接第二层神经元呢?:kissing_heart: