TensorFlow v1.4中tf.constant()传入placeholder参数触发TypeError问题
解决TensorFlow 1.4中用placeholder均值创建填充二维张量的问题
刚巧碰到过类似的坑,给你捋清楚核心问题和解决方案:
首先要明白:tf.constant() 要求传入的是静态可确定的值(比如Python数字、numpy数组这类在图构建阶段就能固定的内容),但你的placeholder r 的均值是一个动态张量——只有在会话运行时通过feed_dict传入数据后,它的具体值才会被计算出来。直接把动态张量传给tf.constant,自然会触发TypeError。
正确的思路是用支持动态张量输入的操作来生成填充后的二维张量,比如tf.fill()或者tf.tile(),这两个函数都能接受张量作为参数,在图运行阶段根据动态计算出的均值生成目标张量。
完整代码示例
import tensorflow as tf # 1. 定义placeholder r,这里假设输入形状是[None, 3](可根据你的需求调整) r = tf.placeholder(tf.float32, shape=[None, 3]) # 2. 计算r的均值,得到一个标量张量 r_mean = tf.reduce_mean(r) # 3. 用tf.fill创建目标二维张量,比如生成形状为[2, 4]的填充张量 target_shape = [2, 4] filled_tensor = tf.fill(target_shape, r_mean) # 也可以用tf.tile实现:先把均值转成[1,1]的二维张量,再平铺到目标形状 # r_mean_2d = tf.reshape(r_mean, [1, 1]) # filled_tensor = tf.tile(r_mean_2d, target_shape) # 运行会话验证效果 with tf.Session() as sess: # 给r传入测试数据 test_data = [[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]] result = sess.run(filled_tensor, feed_dict={r: test_data}) print(result)
关键步骤解释
tf.reduce_mean(r):计算placeholder数据的均值,得到的是一个标量张量,这个值只有在会话运行时才会被确定。tf.fill(target_shape, value):value参数支持传入动态张量,它会在运行时用value的当前值填充整个target_shape形状的张量,完美适配我们的动态均值需求。- 如果你偏好
tf.tile的方式,需要先把标量均值转成[1,1]的二维张量,再通过平铺操作扩展到目标形状,最终效果和tf.fill完全一致,选哪种都可以。
这样运行后,你就能得到一个所有元素都是r均值的二维张量,不会再触发TypeError啦。
内容的提问来源于stack exchange,提问作者Geoffrey Anderson
相关产品推荐
相关产品推荐

