Python Tensorflow:在函数中填充张量

Python Tensorflow:在函数中填充张量,python,tensorflow,Python,Tensorflow,我试图定义的是以下想法: 考虑一下什么时候有这些张量 a=tf.常数([1,1.5,1.2])#带形状的张量[3,] b=tf.常数([1,2,3.])#“ c=tf.常数([3,0,6.])#“ t=tf.常数([0.5,0.6,0.7,2,4,5,6.])#形状张量[7,] 现在考虑一下,我想计算一个新的张量,与前张量的每个元素一起工作,例如: def新张量(a,b,c,t): X=tf.常数([[tf.sin(a*t[1]),b*t[3],c+t[4]], [tf.cos(b*t[5])

我试图定义的是以下想法:

考虑一下什么时候有这些张量

a=tf.常数([1,1.5,1.2])#带形状的张量[3,]
b=tf.常数([1,2,3.])#“
c=tf.常数([3,0,6.])#“
t=tf.常数([0.5,0.6,0.7,2,4,5,6.])#形状张量[7,]

现在考虑一下,我想计算一个新的张量,与前张量的每个元素一起工作,例如:

def新张量(a,b,c,t):
X=tf.常数([[tf.sin(a*t[1]),b*t[3],c+t[4]],
[tf.cos(b*t[5]),tf.atan2(t[5],c),a+t[2]+b],
[a+t[4],a+b,c*t[0]]
返回X
X
应该是一个具有形状的张量
[3,3,3]
。也就是说,我想定义一个以四个张量作为输入的函数:其中三个张量形状相同,第四个张量形状不同。我希望函数为前三个输入(
a,b,c
)的每个值计算一个张量(
X

使用此代码,TensorFlow会出现以下错误:

TypeError: List of Tensors when single Tensor expected
根据这一点,这是因为
tf.constant
不能将张量作为输入,他们建议使用
tf.Variable
。但我认为这不适合我,因为我以后必须使用
X
,不想初始化它,等等。我也读过这篇文章,但找不到任何问题的答案

有什么办法可以满足我的要求吗?我的代码对我的目的有意义吗?先谢谢你

更新:使用jdehesa答案

获取@jdehesa答案并使生成的张量更简单:

def新张量(a,b,c,t):
#也可以使用tf.convert_到_张量
X=tf.stack([[a+t[1],b*t[1],c+t[1]],
[b*t[0],t[5]+c,a+t[2]+b],
[a+t[4],a+b,c*t[0]]
返回X
对于张量:

a=tf.常数([1,1,1.])#形状张量[3,]
b=tf.常数([2,2,2.])#“
c=tf.常数([3,3,3.])#“
t=tf.常数([1,1,1,1,1,1,1.])#形状张量[7,]
我得到的是以下张量:

#计算x=新的_张量(a,b,c,t)时
[[[2. 2. 2.]
[2. 2. 2.]
[4. 4. 4.]]
[[2. 2. 2.]
[4. 4. 4.]
[4. 4. 4.]]
[[2. 2. 2.]
[3. 3. 3.]
[3. 3. 3.]]]
但我所期望的是:

[[2.2.4]
[2. 4. 4.]
[2. 3. 3.]]
[[2. 2. 4.]
[2. 4. 4.]
[2. 3. 3.]]
[[2. 2. 4.]
[2. 4. 4.]
[2. 3. 3.]]]

正如我希望它对输入张量的每个元素求值的那样。

没错,您只能将Python或NumPy值传递给,但您可以使用或(如果愿意的话)构建张量:


编辑:对于第二个示例,要获得更改张量标注顺序所需的结果,请执行以下操作:

import tensorflow as tf

def new_tensor(a, b, c, t):
    # Could also use tf.convert_to_tensor
    X = tf.stack([[a+t[1],   b*t[1],    c+t[1]],
                  [b*t[0],  t[5]+ c,  a+t[2]+b],
                  [a+t[4],      a+b,   c*t[0]]])
    X = tf.transpose(X, (2, 0, 1))
    return X

with tf.Graph().as_default(), tf.Session() as sess:
    a = tf.constant([1., 1., 1.]) # tensor with shape [3,]
    b = tf.constant([2., 2., 2.])   # ""
    c = tf.constant([3., 3., 3.])   # ""
    t = tf.constant([1., 1., 1., 1., 1., 1., 1.]) # tensor with shape [7,]
    x = new_tensor(a, b, c, t)
    print(sess.run(x))
    # [[[2. 2. 4.]
    #   [2. 4. 4.]
    #   [2. 3. 3.]]
    # 
    #  [[2. 2. 4.]
    #   [2. 4. 4.]
    #   [2. 3. 3.]]
    # 
    #  [[2. 2. 4.]
    #   [2. 4. 4.]
    #   [2. 3. 3.]]]

我已经用更简单的张量尝试了你的代码,但是,尽管我认为is必须与你的解决方案接近,但它并没有给出我所期望的结果。我已经更新了我的问题,所以你可以看到它。谢谢大家!@M.Merida-Floriano我用第二个例子的解决方案编辑了答案,看看这是否有帮助。
import tensorflow as tf

def new_tensor(a, b, c, t):
    # Could also use tf.convert_to_tensor
    X = tf.stack([[a+t[1],   b*t[1],    c+t[1]],
                  [b*t[0],  t[5]+ c,  a+t[2]+b],
                  [a+t[4],      a+b,   c*t[0]]])
    X = tf.transpose(X, (2, 0, 1))
    return X

with tf.Graph().as_default(), tf.Session() as sess:
    a = tf.constant([1., 1., 1.]) # tensor with shape [3,]
    b = tf.constant([2., 2., 2.])   # ""
    c = tf.constant([3., 3., 3.])   # ""
    t = tf.constant([1., 1., 1., 1., 1., 1., 1.]) # tensor with shape [7,]
    x = new_tensor(a, b, c, t)
    print(sess.run(x))
    # [[[2. 2. 4.]
    #   [2. 4. 4.]
    #   [2. 3. 3.]]
    # 
    #  [[2. 2. 4.]
    #   [2. 4. 4.]
    #   [2. 3. 3.]]
    # 
    #  [[2. 2. 4.]
    #   [2. 4. 4.]
    #   [2. 3. 3.]]]