Conv2d на Си++
2022-08-12 13:11Двумерная цифровая свёртка - основная математическая операция, на которой строятся нейронные сети. Среди программистов много хороших математиков, но про conv2d почему-то знают немногие. Хотя ничего сложного: умножай себе да суммируй.

С нейронными сетями принято возиться на Питоне. Conv2D в пакетах типа Keras или PyTorch - базовое понятие. Но что, если хочется поиграться со свёрткой на Си++? Тоже есть решение: метод convolve() класса Tensor в пакете Eigen.
Примерно так:

С нейронными сетями принято возиться на Питоне. Conv2D в пакетах типа Keras или PyTorch - базовое понятие. Но что, если хочется поиграться со свёрткой на Си++? Тоже есть решение: метод convolve() класса Tensor в пакете Eigen.
Примерно так:
Полностью смотрите здесь: eigen/convolve.cpp// Элементы в многомерных массивах могут располагаться по столбцам или по строкам.
// Мы выбираем по строкам.
const auto layout = Eigen::RowMajor;
// Создаём входной тензор: четырёхмерный массив.
Eigen::Tensor<float, 4, layout> input(3, 3, 7, 11);
// Создаём так называемое ядро свёрки: двумерный массив.
Eigen::Tensor<float, 2, layout> kernel(2, 2);
// Создаём выходной тензор, здесь окажется результат свёртки.
Eigen::Tensor<float, 4, layout> output(3, 2, 6, 11);
// Определяем, по каким размерностям будем сворачивать.
Eigen::array<ptrdiff_t, 2> dims({1, 2});
// Выполняем свёртку.
output = input.convolve(kernel, dims);

no subject
Date: 2022-08-12 21:58 (UTC)Я, кстати, не понимаю этого обсещена со сверткой; известна уже 60 лет как, применялась к обработке цифровых фоток, и чо?
no subject
Date: 2022-08-12 22:11 (UTC)Хотя, некоторые пытаются на этом (и на сракчейне) построить вообще всё.
no subject
Date: 2022-08-12 22:32 (UTC)no subject
Date: 2022-08-12 23:22 (UTC)no subject
Date: 2022-08-12 23:32 (UTC)Галуа вообще загадочный пацан. Не он бы, атомной бомбы, может быть, не было бы.
no subject
Date: 2022-08-13 02:42 (UTC)no subject
Date: 2022-08-15 03:40 (UTC)no subject
Date: 2022-08-15 04:45 (UTC)Для того чтобы цеплять layers в tensorflow как свертка работает знать необязательно. Для переноса Tensorflow на новую архитектуру свертки нужно знать, но здесь непонятно где нужен плюсный темплатный Eigen.
no subject
Date: 2022-08-15 05:13 (UTC)no subject
Date: 2022-08-15 06:12 (UTC)Сам я в студенческие времена пытался свертки считать на 68000 и обломался.