Esta página foi traduzida pela API Cloud Translation.
Switch to English

tf.linalg.matmul

TensorFlow 1 versão Ver fonte no GitHub

Multiplica matriz a por matriz b , produzindo a * b .

Usado nos cadernos

Usado na guia Usado nos tutoriais

As entradas deve, após quaisquer transposições, ser tensores de classificação> = 2, onde as dimensões internas 2 especificar dimensões multiplicação de matrizes válidos, e quaisquer outras dimensões exteriores correspondentes especificar o tamanho do lote.

Ambas as matrizes devem ser do mesmo tipo. Os tipos suportados são: float16 , float32 , float64 , int32 , complex64 , complex128 .

De qualquer matriz pode ser transposta ou adjointed (conjugada e transposta) na mosca, definindo uma da bandeira correspondente a True . Estes são False por padrão.

Se uma ou ambas as matrizes contêm uma grande quantidade de zeros, um algoritmo de multiplicação mais eficiente pode ser usado, definindo o correspondente a_is_sparse ou b_is_sparse bandeira para True . Estes são False por padrão. Essa otimização só está disponível para matrizes simples (Rank-2 tensores) com tipos de dados bfloat16 ou float32 .

Um simples 2-D tensor matriz multiplicação:

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)>

A multiplicação de matrizes lote com forma de lote [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)>

Desde python> = 3,5 a @ operador é suportado (veja PEP 465 ). Em TensorFlow, ele simplesmente chama o tf.matmul() função, de modo que as linhas seguintes são equivalentes:

d = a @ b @ [[10], [11]]
d = tf.matmul(tf.matmul(a, b), [[10], [11]])

a tf.Tensor do tipo float16 , float32 , float64 , int32 , complex64 , complex128 e classificação> 1.
b tf.Tensor com o mesmo tipo e classificação como a .
transpose_a Se True , a é transposta antes da multiplicação.
transpose_b Se True , b é transposta antes da multiplicação.
adjoint_a Se True , a é conjugado e transposta antes da multiplicação.
adjoint_b Se True , b é conjugado e transposta antes da multiplicação.
a_is_sparse Se True , a é tratado como uma matriz escasso. Aviso, este não suporta tf.sparse.SparseTensor , ele só faz otimizações que assumem a maioria dos valores em a são zero. Veja tf.sparse.sparse_dense_matmul para algum suporte para tf.sparse.SparseTensor multiplicação.
b_is_sparse Se True , b é tratado como uma matriz escasso. Aviso, este não suporta tf.sparse.SparseTensor , ele só faz otimizações que assumem a maioria dos valores em a são zero. Veja tf.sparse.sparse_dense_matmul para algum suporte para tf.sparse.SparseTensor multiplicação.
name Nome para a operação (opcional).

Um tf.Tensor do mesmo tipo como a e b onde cada mais interna da matriz é o produto das matrizes correspondentes em a e b , por exemplo, se todos os atributos de transposição ou adjuntos são False :

output[..., i, j] = sum_k (a[..., i, k] * b[..., k, j]) , para todos os índices i , j .

Note Este é o produto de matriz, o produto não elemento a elemento.

ValueError Se transpose_a e adjoint_a , ou transpose_b e adjoint_b estão definidos para True .