/
vuron
/
adept
Обзор
Документация
Войти
/
vuron
/
adept
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
with_cpu
tests/grad_mode_tests.cpp
38 строк
1 KB
kolkir
Add autograd disable and enable functionality
28 янв 2025, 00:19
28 янв 2025, 00:19
92c91bd
Код
Авторство
О чём код?
#include <adept/autograd/autograd.hpp> #include <adept/nn/cross_entropy.hpp> #include <adept/tensor.hpp> #include "catch.hpp" using namespace adept; TEST_CASE("Disable autograd backward fail", "[gradient]") { NoAutoGradGuard guard; auto x = Variable(Tensor::from_values({1.f}, {1, 1}, device_t::CPU)); auto y = Variable(Tensor::from_values({2.f}, {1, 1}, device_t::CPU)); auto z = x + y; REQUIRE_THROWS(z.backward()); } TEST_CASE("Requires grad zero grad", "[gradient]") { auto x = Variable(Tensor::from_values({1.f}, {1, 1}, device_t::CPU)); x.requires_grad(false); auto y = Variable(Tensor::from_values({2.f}, {1, 1}, device_t::CPU)); auto z = x + y; REQUIRE_NOTHROW(z.backward()); REQUIRE_THAT(x.grad().at<float32_t>({0, 0}), Catch::WithinRel(0.0f, 0.001f)); REQUIRE_THAT(y.grad().at<float32_t>({0, 0}), Catch::WithinRel(1.0f, 0.001f)); } TEST_CASE("Requires grad disable subgraph", "[gradient]") { auto x = Variable(Tensor::from_values({1.f, 3.f}, {1, 2}, device_t::CPU)); auto y = Variable(Tensor::from_values({2.f, 4.f}, {1, 2}, device_t::CPU)); auto z = x + y; z.requires_grad(false); sum(z).backward(); REQUIRE_THAT(x.grad().at<float32_t>({0, 0}), Catch::WithinRel(0.0f, 0.001f)); REQUIRE_THAT(y.grad().at<float32_t>({0, 0}), Catch::WithinRel(0.0f, 0.001f)); REQUIRE_THAT(x.grad().at<float32_t>({0, 1}), Catch::WithinRel(0.0f, 0.001f)); REQUIRE_THAT(y.grad().at<float32_t>({0, 1}), Catch::WithinRel(0.0f, 0.001f)); }