如何从张量流中的常量创建向量

时间:2018-03-18 15:32:39

标签: python tensorflow vector tensor

如何从张量流常数/变量等创建张量流向量? 例如,我有一个常量x,我想创建一个[x]的向量。

我已经尝试过以下代码,但它不起作用。 任何帮助将不胜感激。

x = tf.placeholder_with_default(1.0,[], name="x")
nextdd = tf.constant([x], shape=[1], dtype=tf.float32)

2 个答案:

答案 0 :(得分:1)

首先,我想为你定义一个张量:

张量是n维矩阵。等级0张量是标量,例如42.等级1张量是矢量,例如[1,2,3],秩2张量是矩阵,秩3张量可以是形状[640,480,3](640×480分辨率,3个颜色通道)的图像。等级4张量可能是一批这样的形状图像[10,640,480,3](10 640x480图像)等。

其次,Tensorflow中基本上有4种类型的张量。

1)占位符 - 这些是您在调用sess.run时传递到tensorflow的张量。例如:sess.run([nextdd], {x:[1,2,3]})x创建排名1张量。

2)常数 - 顾名思义,这些是固定值。例如。 tf.constant(42)并且应该在编译时指定,而不是在运行时指定(在此处排除您的主要错误)。

3)计算张量 - x = tf.add(a,b)是计算张量,它是从a,b计算出来的。计算完成后,它的值不会被存储。

4)变量 - 这些是在计算完成后保留的可变张量。例如,神经网络的权重。

现在明确地解决你的问题。 x已经是一个张量。如果你传入一个向量,那么它是一个等级1张量(也就是一个向量)。您可以像使用常量,计算张量或变量一样使用它。它们在操作中都是一样的。完全没有下一行的原因。

现在,nextdd失败了,因为你试图从变量项创建一个常量,这不是一个定义的操作。 tf.constant(42)定义明确,这是一个常数。

你可以直接使用x,如:

x = tf.placeholder_with_default(1.0,[], name="x")
y = tf.add(x, x)
sess = tf.InteractiveSession()
y.eval()

结果:

2.0

答案 1 :(得分:0)

根据您的描述,您似乎想要使用tf.expand_dims

# 't' is a tensor of shape [2]
tf.shape(tf.expand_dims(t, 0))  # [1, 2]
tf.shape(tf.expand_dims(t, 1))  # [2, 1]
tf.shape(tf.expand_dims(t, -1))  # [2, 1]