你当前正在访问 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
、、gru
、rnnTanh
rnnReLU
说明
此函数允许访问 CuDNN5 RNN,这是对一个或多个重复网络的堆栈的高效实现。 与 BrainScript 中的计算网络相比,我们在 5 次顺序上观察到了加速。 尽管与 BrainScript 实现不一样灵活,但训练时间的速度可能值得 (注意,此类模型只能部署在具有 GPU) 的计算机上。
网络可以是单向或双向网络, (参数) recurrentOp
类型:
lstm
:长期短期记忆 (霍赫雷特和施密德胡伯)gru
:封闭循环单位rnnTanh
:带非线性的普通 RNNtanh
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}