View source on GitHub |
Batchwise dot product.
tf.keras.backend.batch_dot( x, y, axes=None )
batch_dot
is used to compute dot product of x
and y
when x
and y
are data in batch, i.e. in a shape of (batch_size, :)
. batch_dot
results in a tensor or variable with less dimensions than the input. If the number of dimensions is reduced to 1, we use expand_dims
to make sure that ndim is at least 2.
Arguments | |
---|---|
x | Keras tensor or variable with ndim >= 2 . |
y | Keras tensor or variable with ndim >= 2 . |
axes | Tuple or list of integers with target dimensions, or single integer. The sizes of x.shape[axes[0]] and y.shape[axes[1]] should be equal. |
Returns | |
---|---|
A tensor with shape equal to the concatenation of x 's shape (less the dimension that was summed over) and y 's shape (less the batch dimension and the dimension that was summed over). If the final rank is 1, we reshape it to (batch_size, 1) . |
x_batch = tf.keras.backend.ones(shape=(32, 20, 1)) y_batch = tf.keras.backend.ones(shape=(32, 30, 20)) xy_batch_dot = tf.keras.backend.batch_dot(x_batch, y_batch, axes=(1, 2)) tf.keras.backend.int_shape(xy_batch_dot) (32, 1, 30)
Let x
's shape be (100, 20)
and y
's shape be (100, 30, 20)
. If axes
is (1, 2), to find the output shape of resultant tensor, loop through each dimension in x
's shape and y
's shape:
x.shape[0]
: 100 : append to output shapex.shape[1]
: 20 : do not append to output shape, dimension 1 of x
has been summed over. (dot_axes[0]
= 1)y.shape[0]
: 100 : do not append to output shape, always ignore first dimension of y
y.shape[1]
: 30 : append to output shapey.shape[2]
: 20 : do not append to output shape, dimension 2 of y
has been summed over. (dot_axes[1]
= 2) output_shape
= (100, 30)
© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.3/api_docs/python/tf/keras/backend/batch_dot