繁体   English   中英

将 tf.gradients 转换为张量类型

[英]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]的值必须是使用xy进行的一个或多个可微操作的结果。 例如,如果op定义为:

op = tf.stack([2 * x + 3 * y, x - 1, 2 * y + 2], axis=1)

然后它会起作用,因为op[:, 0]将根据xy (可能还有其他值)计算,因此张量之间存在梯度。 或者,换一种说法,改变xy会改变op[:, 0]的值。 TensorFlow 跟踪用于计算每个值的操作,并使用该信息自动计算梯度。

但是op不是从xy计算出来的,实际上它不是从任何东西计算出来的,因为它是一个占位符,它只是一个给定的值。 xy的变化不会导致op的变化。 所以这些张量之间没有梯度。 我不确定你想用你的代码实现什么,但你可能需要重新考虑你想要计算的结果到底是什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM