我正在构建一个处理多个并行序列的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示例。这种方法可行吗?
答案 0 :(得分:1)
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的单个值。
选择取决于您对序列的要求。你打算对它们重复发生吗?如果是这样,您希望将它们保留为动态序列。如果它们只是您打算用大矩阵产品处理的矢量,那么您宁愿将它们保留为静态轴。