作家
登录

如何用PyTorch实现递归神经网络?

作者: 来源: 2017-04-26 13:03:04 阅读 我要评论

  1. # PyTorch (also works in Chainer) 
  2. # (this code runs on every forward pass of the model) 
  3. # “words” is a Python list with actual values in it 
  4. h = h0 
  5. for word in words:    h = rnn_unit(word, h) 

PyTorch 是第一个 define-by-run 的深度进修框架,它与静态图框架(如 TensorFlow)的功能和机能相匹配,使其能很好地合适大年夜标准卷积神经收集(convolutional network)到最猖狂的强化进修(reinforcement learning)等思惟。所以让我们来看看 SPINN 的实现。

代码

在开端构建收集之前,我须要设置一个数据加载器(data loader)。经由过程深度进修,模许可以经由过程数据样本的批处理进行操作,经由过程并行化(parallelism)加快练习,并在每一步都有一个更腻滑的梯度变更。我想在这里可以做到这一点(稍后我将解释上述客栈操作过程若何进行批处理)。以下 Python 代码应用内置于 PyTorch 的文本库的体系来加载数据,它可以经由过程连接类似长度的数据样本主动生成批处理。运行此代码之后,train_iter、dev_iter 和 test_itercontain 轮回遍历练习集、验证集和测试集分块 SNLI 的批处理。

你可以在 train.py中找到设制揭捉?练轮回和精确性(accuracy)测量的其余代码。让我们持续。如上所述,SPINN 编码器包含参数化的 Reduce 层和可选的轮回跟踪器来跟踪句子高低文,以便在每次收集攫取单词或应用 Reduce 时更新隐蔽状况;以下代码代表的是,创建一个 SPINN 只是意味着创建这两个子模块(我们将很快看到它们的代码),并将它们放在一个容器中以供稍后应用。

这个句子进行编码的一种方法是应用含有解析树的神经收集构建一个神经收集层 Reduce,这个神经收集层可以或许组合词语对(用词嵌入(word embedding)表示,如 GloVe)、 和/或短语,然后递归地应用此层(函数),将最后一个 Reduce 产生的结不雅作为句子的编码:

  1. import torchfrom torch import nn 
  2. # subclass the Module class from PyTorch’s neural network package 
  3. class SPINN(nn.Module):    
  4.  def __init__(self, config):         
  5. super(SPINN, self).__init__()        
  6.  self.config = config        
  7.  self.reduce = Reduce(config.d_hidden, config.d_tracker)         
  8. if config.d_tracker is not None:            
  9.  self.tracker = Tracker(config.d_hidden, config.d_tracker) 

当创建模型时,SPINN.__init__ 被调用了一次;它分派和初始化参数,但不履行任何神经收集操作或构建任何类型的计算图。在每个新的批处理数据上运行的代码由 SPINN.forward 办法定义,它是用户实现的办法顶用于定义模型向前过程的标准 PyTorch 名称。膳绫擎描述的是客栈操作算法的一个有效实现,即在一般 Python 中,在一批缓冲区和客栈上运行,每一个例子都对应一个缓冲区和客栈。我应用转移矩阵(transition)包含的「shift」和「reduce」操作集合进行迭代,运行 Tracker(如不雅存在),并遍历批处理中的每个样本来竽暌功用「shift」操作(如不雅请求),或将其添加到须要「reduce」操作的样本列表中。然后在该列表中的所有样本上运行 Reduce 层,并将结不雅推送回到它们各自的客栈。

  1. def forward(self, buffers, transitions): 
  2.         # The input comes in as a single tensor of word embeddings; 
  3.         # I need it to be a list 

      推荐阅读

      未来的人们,将会如何看待我们现在的机器人?

    【义务编辑:wangxueyan TEL:(010)68476606】 >>>详细阅读


    本文标题:如何用PyTorch实现递归神经网络?

    地址:http://www.17bianji.com/lsqh/34965.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)