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.]]]