当我的数据如下:
1 |x 3:1 |y 8:1
1 |x 4:1 |y
1 |x 5:1 |y
1 |x 6:1 |y
1 |x 7:1 |y
我的变量声明如下:
var features = Variable.InputVariable(new int[] { inputDim }, DataType.Float, featuresName, null, true);
var labels = Variable.InputVariable(new int[] { numOutputClasses }, DataType.Float, labelsName, new List<Axis>() { Axis.DefaultBatchAxis() }, true);
然后代码可以工作,但是当我希望我的网络产生序列时 - &gt;序列所以我的数据看起来像这样:
1 |x 3:1 |y 4:1
1 |x 4:1 |y 5:1
1 |x 5:1 |y 6:1
1 |x 6:1 |y 7:1
1 |x 7:1 |y 8:1
我收到此错误:
Unhandled Exception: System.ArgumentOutOfRangeException:
The dimension size (5) of the axis (1) of the Value ('[10 x 5 x 20]')
must be 1, because this axis is not specified as a dynamic axis of
the Variable ('Input('labels', [10], [#])').
我如何告诉CNTK这是可以的,我希望在序列的每一步输出,所以我认为应该有这些数据,这是一个经典的多对多LSTM。但无论是CNTK c#api都破了,或者我只是不知道怎么告诉它我想做什么(最有可能)。
10个输入,10个输出,第一个序列中的5个元素,我的批次中的20个序列。
答案 0 :(得分:2)
诀窍是删除:new List<Axis>() { Axis.DefaultBatchAxis() }
从标签,默认是允许一个序列,这意味着这不是一个序列&#39;,doh!
e.g。
var labels = Variable.InputVariable(
new int[] { numOutputClasses },
DataType.Float,
labelsName,
null,
true
);
顺便说一句,你必须确保你的网络模型也不会破坏序列,所以不要使用CNTKLib.SequenceLast(LSTMFunction)
:-)
感谢KeDengMS向我解释这个问题:-)