TensorFlow
machine learning
tensor shapes
programming
AI

what does the question mark in tensorflow shape mean?

ML System Design practice on Codemia

Design recommenders, ranking systems and training pipelines the way ML interviews actually ask for them, with worked solutions.

Practice ML system design

In TensorFlow, shapes are a fundamental concept, guiding how tensors—multi-dimensional arrays—are structured and manipulated throughout a machine learning model. Understanding the notation and meaning embedded within a tensor's shape is crucial for effective model building and debugging. One common yet often misunderstood symbol in TensorFlow's shape notation is the question mark (`?`). This symbol plays an essential role, particularly regarding the flexibility and generality required in building models. Let's delve into what this question mark signifies, and how it fits into TensorFlow’s shape system.

Understanding Tensor Shapes in TensorFlow

Before addressing the question mark specifically, it's important to establish what tensor shapes represent in TensorFlow. A tensor's shape is a list of integers, representing the size (number of elements) of each dimension of the tensor. For a rank-`n` tensor, its shape will be an array of `n` dimensions. For example:

  • A scalar has a shape of `[]`.
  • A vector with 10 values has a shape of `[10]`.
  • A matrix with 3 rows and 4 columns has a shape of `[3, 4]`.

The Question Mark in Tensor Shapes

In TensorFlow, the question mark (`?`) typically appears when using libraries like Keras and represents an unspecified dimension, commonly referred to as a "None" dimension. While programming models, especially in deep learning where the batch size can vary, using `?` is crucial as it allows you to define models that are flexible with respect to the number of samples fed into the input. Conceptually, the question mark can be thought of as a placeholder for a dynamic, adaptable size.

Technical Explanation

Internally, the question mark is often synonymous with `None` in TensorFlow's native output and documentation, as in Keras models. When defining layers, such as input layers, specifying a `None` dimension is common practice. In such cases, it indicates that the dimension is dynamic and will be set based on the data provided to the model during training or inference.

Here is an example using a simple neural network with Keras:

  • The input layer has a shape of `(None, 5)`.
  • `None` (or `?`) here signifies that the batch size can vary; it adapts based on how many samples are passed to the model.

Related reading
Free course
Beginner
7 lessons
2 hours
Tackling System Design Interview Problems

A short course that equips you with the skills to approach system design interviews methodically.

Start the free course
Track what you have practised

A free account saves your progress, solutions and study plan across every problem on Codemia.

ML System Design practice on Codemia

Design recommenders, ranking systems and training pipelines the way ML interviews actually ask for them, with worked solutions.

Practice ML system design

All Rights Reserved.