【问题标题】:How to create a vector from a constant in tensorflow如何从张量流中的常量创建向量
【发布时间】:2018-03-18 15:32:39
【问题描述】:

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

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

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

【问题讨论】:

  • 您希望nextdd 是常量还是变量?
  • 我猜这将是一个基于 x 值的变量。我在示例中使用常量的事实是错误的。

标签: python tensorflow vector tensor


【解决方案1】:

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

张量是 n 维矩阵。秩为 0 的张量是标量,例如42. 秩为 1 的张量是向量,例如[1,2,3],秩为 2 的张量是矩阵,秩为 3 的张量可能是形状为 [640,480,3] 的图像(640x480 分辨率,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 行根本没有理由。

现在,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

【讨论】:

  • 感谢您的回答,但我实际上更喜欢 Maxim 的。它更直接。
【解决方案2】:

根据您的描述,您似乎想使用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]

【讨论】:

    猜你喜欢
    • 2018-05-28
    • 2020-06-27
    • 2020-07-15
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 2016-06-23
    相关资源
    最近更新 更多