Реализация TensorFlow Conv2D?

Я пытаюсь найти, где реализуется реальная операция Conv2D, чтобы я мог оценить шаблоны доступа к памяти. Отслеживая все вокруг, похоже, что выполнение операции Conv2D входит в Eigen с вызовом функции contract(). Проблема в том, что я не могу найти определение или объявление функции в источнике TensorFlow или Eigen.

Какие функции в основном отвечают за выполнение операции Conv2D в TensorFlow? Я хотел бы увидеть, как он парализован, каков общий шаблон доступа к памяти и как выполняются необработанные вычисления.

Этот запрос предназначен специально для ЦП, поскольку я уже в какой-то степени изучал выполнение GPU.


person Armando Montanez    schedule 04.08.2017    source источник


Ответы (3)


После некоторого поиска я обнаружил, что реальная реализация CPU Conv2D находится в deep_conv2d.cc.

person Armando Montanez    schedule 18.08.2017
comment
Знаете ли вы, в чем разница между глубокой и прямой сверткой, реализованной в этом файле? - person Ayushi Agarwal; 18.09.2017

Я думаю, что Conv2dCPU реализован в этом файле с использованием Eigen Конв., строка 61 и последующие

person Ishant Mrinal    schedule 04.08.2017
comment
Не совсем, это настройка для операции (вызов нескольких оптимизированных методов для упрощенных случаев). Обратите внимание на вызов functor::SpatialConvolution<Device, T>()(ctx->eigen_device<Device>(), output->tensor<T, 4>(), input.tensor<T, 4>(), filter.tensor<T, 4>(), row_stride, col_stride, padding) в финальном else. Это начинает извилистый путь вызовов функций, который я не могу отследить до какой-то структуры, которая, похоже, действительно выполняет умножения / циклы и т. Д. - person Armando Montanez; 05.08.2017
comment
Вы можете посмотреть github.com/tensorflow/ tenorflow / blob / master / tensorflow / core / - person Ishant Mrinal; 05.08.2017

contract() возвращает абстрактное выражение, вычисление которого реализовано в TensorContraction.h. По сути, это оболочка поверх произведений «матрица-матрица» или «матрица-вектор» Эйгена.

person ggael    schedule 06.08.2017