ValueError:Data cardinality is ambiguous 样本量不匹配报错如何解决
报错原因解释
这个报错是深度学习训练的基础规则触发的:
- 框架调用
fit()训练时,要求输入特征x和标签y的第一维度(即样本总数量)必须完全相等,每一条输入特征要对应唯一的一条标签 - 你当前输入
self.data_inputs的第一维度是3,也就是框架判定你有3条训练样本;但标签self.data_outputs的第一维度是13,框架判定你有13条标签,二者数量不匹配,框架无法确定3个输入和13个标签的对应关系,因此提示ambiguous(数据对应关系含糊不清)
代码问题定位
你的输入构造逻辑出错了:
self.data_inputs = np.array([[self.car_location], [self.car_velocity], [self.ball_location]]).astype(np.float)
这段代码把车辆位置、车辆速度、球位置三个特征各自作为独立的样本堆叠,最终得到的self.data_inputs形状是(3, 1, 特征维度),第一维度样本数为3。而你构造的输出是长度为13的一维数组,形状为(13,),样本数为13,二者完全不匹配。
修复方案
你应该是要把车辆位置、速度、球位置三个特征拼接为1条样本的全部特征,对应1条13维的动作标签,修改代码如下:
# 把三个特征拉平后拼接,外层再加一层维度代表样本数为1 self.data_inputs = np.array([np.concatenate([self.car_location, self.car_velocity, self.ball_location])]).astype(np.float) # 给输出标签也加外层维度,代表1条样本的标签 self.data_outputs = np.array([[1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0]]).astype(np.float)
修改后输入形状为(1, 特征总维度),输出形状为(1, 13),二者样本数均为1,即可正常训练。
内容的提问来源于stack exchange,提问作者wookieluvr49
相关产品推荐
相关产品推荐

