[英]Converting tf.gradients to tensor type
我正在使用 tensorflow 1.14.0。 我想知道如何将强制转换列表输入张量。 尝试使用 tf.convert_to_tensor() 时出现此错误。 感谢任何帮助
无法将 object 类型转换为 Tensor。 内容:[无]。 考虑将元素转换为支持的类型。
这是我的代码
def testtf4():
x = tf.placeholder(tf.float32, shape=[None])
y = tf.placeholder(tf.float32, shape=[None])
op = tf.placeholder(tf.float32, shape=[None,3])
print("\nshape of x,y", x.shape, y.shape)
arr = np.genfromtxt("C:\\Data\\Training_and_codes\\ML\\TF Samples\\Data.csv", delimiter=",");
gradmulx_op = tf.gradients(op[:,0],x)
gradmuly_op = tf.gradients(op[:,0],y)
tgradmulx_op = tf.convert_to_tensor(gradmulx_op)
tgradmuly_op = tf.convert_to_tensor(gradmuly_op)
print("\nshape of gradmul tensors", tgradmulx_op.shape, tgradmuly_op.shape)
with tf.Session() as sess:
print("started session......\n")
input_feed={}
input_feed[x]=arr[:,0]
input_feed[y]=arr[:,1]
input_feed[op]=arr[:,2:4]
[gradx, grady] = sess.run([tgradmulx_op, tgradmuly_op],input_feed)
print("x gradient",gradx)
print("y gradient",grady)
您的问题与tf.convert_to_tensor
,而是与您正在尝试计算一些不存在的梯度有关。 你有这两个占位符:
x = tf.placeholder(tf.float32, shape=[None])
op = tf.placeholder(tf.float32, shape=[None, 3])
然后您尝试获得以下渐变:
gradmulx_op = tf.gradients(op[:, 0], x)
gradmuly_op = tf.gradients(op[:, 0], y)
要使这些梯度存在(即不是None
), op[:, 0]
的值必须是使用x
和y
进行的一个或多个可微操作的结果。 例如,如果op
定义为:
op = tf.stack([2 * x + 3 * y, x - 1, 2 * y + 2], axis=1)
然后它会起作用,因为op[:, 0]
将根据x
和y
(可能还有其他值)计算,因此张量之间存在梯度。 或者,换一种说法,改变x
或y
会改变op[:, 0]
的值。 TensorFlow 跟踪用于计算每个值的操作,并使用该信息自动计算梯度。
但是op
不是从x
和y
计算出来的,实际上它不是从任何东西计算出来的,因为它是一个占位符,它只是一个给定的值。 x
或y
的变化不会导致op
的变化。 所以这些张量之间没有梯度。 我不确定你想用你的代码实现什么,但你可能需要重新考虑你想要计算的结果到底是什么。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.