循环神经网络的简洁实现 讨论区

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

想问怎么用预训练的词向量初始化embedding层呀?

我们会在今后课程中考虑这个use case,直接载入预训练词向量 @mli

例如,假设id_to_vec是预训练的
layer=Embedding()
layer.weight.set_data(idx_to_vec)

比我用自定义的init的方法要方便不少 谢谢

你好,裁剪梯度的话,在mxnet.optimizer.Optimizer中可以直接设置的吧?

gluon.utils.clip_global_norm(grads,  clipping_norm * num_steps * batch_size)

为什么教程里要手写呢,有啥区别啊?

都可以,例如
https://discuss.gluon.ai/t/topic/2111/2

你好,我对Embedding有问题
如果RNN是用于其他预测任务,例如应用于图像,Pose等。可以不用Embedding吗?如果用的了话,好处是什么?

维度为x的每个input需要用Embedding layer转成维度为h的向量,再在RNN中传递?

他的作用应该就是降维吧?
如果对于本身维度就比较低的数据,不做embedding也行吧

不好意思,另外一个问题。那个RNN网络的Layer Normalization在目前版本里有相应接口或者实现吗?

embedding layer可以把离散的onehot向量转换成低维的连续向量,相当于对离散id提供一个look up table。

1赞

你好。。train了一个用LSTMCell组成的网络
在test的时候,加或者不加 autograd.record(),其输出是不一样的,为什么? autograd.record不是train的时候才用的嘛?

with autograd.record():
    pred1 = net(data, state)
pred2 = net(data, state)

data,state,net完全一样,但是输出 pred1 不等于 pred2

with autograd.record(): 会对后面记录的网络的某些层的操作有影响,比如dropout是否工作,batch norm 如何工作等,所以如果网络中有类似的这些层的话结果会不一样。我读源码的感觉是这样的,不知道对不对。还求大神们指教。你可以看看 autograd.record()这个括号里有参数,是不是设置 train=False 就一样了?

下面这个是nd.Dropout 的源码,里面也是这么解释的在具体通过什么机制的话,估计得看Defined in src/operator/nn/dropout.cc:L79这个,我胡说的,这个我不太会,有大神看到的话,给我也指条明路。
def Dropout(data=None, p=_Null, mode=_Null, out=None, name=None, **kwargs):
r"""Applies dropout operation to input array.

- During training, each element of the input is set to zero with probability p.
  The whole array is rescaled by :math:`1/(1-p)` to keep the expected
  sum of the input unchanged.

- During testing, this operator does not change the input if mode is 'training'.
  If mode is 'always', the same computaion as during training will be applied.

Example::

  random.seed(998)
  input_array = array([[3., 0.5,  -0.5,  2., 7.],
                      [2., -0.4,   7.,  3., 0.2]])
  a = symbol.Variable('a')
  dropout = symbol.Dropout(a, p = 0.2)
  executor = dropout.simple_bind(a = input_array.shape)

  ## If training
  executor.forward(is_train = True, a = input_array)
  executor.outputs
  [[ 3.75   0.625 -0.     2.5    8.75 ]
   [ 2.5   -0.5    8.75   3.75   0.   ]]

  ## If testing
  executor.forward(is_train = False, a = input_array)
  executor.outputs
  [[ 3.     0.5   -0.5    2.     7.   ]
   [ 2.    -0.4    7.     3.     0.2  ]]


Defined in src/operator/nn/dropout.cc:L79

Parameters
----------
data : NDArray
    Input array to which dropout will be applied.
p : float, optional, default=0.5
    Fraction of the input that gets dropped out during training time.
mode : {'always', 'training'},optional, default='training'
    Whether to only turn on dropout during training or to also turn on for inference.

out : NDArray, optional
    The output NDArray to hold the result.

Returns
-------
out : NDArray or list of NDArrays
    The output of this function.
"""

我想问一下有中文的embedding吗?如果mxnet没有,现在有哪些框架或者组织提供了吗?求mxnet给个中文的!!!

我看AlexNet的教程 network里也有dropout,但是test时候没有加autograd.record…
它究竟是怎么影响的。。

fasttext有啊
http://zh.gluon.ai/chapter_natural-language-processing/pretrained-embedding.html

练习第二题

自问自答 https://github.com/facebookresearch/fastText/blob/master/pretrained-vectors.md

巧了,居然同时,赶紧看看例题


这个没太看懂,这个不是必须的吧,会影响结果嘛?@astonzhang

视频教程里解释了,好像第十四课?