TensorFlow v1训练猫狗分类模型时shape不匹配报错如何解决
ValueError: Cannot feed value of shape (20, 3000) for Tensor 'Placeholder:0', which has shape '(20, 200)'
报错原因
- 特征维度定义不匹配:单张输入图片的特征维度为
12288,但你定义占位符时第二维(特征维度)错误设置为200,和实际输入特征长度完全不符。 - 输入张量轴顺序颠倒:你预处理得到的X格式为
(特征数, 样本数),不符合TensorFlow默认的(样本数, 特征数)输入轴顺序,切片时会搞反样本和特征维度。 - batch切片逻辑错误:你在X的特征轴(0轴)切取20份,而非在样本轴(1轴)切片,导致得到的batch形状为
(20, 3000),既和占位符要求不匹配,也不符合单batch包含20个样本的预期。
解决方法
- 调整输入张量的轴顺序,执行
X = X.T对X做转置,转置后X形状变为(3000, 12288),符合「样本数在前、特征数在后」的输入规范。 - 修正占位符和权重的形状定义:
- 占位符x的形状修改为
[20, 12288],如果需要兼容动态batch大小可写为[None, 12288] - 权重W的形状同步修改为
[12288, 1],匹配输入特征维度和二分类输出要求
- 占位符x的形状修改为
- 修正batch切片逻辑:转置后X的0轴为样本维度,每次取20个样本的切片写法为
X[start:start+20, :],得到的batch形状为(20, 12288),完全匹配占位符的形状要求。
内容的提问来源于stack exchange,提问作者Jewgah
相关产品推荐
相关产品推荐

