/
vuron
/
adept
Обзор
Документация
Войти
/
vuron
/
adept
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
with_cpu
tests/avgpool2d_tests.cpp
37 строк
2 KB
kolkir
AvgPool2d implementation
08 фев 2025, 20:12
08 фев 2025, 20:12
61cfbe7
Код
Авторство
О чём код?
#include <adept/nn/avgpool2d.hpp> #include "catch.hpp" using namespace adept; TEST_CASE("AvgPool2d construction", "[avgpool2d]") { AvgPool2d pool(AvgPool2dOptions(3)); } TEST_CASE("AvgPool2d im3x3", "[avgpool2d]") { std::vector<float32_t> im_data = {1, 2, 3, 4, 5, 6, 7, 8, 9}; auto im = Variable(Tensor::from_blob( im_data.data(), {.shape = {1, 1, 3, 3}, .device = device_t::CPU, .dtype = to_dtype<float32_t>()})); AvgPool2d pool(AvgPool2dOptions(2).with_stride(1)); auto res = pool(im); REQUIRE_THAT(res.data().at<float32_t>({0, 0, 0, 0}), Catch::WithinRel(3.f, 0.001f)); REQUIRE_THAT(res.data().at<float32_t>({0, 0, 0, 1}), Catch::WithinRel(4.f, 0.001f)); REQUIRE_THAT(res.data().at<float32_t>({0, 0, 1, 0}), Catch::WithinRel(6.f, 0.001f)); REQUIRE_THAT(res.data().at<float32_t>({0, 0, 1, 1}), Catch::WithinRel(7.f, 0.001f)); mean(res).backward(); REQUIRE_THAT(im.grad().at<float32_t>({0, 0, 0, 0}), Catch::WithinRel(0.0625f, 0.001f)); REQUIRE_THAT(im.grad().at<float32_t>({0, 0, 0, 1}), Catch::WithinRel(0.1250f, 0.001f)); REQUIRE_THAT(im.grad().at<float32_t>({0, 0, 0, 2}), Catch::WithinRel(0.0625f, 0.001f)); REQUIRE_THAT(im.grad().at<float32_t>({0, 0, 1, 0}), Catch::WithinRel(0.1250f, 0.001f)); REQUIRE_THAT(im.grad().at<float32_t>({0, 0, 1, 1}), Catch::WithinRel(0.25f, 0.001f)); REQUIRE_THAT(im.grad().at<float32_t>({0, 0, 1, 2}), Catch::WithinRel(0.1250f, 0.001f)); REQUIRE_THAT(im.grad().at<float32_t>({0, 0, 2, 0}), Catch::WithinRel(0.0625f, 0.001f)); REQUIRE_THAT(im.grad().at<float32_t>({0, 0, 2, 1}), Catch::WithinRel(0.1250f, 0.001f)); REQUIRE_THAT(im.grad().at<float32_t>({0, 0, 2, 2}), Catch::WithinRel(0.0625f, 0.001f)); }