You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TensorFlow中feed_dict维度不匹配ValueError问题求助

问题分析与解决方案

Error Message : % (np_val.shape, subfeed_t.name, str(subfeed_t.get_shape()))) ValueError: Cannot feed value of shape (100, 32, 32, 3) for Tensor 'Model/resnet_model/dense/BiasAdd:0', which has shape '(100, 10)'

Hey there, I know this issue has been bugging you for two days—let's get it sorted out right away!

核心错误原因

你遇到的形状不匹配问题,根源在于损失函数定义时错把输入图像张量当成了网络输出的logits。

看你loss_setup函数里的这行关键代码:

self.loss = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=self.input_imgs, labels=self.input_labels, name="Error_loss")

这里的logits参数你传入的是self.input_imgs——也就是你在model_setup中定义的输入图像占位符,它的形状是(100,32,32,3);但sparse_softmax_cross_entropy_with_logits期望的logits应该是网络最后输出的、对应每个类别的预测值,也就是你已经确认形状为(100,10)的self.final_output。

当你在训练阶段执行sess.run时,feed_dict给self.input_imgs喂入了形状为(100,32,32,3)的图像数据,但损失函数却试图把这个张量当作(100,10)的logits来计算,自然就会抛出形状不匹配的错误。

修复方案

只需要修改loss_setup中的损失函数定义,将logits参数替换为网络的最终输出self.final_output即可:

def loss_setup(self):
    # 修正logits参数为网络最终输出self.final_output
    self.loss = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=self.final_output, labels=self.input_labels, name="Error_loss")
    self.loss = tf.reduce_mean(self.loss)
    optimizer = tf.train.AdamOptimizer(0.001, beta1=0.5)
    self.loss_optimizer = optimizer.minimize(self.loss)
    # Defining the summary ops
    self.cl_loss_summ = tf.summary.scalar("cl_loss", self.loss)

这样修改后,损失函数会使用网络输出的(100,10)形状的logits,和你的(100,)形状的标签完美匹配,就不会再出现形状不兼容的问题了。

内容的提问来源于stack exchange,提问作者jonghee Ban

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:58:00