基于tf.shape(tensor)和tensor.shape()的区别说明

#tf.shape(tensor)和tensor.shape()的区别

a=tf.zeros([4,5,4,5,6])
print(type(a.shape))
print(a.shape.ndims)#多少个维度
print(a.shape.as_list())#返回列表
print(type(tf.shape(a)))
print(type(tf.shape(a)[0]))
b=a.shape.as_list()
c=tf.shape(a)
b[1]=tf.shape(a)[1]
print(b)
sess=tf.Session()
d=sess.run(c)
print(d)
outputs:
<class 'tensorflow.python.framework.tensor_shape.TensorShape'>
5
[4, 5, 4, 5, 6]
<class 'tensorflow.python.framework.ops.Tensor'>
<class 'tensorflow.python.framework.ops.Tensor'>
[4, <tf.Tensor 'strided_slice_1:0' shape=() dtype=int32>, 4, 5, 6]
[4 5 4 5 6]

其中tf.shape(tensor)使用的是动态的,即必须要在session中运行后才能显示出来,但是tensor.shape()是静态的,即通过定义的shape可以惊天的运行出来。

原因:在我们定义的时候,比如进行placeholder的时候我们可能会定义某些维度为None,在静态的时候是看不出来的,只能在运行的时候找到维度。

**使用:**可以在获得某些tensor的维度的时候进行检验,防止维度为None。

补充知识:tensorflow.python.framework.tensor_shape.TensorShape 类

TensorShape 是tensorflow中关于张量shape的类(class).

使用示例如下:

import tensorflow.compat.v1 as tf
from tensorflow.python.framework import tensor_shape
from tensorflow.python.framework import constant_op

tensor_test1=[10,10,10]
tensor_test2 = [None,10,10]

p1 = tensor_shape.as_shape(tensor_test1) # 得到的是一个类实例,该类实例包含一个属性,是 tensor_test1 的value
const = constant_op.constant(p1.as_list())

print("type(p1) = ",type(p1))
print("p1 = ",p1) # 使用p1时会自动调用p1中的value属性
print("p1.is_fully_defined() = ",p1.is_fully_defined())# is_fully_defined 是 TensorShape 类的一个内部函数
print("p1.ndims = ",p1.ndims) # ndims 也是TensorShape的一个属性值
print("p1.as_list() = ",p1.as_list()) # 把TensorShape的value属性转换成python中的list类型
print("const = ",const)

结果如下:

type(p1) = <class 'tensorflow.python.framework.tensor_shape.TensorShape'>
p1 = (10, 10, 10)
p1.is_fully_defined() = True
p1.ndims = 3
p1.as_list() = [10, 10, 10]
const = Tensor("Const:0", shape=(3,), dtype=int32)

