How to get the dimensions of a tensor (in TensorFlow) at graph construction time? How to get the dimensions of a tensor (in TensorFlow) at graph construction time? python python

How to get the dimensions of a tensor (in TensorFlow) at graph construction time?


I see most people confused about tf.shape(tensor) and tensor.get_shape()Let's make it clear:

  1. tf.shape

tf.shape is used for dynamic shape. If your tensor's shape is changable, use it. An example: a input is an image with changable width and height, we want resize it to half of its size, then we can write something like:
new_height = tf.shape(image)[0] / 2

  1. tensor.get_shape

tensor.get_shape is used for fixed shapes, which means the tensor's shape can be deduced in the graph.

Conclusion:tf.shape can be used almost anywhere, but t.get_shape only for shapes can be deduced from graph.


Tensor.get_shape() from this post.

From documentation:

c = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])print(c.get_shape())==> TensorShape([Dimension(2), Dimension(3)])


A function to access the values:

def shape(tensor):    s = tensor.get_shape()    return tuple([s[i].value for i in range(0, len(s))])

Example:

batch_size, num_feats = shape(logits)