Реализовать Тензорное Умножение, используя C, в соответствии с операцией "mat_mul" TensorFlow - PullRequest
0 голосов
/ 01 июля 2019

Я хочу реализовать операцию mat_mul TensorFlow в C-программировании.Я думал обобщить тензорное умножение ранга 2 до любого рангового числа.

Я реализовал тензорное умножение ранга 2, используя язык программирования C.

Если я пытаюсь расширить свое текущее решениечтобы поддерживать большее число рангов, нужно больше циклов, чтобы покрыть больше измерений.В результате это решение не является ни динамическим, ни осуществимым.

Вот представляемое человеком представление двух тензоров.

int a[2][3] = {{1, 2, 3},{4, 5, 6}};
int b[3][2] = {{7, 8},{9, 10},{11, 12}};
The tensor values are given to the program with the form of vectors a_1 and b_1 and their shape is known.
int a_1[6] = {1, 2, 3, 4, 5, 6};     // shape = [2 ,3]
int b_1[6] = {7, 8, 9, 10, 11, 12};  // shape = [3, 2]

a_dim1 = 2; a_dim2 = 3; // rows,columns of tensor a_1
b_dim1 = 3; b_dim2 = 2; // rows,columns of tensor b_1

Результат сохраняется в умножении на вектор.

Умножение также может быть выполнено с указателями указателей вместо использования векторов для лучшего представления тензоров ранга 2.

int multiply[a_dim1*b_dim2];
int sum=0;
int l = 0;

for(int i=0; i<a_dim1; i++){       //iterates over rows of matrix a
    for(int j=0; j<b_dim2; j++){   // iterates over columns of matrix b
        for(int k=0; k<a_dim2; k++){  //iterates over columns of matrix a
            sum += a_1[k+ a_dim2*i] * b_1[(k * b_dim2) + j];
        }
        multiply[l] = sum;
        printf(" multiply[%d] %d :\n", l, multiply[l]);
        sum=0;
        l++;
}}}

Я попытался добавить дополнительные петли для большего размера, и я прочитал соответствующие ссылки ниже:

1) Основной сайт: https://www.tensorflow.org/api_docs/python/tf/linalg/matmul

2) По этой ссылке нетМне понятно, как работает mat mul в tenorflow, хотя я прочитал ответ коллеги, я не смог найти тот же код, который изображен в ответе в github. Как работает MatMul op в тензорном потоке?

3) Используют ли они пакетный мат для ранга больше 2 в TensorFLow? https://www.tensorflow.org/api_docs/cc/class/tensorflow/ops/batch-mat-mul

4) Какработает tenorflow batch_matmul?

5) https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/batch_matmul_op_impl.h

6) Я ожидал, что по этой ссылке поймут, как работает муль мул в больших ранговых числах https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/matmul_op.cc

7) С математической точки зрения: https://math.stackexchange.com/questions/63074/is-there-a-3-dimensional-matrix-by-matrix-product

https://en.wikipedia.org/wiki/Tensor_contraction https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/matmul_op.h

...