codecamp

TensorFlow如何实现张量收缩

tf.einsum

einsum(
    equation,
    *inputs
)

定义在:tensorflow/python/ops/special_math_ops.py.

参考指南:数学>减少张量的计算

任意维度张量之间的广义收缩.

这个函数返回一个张量,其元素其元素是由等式定义的,这是由爱因斯坦求和公式所启发的速写形式定义的.作为示例,考虑将两个矩阵 A 和 B 相乘以形成矩阵C.C的元素由下式给出:

C[i,k] = sum_j A[i,j] * B[j,k]

相应的等式是:

ij,jk->ik

一般来说, 方程是从较熟悉的元素方程得到:

  1. 删除变量名称、括号和逗号;
  2. 用 "*" 替换 ",";
  3. 删除总和标志;
  4. 将输出移到右侧,并将 "=" 替换为 "->>".

许多常见操作可以用这种方式来表示.例如:

# Matrix multiplication
>>> einsum('ij,jk->ik', m0, m1)  # output[i,k] = sum_j m0[i,j] * m1[j, k]

# Dot product
>>> einsum('i,i->', u, v)  # output = sum_i u[i]*v[i]

# Outer product
>>> einsum('i,j->ij', u, v)  # output[i,j] = u[i]*v[j]

# Transpose
>>> einsum('ij->ji', m)  # output[j,i] = m[i,j]

# Batch matrix multiplication
>>> einsum('aij,ajk->aik', s, t)  # out[a,i,k] = sum_j s[a,i,j] * t[a, j, k]

此函数的行为类似于 numpy.einsum,但不支持:

  • 椭圆(下标像:ij...,jk...->ik...)
  • 一个轴在单个输入上出现多次的下标(例如 ijj、k->> ik).
  • 在多个输入之间求和的下标(例如 ij、ij、jk->> ik).

ARGS:

  • equation:一种描述收缩的 str,与 numpy.einsum 格式相同.
  • * inputs:合同的输入(每个张量),其形状应与 equation 一致.

返回:

返回收缩的张量,形状由 equation 决定.

注意:

  • ValueError:如果 equation 格式不正确,equation 隐含的输入数与 len(inputs) 不匹配,一个轴出现在输出下标中,但不显示在任何输入中,输入的维数与其下标中的索引数不同,或者输入形状沿特定轴线不一致. 


计算TensorFlow序列之间的编辑距离
TensorFlow实现字符串编码
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

TensorFlow 函数介绍

TensorFlow 函数模块:tf

TensorFlow的image模块

TensorFlow使用之tf.io

TensorFlow使用之tf.keras

TensorFlow函数教程:tf.keras.applications

TensorFlow函数教程:tf.keras.backend

TensorFlow使用之tf.metrics

TensorFlow使用之tf.nn

TensorFlow使用之tf.python_io

TensorFlow 功能函数

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }