带有动态轴的 Brainscript 示例

Brainscript example with Dynamic Axes

我正在构建一个处理多个并行序列的 LSTM,我正在努力寻找任何处理动态轴的 brainscript 示例。

在我的特定情况下,一个示例由二进制标签和 N 个序列组成,其中每个序列 i 具有固定长度(但对于 j<>i 可能不同)。 例如,序列 1 的长度始终为 1024,序列 2 的长度为 4096,序列 3 的长度为 1024。 我通过以 CNTK 文本格式并行打包来表达这些序列:

0 |Label 1 |S1 0 |S2 1 |S3 0
0 |S1 1 |S2 1 |S3 1
... another 1021 rows
0 |S2 0
0 |S2 1
... another 3070 rows with only S2 defined
1 |Label 0 |S1 0 |S2 1 |S3 0
1 |S1 1 |S2 1 |S3 0
... another 1021 rows
1 |S2 1
1 |S2 0
... another 3070 rows with only S2 defined
2 |Label ...

等等。我觉得我过去构建过这样的示例,但我一直无法找到任何示例配置,甚至无法找到指定动态轴的任何 BS 示例。这种方法可行吗?

G2P 示例 (...\Examples\SequenceToSequence\CMUDict\BrainScript\G2P.cntk) 使用多个动态轴。这是此文件的片段:

# inputs and axes must be defined on top-scope level in order to get a clean node name from BrainScript.
inputAxis = DynamicAxis()
rawInput  = Input (inputVocabDim, dynamicAxis=inputAxis, tag='feature')
rawLabels = Input (labelVocabDim, tag='label')

但是,由于在您的情况下,每个输入的轴都具有相同的长度,因此您可能还想考虑将它们放入固定大小的张量中。例如,您将只有一个维度为 1024 的值,而不是 1024 个值。

选择取决于您要对序列执行的操作。您打算 运行 重现它们吗?如果是这样,您希望将它们保留为动态序列。如果它们只是您计划使用大矩阵乘积处理的向量,您宁愿将它们保留为静态轴。