shape 和 get_shape 和 tf.shape

Posted yanshw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shape 和 get_shape 和 tf.shape相关的知识,希望对你有一定的参考价值。

先说结论再看例子

1. 运行环境不同

  • shape 和 get_shape 返回元组,故无需 Session,可直接获取;
  • 而 tf.shape 返回 Tensor,需要 Session            【只有 Tensor 才需要 Session】

2. 适用对象不同

  • tf.shape 适用于 Tensor,还有 ndarray,list;
  • shape 适用于 Tensor,还有 ndarray;
  • get_shape 只适用于 Tensor;

 

代码如下

########## tf.shape ##########
### 用函数获取,返回 Tensor
# 针对所有 Tensor,包括 Variable,array、list 也可以
d5 = tf.shape(tf.random_normal((2, 3)))     ### Tensor
print(d5)       # Tensor("Shape:0", shape=(2,), dtype=int32)
d6 = tf.shape(tf.Variable([1. ,2.]))        ### Variable
n3 = tf.shape(np.array([[1, 2], [3, 4]]))   ### ndarray
n4 = tf.shape([1, 2])                       ### list
with tf.Session() as sess1:
    print(sess1.run(d5))        # [2 3]
    print(sess1.run(d6))        # [2]
    print(sess1.run(n3))        # [2 2]
    print(sess1.run(n4))        # [2]
    

########## shape ##########
### 直接获取,返回元组
# 针对所有 Tensor,包括 Variable,array 也可以
d1 = tf.random_uniform((3, 2)).shape        ### Tensor
print(d1)       # (3, 2)
d2 = tf.Variable([1. ,2.]).shape            ### Variable
print(d2)       # (2,)
n1 = np.array([[1, 2], [3, 4]]).shape       ### ndarray
print(n1)       # (2, 2)


########## get_shape ##########
### 直接获取,返回元组
# 针对所有 Tensor,包括 Variable,不包括 array
d3 = tf.random_uniform((3, 2)).get_shape()  ### Tensor
print(d3)       # (3, 2)
d4 = tf.Variable([1. ,2.]).get_shape()      ### Variable
print(d4)       # (2,)
# n2 = np.array([[1, 2], [3, 4]]).get_shape()     ### 报错 AttributeError: ‘numpy.ndarray‘ object has no attribute ‘get_shape‘

 

 

参考资料:

https://blog.csdn.net/m0_37744293/article/details/78254691

以上是关于shape 和 get_shape 和 tf.shape的主要内容,如果未能解决你的问题,请参考以下文章

Debug 路漫漫-10:AttributeError: 'Embedding' object has no attribute 'get_shape'

如何将Tensorflow张量尺寸(形状)作为int值?

如何在张量流的自定义损失中获取张量的形状

如何理解 TensorFlow 中的静态形状和动态形状?

[numpy] 中shape和size的区别

egret.sprite和egret.shape的区别