你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

优化的 RNN 堆栈

实现一个或多个循环网络层的优化 CuDNN5 RNN 堆栈。

OptimizedRNNStack (weights, input,
                   hiddenDims, numLayers = 1,
                   bidirectional = false,
                   recurrentOp='lstm')

parameters

  • weights:一个权重矩阵,其中包含所有模型参数作为单个矩阵。 使用以下 维度推理,cf.description。
  • input:要向其应用一个或多个重复网络的堆栈的数据。 必须是序列,不得稀疏。
  • hiddenDims:每个层中隐藏状态的维度,如果双向,则为两个方向的维度
  • numLayers (默认值:1) :层数
  • bidirectional (默认值:false) :如果为 true,则模型为双向
  • recurrentOp (默认值: lstm) :选择 RNN 类型。 允许的值:lstm、、grurnnTanhrnnReLU

说明

此函数允许访问 CuDNN5 RNN,这是对一个或多个重复网络的堆栈的高效实现。 与 BrainScript 中的计算网络相比,我们在 5 次顺序上观察到了加速。 尽管与 BrainScript 实现不一样灵活,但训练时间的速度可能值得 (注意,此类模型只能部署在具有 GPU) 的计算机上。

网络可以是单向或双向网络, (参数) recurrentOp 类型:

  • lstm:长期短期记忆 (霍赫雷特和施密德胡伯)
  • gru:封闭循环单位
  • rnnTanh:带非线性的普通 RNN tanh
  • rnnReLU:带整型线性非线性的普通 RNN

所有权重都包含在单个矩阵中,该矩阵应包含 hiddenDims 行数和容纳所有参数所需的列数。 由于这可能需要确定,因此可以自动 推断 维度。 若要确保随机初始化使用正确的扇入,请指定 initOutputRank=-1

W = ParameterTensor {(Inferred:Inferred), initOutputRank=-1}

如果使用 lstm 该操作,我们建议使用此基元, RecurrentLSTMLayerStack{}这将负责创建权重。

在 GPU 上进行训练,在 CPU 上部署

目前,无法在没有 GPU 的系统上部署训练为 OptimizedRNNStack() RNN。 我们相信,可以执行一个帖子训练模型编辑操作,该操作将节点替换为OptimizedRNNStack()与 CPU 兼容的本机 BrainScript 表达式,这些表达式精确模拟 CuDNN5 RNN 实现。

示例

语音识别模型由 3 隐藏层组成,每个层具有隐藏状态维度的双向 LSTM,方向为 512:

features = Input {40}
W = ParameterTensor {(Inferred:Inferred), initOutputRank=-1, initValueScale=1/10}
h = OptimizedRNNStack (W, features, 512, numLayers=3, bidirectional=true)
p = DenseLayer {9000, activation=Softmax, init='heUniform', initValueScale=1/3}