以上这篇基于tf.shape(tensor)和tensor.shape()的区别说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • PyTorch中 tensor.detach() 和 tensor.data 的区别详解

    PyTorch0.4中,.data 仍保留,但建议使用 .detach(), 区别在于 .data 返回和 x 的相同数据 tensor, 但不会加入到x的计算历史里,且require s_grad = False, 这样有些时候是不安全的, 因为 x.data 不能被 autograd 追踪求微分 . .detach() 返回相同数据的 tensor ,且 requires_grad=False ,但能通过 in-place 操作报告给 autograd 在进行反向传播的时候. 举例: ten

  • 关于tf.matmul() 和tf.multiply() 的区别说明

    我就废话不多说了,大家还是直接看代码吧~ flyfish # a # [[1, 2, 3], # [4, 5, 6]] a = tf.constant([1, 2, 3, 4, 5, 6], shape=[2, 3]) # b1 # [[ 7, 8], # [ 9, 10], # [11, 12]] b1 = tf.constant([7, 8, 9, 10, 11, 12], shape=[3, 2]) #b2 #[[ 7 8 9] # [10 11 12]] b2 = tf.constant

  • 浅谈python中np.array的shape( ,)与( ,1)的区别

    如下所示: >>> import numpy as np >>> x = np.array([1, 2]) >>> y = np.array([[1],[2]]) >>> z = np.array([[1,2]]) >>> print(x.shape) (2,) >>> print(y.shape) (2, 1) >>> print(z.shape) (1, 2) x[1,2]的s

  • python Tensor和Array对比分析

    如下所示: 区别 Array Tensor 类型 uint8,float32系列 {} 各类型相互转换 uint8转float64:image = image * (2. / 255.) - 1 float64转uint8:image.astype(np.uint8) {} 扩充维度 image[np.newaxis, :] tf.expand_dims(image,axis=0) 数组拼接 np.concatenate([image, image], axis=0) tf.concat([fr

  • 在keras 中获取张量 tensor 的维度大小实例

    在进行keras 网络计算时,有时候需要获取输入张量的维度来定义自己的层.但是由于keras是一个封闭的接口.因此在调用由于是张量不能直接用numpy 里的A.shape().这样的形式来获取.这里需要调用一下keras 作为后端的方式来获取.当我们想要操作时第一时间就想到直接用 shape ()函数.其实keras 中真的有shape()这个函数. shape(x)返回一个张量的符号shape,符号shape的意思是返回值本身也是一个tensor, 示例: >>> from keras

  • 基于tf.shape(tensor)和tensor.shape()的区别说明

    #tf.shape(tensor)和tensor.shape()的区别 a=tf.zeros([4,5,4,5,6]) print(type(a.shape)) print(a.shape.ndims)#多少个维度 print(a.shape.as_list())#返回列表 print(type(tf.shape(a))) print(type(tf.shape(a)[0])) b=a.shape.as_list() c=tf.shape(a) b[1]=tf.shape(a)[1] print

  • Pytorch实现List Tensor转Tensor,reshape拼接等操作

    目录 一.List Tensor转Tensor (torch.cat) 高维tensor 二.List Tensor转Tensor (torch.stack) 持续更新一些常用的Tensor操作,比如List,Numpy,Tensor之间的转换,Tensor的拼接,维度的变换等操作. 其它Tensor操作如 einsum等见:待更新. 用到两个函数: torch.cat torch.stack 一.List Tensor转Tensor (torch.cat) // An highlighted

  • PyTorch中Tensor和tensor的区别及说明

    目录 Tensor和tensor的区别 pytorch Tensor变形函数 Tensor的排序与取极值 Tensor与NumPy转换 Tensor和tensor的区别 本文列举的框架源码基于PyTorch1.0,交互语句在0.4.1上测试通过 import torch 在PyTorch中,Tensor和tensor都能用于生成新的张量: >>> a=torch.Tensor([1,2]) >>> a tensor([1., 2.]) >>> a=to

  • 对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解

    在用tensorflow做一维的卷积神经网络的时候会遇到tf.nn.conv1d和layers.conv1d这两个函数,但是这两个函数有什么区别呢,通过计算得到一些规律. 1.关于tf.nn.conv1d的解释,以下是Tensor Flow中关于tf.nn.conv1d的API注解: Computes a 1-D convolution given 3-D input and filter tensors. Given an input tensor of shape [batch, in_wi

  • 基于PyTorch的permute和reshape/view的区别介绍

    二维的情况 先用二维tensor作为例子,方便理解. permute作用为调换Tensor的维度,参数为调换的维度.例如对于一个二维Tensor来说,调用tensor.permute(1,0)意为将1轴(列轴)与0轴(行轴)调换,相当于进行转置. In [20]: a Out[20]: tensor([[0, 1, 2], [3, 4, 5]]) In [21]: a.permute(1,0) Out[21]: tensor([[0, 3], [1, 4], [2, 5]]) 如果使用view(

  • 基于DOM节点删除之empty和remove的区别(详解)

    要移除页面上节点是开发者常见的操作,jQuery提供了几种不同的方法用来处理这个问题,这里我们开仔细了解下empty和remove方法 empty 顾名思义,清空方法,但是与删除又有点不一样,因为它只移除了 指定元素中的所有子节点. 这个方法不仅移除子元素(和其他后代元素),同样移除元素里的文本.因为,根据说明,元素里任何文本字符串都被看做是该元素的子节点.请看下面的HTML: <div class="hello"><p>这是p标签</p></

  • 基于js中style.width与offsetWidth的区别(详解)

    作为一个初学者,经常会遇到在获取某一元素的宽度(高度.top值...)时,到底是用 style.width还是offsetWidth的疑惑. 1. 当样式写在行内的时候,如 <div id="box" style="width:100px">时,用 style.width或者offsetWidth都可以获取元素的宽度. 但是,当样式写在样式表中时,如 #box{ width: 100px; }, 此时只能用offsetWidth来获取元素的宽度,而sty

  • 基于js 字符串indexof与search方法的区别(详解)

    1.indexof方法 indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置. 语法: 注意:有可选的参数(即设置开始的检索位置). 2.search方法 search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串. 注意:search方法可以根据正则表达式查找指定字符串(可以忽略大小写,并且不执行全局检索),同时没有可选参数(即设置开始的检索位置). 以上这篇基于js 字符串indexof与search方法的区别(详解)就是小编分享给大家的全部

  • 基于Django filter中用contains和icontains的区别(详解)

    qs.filter(name__contains="e") qs.filter(name__icontains="e") 对应sql 'contains': 'LIKE BINARY %s', 'icontains': 'LIKE %s', 其中的BINARY是 精确大小写 而'icontains'中的'i'表示忽略大小写 以上这篇基于Django filter中用contains和icontains的区别(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考

  • 基于nodejs res.end和res.send的区别

    简单来说就是   如果服务器端没有数据返回到客户端 那么就可以用 res.end 但是 如果 服务器端有数据返回到客户端 这个时候必须用res.send ,不能用 res.end(会报错) 例子: var express = require('express'); var app = express(); var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user

随机推荐