当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python tf.Tensor.__matmul__用法及代码示例


用法

__matmul__(
    y
)

参数

  • a tf.Tensor 类型为 float16 , float32 , float64 , int32 , complex64 , complex128 且等级 > 1。
  • b tf.Tensora 具有相同的类型和等级。
  • 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.sparse_dense_matmul一些支持tf.sparse.SparseTensor乘法。
  • b_is_sparse 如果True,b被视为稀疏矩阵。注意,这不支持tf.sparse.SparseTensor, 它只是进行假设大多数值的优化a为零。看tf.sparse.sparse_dense_matmul一些支持tf.sparse.SparseTensor乘法。
  • output_type 如果需要,输出数据类型。默认为 None 在这种情况下 output_type 与输入类型相同。目前仅在输入张量为 (u)int8 类型且 output_type 可以为 int32 时有效。
  • name 操作的名称(可选)。

返回

  • A tf.Tensor同类型的ab其中每个inner-most矩阵是对应矩阵的乘积ab,例如如果所有转置或伴随属性都是False

    output[..., i, j] = sum_k (a[..., i, k] * b[..., k, j]) ,对于所有索引 i , j

  • Note 这是矩阵产品,而不是元素产品。

抛出

  • ValueError 如果 transpose_aadjoint_a ,或 transpose_badjoint_b 都设置为 True
  • TypeError 如果指定了output_type,但a , boutput_type的类型不是(u)int8、(u)int8和int32。

将矩阵 a 乘以矩阵 b ,产生 a * b

在任何转置之后,输入必须是秩 >= 2 的张量,其中内部 2 维指定有效的矩阵乘法维度,任何进一步的外部维度指定匹配的批量大小。

两个矩阵必须属于同一类型。支持的类型是:bfloat16 , float16 , float32 , float64 , int32 , int64 , complex64 , complex128

通过将相应标志之一设置为 True ,可以即时转置或连接(共轭和转置)矩阵。默认情况下,这些是False

如果一个或两个矩阵包含很多零,则可以通过将相应的 a_is_sparseb_is_sparse 标志设置为 True 来使用更有效的乘法算法。默认情况下,这些是False。此优化仅适用于数据类型为 bfloat16float32 的普通矩阵(rank-2 张量)。

一个简单的二维张量矩阵乘法:

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

相关用法


注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.Tensor.__matmul__。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。