如何理解TensorFlow中的术语`tensor`?

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

  1. tensorVariabletensortf.constant、’tensor’与tf.placeholder之间的关系是什么?
  2. 它们都是张量的类型吗?

回答:

TensorFlow没有一级张量对象,这意味着在运行时执行的基础图中没有Tensor的概念。相反,图由相互连接的操作节点组成,代表操作。一个操作会为其输出分配内存,这些输出在端点:0:1等处可用,您可以将每个这些端点视为一个Tensor。如果您有一个对应于nodename:0tensor,您可以通过sess.run(tensor)sess.run('nodename:0')获取其值。执行的粒度发生在操作级别,因此run方法将执行操作,这将计算所有的端点,而不仅仅是:0端点。可能存在没有输出的操作节点(如tf.group),在这种情况下,没有与之关联的张量。没有底层操作节点是不可能有张量的。

您可以通过执行以下操作来检查基础图中发生的情况

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)创建一个名为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+3print(tf.get_default_graph().as_graph_def())

您会看到它创建了两个节点VariableVariable/read,这两个节点的:0端点都是有效的值可以获取。然而,Variable:0具有特殊的ref类型,意味着它可以用作变异操作的输入。Python调用tf.Variable的结果是一个PythonVariable对象,并且有一些Python魔法来根据是否需要变异来替换Variable/read:0Variable:0。由于大多数操作只有一个端点,:0会被省略。另一个例子是Queue —— close()方法将创建一个新的Close操作节点,该节点连接到Queue操作。为了总结 —— 对像VariableQueue这样的Python对象的操作会根据使用情况映射到不同的底层TensorFlow操作节点上。

对于像tf.splittf.nn.top_k这样的操作,它们创建具有多个端点的节点,Python的session.run调用会自动将输出包装在tuplecollections.namedtuple中的Tensor对象中,这些对象可以单独获取。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注