将模型f输出传入模型c时,移除x_触发InvalidArgumentError问题
解决TensorFlow中移除feed_dict里的x后触发InvalidArgumentError的问题
看起来你遇到的核心问题是:虽然你觉得模型c不需要x,但它的计算图实际上仍依赖x这个张量,所以当你不在feed_dict里提供x时,TensorFlow就会抛出错误。下面是具体的排查和解决方法:
1. 先确认模型c的计算图是否真的不依赖x
有时候我们以为模型没用到某个输入,但计算图里可能因为定义时的疏忽留下了依赖。你可以用下面的代码检查c.optimize操作的所有输入依赖:
# 获取optimize操作的所有输入张量 optimize_inputs = sess.graph.get_operation_by_name(c.optimize.name).inputs for tensor in optimize_inputs: print(f"依赖的张量:{tensor.name}")
如果输出里出现了和x相关的张量(比如x:0),那说明模型c确实还在依赖x,得先调整模型结构。
2. 修改模型c的定义,彻底移除对x的依赖
如果检查后发现模型c的代码里残留了对x的引用(比如输入层还保留着x的占位符,或者某些层不小心用了x而不是features),那就要重构模型c:
# 正确的模型c定义示例:只以features和y作为输入 features = tf.placeholder(tf.float32, shape=[None, feature_dim], name="features") y = tf.placeholder(tf.int32, shape=[None], name="y") # 后续所有计算都基于features,完全不涉及x hidden = tf.layers.dense(features, 256, activation=tf.nn.relu) logits = tf.layers.dense(hidden, num_classes) loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y, logits=logits)) c.optimize = tf.train.AdamOptimizer().minimize(loss)
确保模型c的所有计算节点都只从features和y出发,这样就不会再要求feed x了。
3. 临时解决方案(如果暂时不想修改模型结构)
如果因为某些原因暂时没法修改模型c的结构,你可以给x喂一个符合形状的空数据——因为模型实际上不会用到它:
# 生成和x_形状相同的空数据 dummy_x = np.zeros_like(x_) sess.run(c.optimize, feed_dict={y:y_, features:features_, x: dummy_x, dropout:1.0, training:False})
这个方法只是临时规避问题,长远来看还是建议修改模型结构彻底移除不必要的依赖。
内容的提问来源于stack exchange,提问作者girl-meets-world
相关产品推荐
相关产品推荐

