tf.compat.v1.linalg.matmul
Умножает матрицу a на матрицу b, получая a * b.
tf.compat.v1.linalg.matmul(
a,
b,
transpose_a=False,
transpose_b=False,
adjoint_a=False,
adjoint_b=False,
a_is_sparse=False,
b_is_sparse=False,
output_type=None,
grad_a=False,
grad_b=False,
name=None
)
После выполнения транспонирования входные данные должны быть тензорами ранга >= 2, где внутренние 2 измерения задают допустимые размеры матриц для умножения, а любые дополнительные внешние измерения задают совпадающий размер пакета.
Обе матрицы должны иметь одинаковый тип. Поддерживаются следующие типы: bfloat16, float16, float32, float64, int32, int64, complex64, complex128.
Любую из матриц можно транспонировать или присоединить (сопрячь и транспонировать) на лету, установив соответствующий флаг в значение True. По умолчанию они имеют значение False.
Если одна или обе матрицы содержат много нулей, можно использовать более эффективный алгоритм умножения, установив соответствующий флаг a_is_sparse или b_is_sparse в значение True. По умолчанию они имеют значение False. Эта оптимизация доступна только для обычных матриц (тензоров ранга 2) с типами данных bfloat16 или float32.
Простое умножение матриц — двумерных тензоров:
a = tf.constant([1, 2, 3, 4, 5, 6], shape=[2, 3])
a # 2-D tensor
<tf.Tensor: shape=(2, 3), dtype=int32, numpy=
array([[1, 2, 3],
[4, 5, 6]], dtype=int32)>
b = tf.constant([7, 8, 9, 10, 11, 12], shape=[3, 2])
b # 2-D tensor
<tf.Tensor: shape=(3, 2), dtype=int32, numpy=
array([[ 7, 8],
[ 9, 10],
[11, 12]], dtype=int32)>
c = tf.matmul(a, b)
c # `a` * `b`
<tf.Tensor: shape=(2, 2), dtype=int32, numpy=
array([[ 58, 64],
[139, 154]], dtype=int32)>Пакетное умножение матриц с формой пакета [2]:
a = tf.constant(np.arange(1, 13, dtype=np.int32), shape=[2, 2, 3])
a # 3-D tensor
<tf.Tensor: shape=(2, 2, 3), dtype=int32, numpy=
array([[[ 1, 2, 3],
[ 4, 5, 6]],
[[ 7, 8, 9],
[10, 11, 12]]], dtype=int32)>
b = tf.constant(np.arange(13, 25, dtype=np.int32), shape=[2, 3, 2])
b # 3-D tensor
<tf.Tensor: shape=(2, 3, 2), dtype=int32, numpy=
array([[[13, 14],
[15, 16],
[17, 18]],
[[19, 20],
[21, 22],
[23, 24]]], dtype=int32)>
c = tf.matmul(a, b)
c # `a` * `b`
<tf.Tensor: shape=(2, 2, 2), dtype=int32, numpy=
array([[[ 94, 100],
[229, 244]],
[[508, 532],
[697, 730]]], dtype=int32)>Начиная с Python >= 3.5 поддерживается оператор @ (см. PEP 465). В TensorFlow он просто вызывает функцию tf.matmul(), поэтому следующие строки эквивалентны:
d = a @ b @ [[10], [11]] d = tf.matmul(tf.matmul(a, b), [[10], [11]])
| Аргументы | |
|---|---|
a | tf.Tensor типа float16, float32, float64, int32, complex64, complex128 и ранга > 1. |
b | tf.Tensor того же типа и ранга, что и a. |
transpose_a | Если True, перед умножением a транспонируется. |
transpose_b | Если True, перед умножением b транспонируется. |
adjoint_a | Если True, перед умножением a сопрягается и транспонируется. |
adjoint_b | Если True, перед умножением b сопрягается и транспонируется. |
a_is_sparse | Если True, a обрабатывается как разреженная матрица. Обратите внимание: это не поддерживает tf.sparse.SparseTensor, а лишь применяет оптимизации, предполагающие, что большинство значений в a равны нулю. Поддержку умножения tf.sparse.SparseTensor см. в разделе tf.sparse.sparse_dense_matmul. |
b_is_sparse | Если True, b обрабатывается как разреженная матрица. Обратите внимание: это не поддерживает tf.sparse.SparseTensor, а лишь применяет оптимизации, предполагающие, что большинство значений в b равны нулю. Поддержку умножения tf.sparse.SparseTensor см. в разделе tf.sparse.sparse_dense_matmul. |
output_type | Тип данных результата, если требуется. По умолчанию равен None, и в этом случае output_type совпадает с типом входных данных. Сейчас работает только для входных тензоров типа (u)int8; тип output_type может быть int32. |
grad_a | Установите значение True, чтобы указать, что тензор a предназначен для обратного прохода. |
grad_b | Установите значение True, чтобы указать, что тензор b предназначен для обратного прохода. |
name | Имя операции (необязательно). |
| Возвращает | |
|---|---|
tf.Tensor того же типа, что и a и b, в котором каждая самая внутренняя матрица представляет собой произведение соответствующих матриц в a и b, например, если все атрибуты транспонирования или присоединения имеют значение False:
| |
Note | Это матричное произведение, а не поэлементное произведение. |
| Вызывает исключения | |
|---|---|
ValueError | Если одновременно заданы transpose_a и adjoint_a или transpose_b и adjoint_b со значением True. |
TypeError | Если указан output_type, но типы a, b и output_type не равны соответственно (u)int8, (u)int8 и int32. |
© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/api_docs/python/tf/compat/v1/linalg/matmul