Einsum算子使用爱因斯坦求和约定评估Tensor序列上的代数Tensor运算,形式为“term1, term2 -> y_term”。公式字符串包含逗号分隔的小写字母序列。每个项对应于操作数Tensor,项中的字符对应于操作数维度。
x:输入Tensor,数据类型:float16、float、int32,支持非连续的tensor,不支持空tensor,数据格式支持ND,输入Tensor个数为1~2147483647个。
equation:爱因斯坦求和的下标,一个和表达式字符串。
y:输出Tensor,数据类型:float16、float、int32,支持非连续的tensor,不支持空tensor,数据格式支持ND。
目前onnx的einsum只支持双输入的20种情况:
i.e. 如"abc,cde->abde",abc表示第一个张量的维度,其中a、b和c是该Tensor的三个维度;cde表示第二个张量的维度,其中c、d和e是该Tensor的三个维度;abde:表示输出Tensor的维度,我们将在计算过程中得到这个维度。例中Einsum会沿着共享的维度进行求和,例中即c维度。也就是说,c维度在两个Tensor中都会出现,Einsum会对这个维度进行求和操作,而其余维度(a、b、d、e)会保留下来。
"abc,cde->abde","abc,cde->abde","abcd,aecd->aceb","abcd,adbe->acbe","abcd,cde->abe","abc,cd->abd","abc,dc->abd","abc,abd->dc","abc,dec->abde","abc,abde->dec","abcd,aecd->acbe","abcd,acbe->aecd","abcd,ecd->abe","abcd,abe->ecd","abcd,acbe->adbe","abcd,abde->abce","abcd,abce->abde","abcd,aebd->aebc","abcd,abce->acde","abc,abd->acd","ab,cb->ac"。
支持的ONNX版本Opset v12/v13/v14/v15/v16/v17/v18