Zij*_*ost 34 python machine-learning deep-learning tensorflow tensor
我是TensorFlow的新手.在阅读现有文档时,我发现该术语tensor确实令人困惑.因此,我需要澄清以下问题:
tensor&Variable,tensortf.constant'张量'对比有tf.placeholder什么关系?Yar*_*tov 61
TensorFlow没有第一类Tensor对象,这意味着Tensor底层图中没有运行时执行的概念.相反,图形由彼此连接的op节点组成,表示操作.操作其输出,这些都可以在端点上分配内存:0,:1等等,你可以认为这些端点作为的Tensor.如果您tensor对应,则nodename:0可以将其值取为sess.run(tensor)或sess.run('nodename:0').执行粒度发生在操作级别,因此该run方法将执行op,它将计算所有端点,而不仅仅是:0端点.可能有一个没有输出的Op节点(例如tf.group),在这种情况下没有与之关联的张量.没有基础Op节点的张量是不可能的.
您可以通过执行此类操作来检查基础图中发生的情况
tf.reset_default_graph()
value = tf.constant(1)
print(tf.get_default_graph().as_graph_def())
Run Code Online (Sandbox Code Playgroud)
因此,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+3
print(tf.get_default_graph().as_graph_def())
Run Code Online (Sandbox Code Playgroud)
你会看到,它创建两个节点Variable和Variable/read,该:0点要在这两个节点获取一个有效的值.但是Variable:0具有特殊ref类型意味着它可以用作变异操作的输入.Python调用的结果tf.Variable是一个Python Variable对象,并且有一些Python魔法可以替代Variable/read:0或Variable:0取决于是否需要进行变异.由于大多数操作只有1个端点,因此:0被删除.另一个例子是Queue- close()方法将创建一个Close连接到Queueop 的新op节点.总结一下 - 根据使用情况对python对象进行操作,Variable并Queue映射到不同的底层TensorFlow操作节点.
对于像OPS tf.split或者tf.nn.top_k其创建具有多个端点节点,Python的session.run通话自动换行输出tuple或collections.namedtuple的Tensor可单独获取的对象.
Oli*_*rot 13
从词汇表:
Tensor是一种类型化的多维数组.例如,浮点数的4-D阵列表示具有尺寸[批次,高度,宽度,通道]的小批量图像.
基本上,每个数据都是TensorFlow中的Tensor(因此得名):
feed_dict参数sess.run())var.assign()).从技术上来说,tf.Variable是不是一个子类tf.Tensor,虽然tf.constant 只是最基本的Tensor,它包含创建时给出的固定值但是,在图中,每个节点都是一个操作,可以将Tensors作为输入或输出.
正如其他人已经提到的那样,是的,它们都是张量.
我理解这些的方式是首先可视化和理解1D,2D,3D,4D,5D和6D张量,如下图所示.(来源:knoldus)
现在,在TensorFlow的上下文中,您可以想象下面的计算图,
在这里,Ops取两个张量a并b作为输入 ; 将张量与自身相乘,然后将这些乘法的结果相加以产生结果张量t3.并且这些乘法和加法 Op发生在计算图中的节点处.
而这些张量a,并b能不断张量,变张量,或占位符.没关系,只要它们具有相同的数据类型和兼容的形状(或broadcast能够它)来实现操作.