CNTK 2.7创建批量输入时NDShape匹配错误求助
错误原因与解决方法
错误本质
你遇到的错误核心是:传入Value.Create的输入数组Ins的总元素数,必须是你指定的**样本形状大小(这里是5)**的整数倍。当前Ins只有6个元素,6无法被5整除,因此触发报错。
问题分析
你定义的样本形状是[5],代表每个输入样本是5维向量。你的输入矩阵是5行6列,对应6个5维样本(每一列是一个样本),总元素数应该是5×6=30,但你传入的Ins只包含6个元素,显然是数据扁平化的方式错误,或者误传了矩阵的维度数而非全部元素。
解决步骤
正确扁平化输入矩阵:CNTK默认采用列优先的存储方式,需要把你的5×6矩阵按列展开成一维数组。例如你的矩阵:
列0: 0, 0, 0, 0, 0 列1: -0.7068..., 0.7045..., 0.7689..., -0.7410..., 0.9063... ... 列5: 0.4788..., -0.8118..., 0.8757..., -0.4450..., 0.9496...展开后得到的一维数组顺序是:列0的5个元素 → 列1的5个元素 → ... → 列5的5个元素,共30个元素。
修正输入数组:将上述30个元素的一维数组赋值给
Ins,再调用Value.Create:// 假设Ins已经是正确扁平化后的30元素数组 Value.Create<double>(NDShape.CreateNDShape(new[] { 5 }), Ins, new[] { false }, DeviceDescriptor.CPUDevice, true);验证元素数:确保
Ins.Length等于5×批量数(这里批量数是6,所以5×6=30),这样就能满足“元素数是样本形状大小的整数倍”的要求。
内容的提问来源于stack exchange,提问作者Rusty Nail
相关产品推荐
相关产品推荐

