当前位置: 首页 > 编程笔记 >

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

龙佐
2023-03-14
本文向大家介绍基于tf.shape(tensor)和tensor.shape()的区别说明,包括了基于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()的区别说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍基于CyclicBarrier和CountDownLatch的使用区别说明,包括了基于CyclicBarrier和CountDownLatch的使用区别说明的使用技巧和注意事项,需要的朋友参考一下 2018.12.12更新 在学习了CyclicBarrier之后发现,CyclicBarrier也可以实现跟CountDownLatch类似的功能,只需要在它的parties中多设置一个数

  • 本文向大家介绍基于spring AOP @Around @Before @After的区别说明,包括了基于spring AOP @Around @Before @After的区别说明的使用技巧和注意事项,需要的朋友参考一下 此段小代码演示了spring aop中@Around @Before @After三个注解的区别 @Before是在所拦截方法执行之前执行一段逻辑。 @After 是在所拦截方

  • 本文向大家介绍请说说json和jsonp的区别?相关面试题,主要包含被问及请说说json和jsonp的区别?时的应答技巧和注意事项,需要的朋友参考一下 json是一种数据结构 jsonp是一种跨域技术: 跨域是后端收到了请求并处理返回给前端,但浏览器发现跨域了抛出错误中止了请求, 因为script标签支持跨域运行, 后端根据前端请求动态生成*.js文件,前端构造script标签加载js文件,Js文

  • 本文向大家介绍请你说说,cookie 和 session 的区别?相关面试题,主要包含被问及请你说说,cookie 和 session 的区别?时的应答技巧和注意事项,需要的朋友参考一下 考察点:web访问 1、cookie数据存放在客户的浏览器上,session数据放在服务器上。 2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗 考虑到安全应当使用sessi

  • 本文向大家介绍请你说说Iterator和ListIterator的区别?相关面试题,主要包含被问及请你说说Iterator和ListIterator的区别?时的应答技巧和注意事项,需要的朋友参考一下 考察点:迭代器 Iterator和ListIterator的区别是: Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List。 Iterator对集合只能是前

  • 本文向大家介绍请你说说Java和PHP的区别?相关面试题,主要包含被问及请你说说Java和PHP的区别?时的应答技巧和注意事项,需要的朋友参考一下 考察点:Java特性 PHP暂时还不支持像Java那样JIT运行时编译热点代码,但是PHP具有opcache机制,能够把脚本对应的opcode缓存在内存,PHP7中还支持配置opcache.file_cache导出opcode到文件.第三方的Faceb