import tensorflow as tf
print(tf.__version__)2.15.0
TensorFlow’s data types, and how broadcasting adds tensors of different shapes without copying data by hand.
Arun Koundinya Parasa
March 21, 2024
This article primarily discussed on importance of broadcasting and its easy of implementation using tensors.

| Data Type | Python Type | Description |
|---|---|---|
| DT_FLOAT | tf.float32 | 32 bits floating point. |
| DT_DOUBLE | tf.float64 | 64 bits floating point. |
| DT_INT8 | tf.int8 | 8 bits signed integer. |
| DT_INT16 | tf.int16 | 16 bits signed integer. |
| DT_INT32 | tf.int32 | 32 bits signed integer. |
| DT_INT64 | tf.int64 | 64 bits signed integer. |
| DT_UINT8 | tf.uint8 | 8 bits unsigned integer. |
| DT_STRING | tf.string | Variable length byte arrays. Each element of a tensor is a byte array. |
| DT_BOOL | tf.bool | Boolean. |
print("Addition:\n", tf.add(x_new,y_new))
print(" ")
print(" ")
print("Subtraction:\n", tf.subtract(x_new,y_new))
print(" ")
print(" ")Addition:
tf.Tensor(
[[3 3 3]
[3 3 3]], shape=(2, 3), dtype=int8)
Subtraction:
tf.Tensor(
[[-1 -1 -1]
[-1 -1 -1]], shape=(2, 3), dtype=int8)
print("Multiplication:\n", tf.multiply(tf.random.normal(shape=(2,3)),tf.random.normal(shape=(2,3))))Multiplication:
tf.Tensor(
[[-0.5718114 -0.18780218 -2.0768495 ]
[ 0.29304612 0.08317164 -1.3320862 ]], shape=(2, 3), dtype=float32)
print("Matrix Multiplication:\n", tf.matmul(tf.random.normal(shape=(2,3)),tf.random.normal(shape=(3,2))))
print(" ")
print(" ")
print("Matrix Multiplication:\n", tf.matmul(tf.random.normal(shape=(2,3)),tf.random.normal(shape=(3,1))))Matrix Multiplication:
tf.Tensor(
[[-1.6848389 -0.44041786]
[-0.9548799 -0.22109865]], shape=(2, 2), dtype=float32)
Matrix Multiplication:
tf.Tensor(
[[ 0.37789747]
[-0.12570143]], shape=(2, 1), dtype=float32)
Broadcasting is useful when the dimensions of matrices are different from each other. This is highly useful to add and subtract the matrices of different lengths.
Here’s a brief summary of how broadcasting works for addition and subtraction:
Addition: If the shapes of the two tensors are different, TensorFlow compares their shapes element-wise, starting from the trailing dimensions. If the dimensions are compatible or one of the dimensions is 1, broadcasting can occur. For example, you can add a scalar to a matrix, and the scalar value will be added to every element of the matrix.
Subtraction: Similar to addition, broadcasting allows you to subtract a scalar or a vector from a matrix, or subtract matrices of different shapes.
x1:
tf.Tensor(
[[ 0.39297998 -0.12811422 -0.60474324]
[ 0.30773026 1.4076523 -0.57274765]], shape=(2, 3), dtype=float32)
x2:
tf.Tensor(
[[0.10113019]
[1.0277312 ]], shape=(2, 1), dtype=float32)
<tf.Tensor: shape=(2, 3), dtype=float32, numpy=
array([[0.10113019, 0.10113019, 0.10113019],
[1.0277312 , 1.0277312 , 1.0277312 ]], dtype=float32)>
<tf.Tensor: shape=(2, 3), dtype=float32, numpy=
array([[ 0.49411017, -0.02698404, -0.50361305],
[ 1.3354614 , 2.4353833 , 0.45498353]], dtype=float32)>
<tf.Tensor: shape=(2, 3), dtype=float32, numpy=
array([[ 0.2918498 , -0.22924441, -0.7058734 ],
[-0.7200009 , 0.37992108, -1.6004789 ]], dtype=float32)>
In the above examples we have seen that broadcasting of same tensor dimension i.e.; of two dimensional.
Below, we will see the beauty of broadcasting of different dimensions.
<tf.Tensor: shape=(2, 2, 2), dtype=float32, numpy=
array([[[-1.0228443 , 0.34588122],
[ 2.188323 , -0.7523911 ]],
[[-0.56017506, -1.5636952 ],
[ 1.572252 , 1.6189265 ]]], dtype=float32)>