当前位置: 首页 > 面试题库 >

如何理解TensorFlow中的术语``张量''?

解浩渺
2023-03-14
问题内容

我是TensorFlow的新手。在阅读现有文档时,我发现该术语tensor确实令人困惑。因此,我需要澄清以下问题:

  1. tensorVariabletensor
    vs. tf.constant,’张量’vs.之间是什么关系tf.placeholder

  2. 它们都是张量类型吗?


问题答案:

TensorFlow没有一流的Tensor对象,这意味着Tensor在运行时执行的基础图中没有任何概念。相反,该图由相互连接的op节点组成,代表操作。操作分配内存的输出,这些都可以在端点上:0:1等等,你可以认为这些端点作为的Tensor。如果具有tensor,则nodename:0可以将其值提取为sess.run(tensor)sess.run('nodename:0')。执行粒度发生在操作级别,因此该run方法将执行op,该op将计算所有端点,而不仅仅是:0端点。可能有一个没有输出的Op节点(例如tf.group),则没有张量与其关联。没有底层Op节点就不可能有张量。

您可以通过执行以下操作来检查基础图中发生了什么

tf.reset_default_graph()
value = tf.constant(1)
print(tf.get_default_graph().as_graph_def())

因此,tf.constant有了一个操作节点,您可以使用sess.run("Const:0")或获取它sess.run(value)

同样,value=tf.placeholder(tf.int32)创建一个具有name的常规节点Placeholder,您可以将其作为feed_dict={"Placeholder:0":2}或馈入feed_dict={value:2}。您不能在同一session.run调用中提供和获取占位符,但是可以通过tf.identity在顶部附加节点并获取该结果来查看结果。

对于变量

tf.reset_default_graph()
value = tf.Variable(tf.ones_initializer()(()))
value2 = value+3
print(tf.get_default_graph().as_graph_def())

你会看到,它创建两个节点VariableVariable/read,该:0点要在这两个节点获取一个有效的值。但是Variable:0具有特殊ref类型,这意味着它可以用作变异操作的输入。Python调用的结果tf.Variable是一个PythonVariable对象,并且有一些Python魔术可以替代Variable/read:0Variable:0取决于是否需要进行突变。由于大多数操作只有1个端点,:0因此将其删除。另一个例子是Queue-close()方法将创建一个新的Closeop节点,该节点连接到Queueop。总而言之-
根据用途对python对象进行操作VariableQueue映射到不同的基础TensorFlow op节点。

对于诸如此类tf.splittf.nn.top_k创建具有多个端点的节点的操作,Python的session.run调用会自动将输出包装在tuple或可单独获取collections.namedtupleTensor对象中。



 类似资料:
  • 问题内容: 由于我需要在使用Tensorflow训练模型之前为数据编写一些预处理程序,因此需要对进行一些修改。但是,我不知道如何像使用一样修改值。 最好的方法是可以直接修改。但是,在当前版本的Tensorflow中似乎不可能。另一种方法是改变到该进程,然后用改回来。 关键是如何更改为。 1):https : //www.tensorflow.org/versions/r0.8/api_docs/p

  • 我很难理解官方文档(https://www.khronos.org/opengl/wiki/rendering_pipeline_overview)中使用的术语 > 它说准备顶点数组数据可以类似于给定一个3D位置数据和UV纹理坐标列表,以及一个索引列表,它可以生成一个顶点流。 然后需要对这些顶点流进行解释,以便OpenGL可以对其进行操作。例如,12个顶点的流可以被解释为4个单独的三角形或10个依

  • 10行关键代码实现的线性回归 # -*- coding: utf-8 -*- import numpy as np import tensorflow as tf # 随机生成1000个点,围绕在y=0.1x+0.3的直线周围 num_points = 1000 vectors_set = [] for i in xrange(num_points): x1 = np.random.no

  • 问题内容: 我无法按名称恢复张量,我什至不知道是否可能。 我有一个创建图的函数: 我想在此函数之外访问变量S1_conv1。我试过了: 但这给了我一个错误: ValueError:共享不足:不允许使用变量scale_1 / Scale1_first_relu。您是说要在VarScope中设置“ reuse = None”? 但这有效: 我可以解决这个问题 但我不想那样做。 我认为我的问题是S1_c

  • 从这里开始 与tf. Variable不同,tf. ResourceVariable具有明确定义的语义学。在TensorFlow图中,ResourceVariable的每次使用都会向图添加一个read_value操作。read_value操作返回的Tensors保证可以看到read_value依赖的任何操作(直接、间接或通过控件依赖)中发生的对变量值的所有修改,并且保证不会看到对read_valu

  • 问题内容: 我想在中复制以下代码。例如,我想为所有先前具有值的张量索引分配a 。 如果我在其中编写类似的代码,则会出现以下错误。 方括号中的条件应为。 有没有一种方法可以实现这种“条件赋值”(因为缺少更好的名称)? 问题答案: TensorFlow API中提供了几种比较运算符。 但是,在直接操纵张量时,没有什么等效于简洁的NumPy语法。你必须要使用个人的,和运营商执行相同的操作。 您的NumP