/**++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * * PANIC * Portable Algorithms and Numerics In C++ * * Scientific computing from scratch, with feeling. * * Copyright (c) 2026 Michelle Bausager * * This file is part of PANIC. * * PANIC is free software licensed under the GNU General Public License v3.0 or later. * You may redistribute and/or modify it under the terms of the GPL. * * PANIC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the LICENSE file for the full license text. * * SPDX-License-Identifier: GPL-3.0-or-later * *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * * Project Name: PANIC * Module Name: neural_network * File Name: optimizer_adagrad.hpp * Revision: 0.1.0 * Date: 04-08-2026 * Author: Michelle Bausager * * Description: * Defines the optimizer_adagrad struct used in neural network * *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ #pragma once //--------------------------------------------------------------------------------------------------------------------------- // INCLUDE DESCRIPTION //--------------------------------------------------------------------------------------------------------------------------- #include #include namespace panic{ namespace neural_network{ /** * @brief optimizer_adagrad for the rest of the neural network library to use * */ struct optimizer_adagrad: optimizer{ panic::types::real_t learning_rate; panic::types::real_t decay; panic::types::real_t epsilon; panic::types::uint_t iterations; /** * @brief Constructor * * @param learning_rate The learning rate for the optimization. * @param decay The decay for the learning rate over the interations. * */ optimizer_adagrad(const panic::types::real_t learning_rate = static_cast(1), const panic::types::real_t decay = static_cast(0), const panic::types::real_t epsilon = static_cast(1e-7)); /** * @brief Default de-constructor * */ ~optimizer_adagrad() = default; /** * @brief Updates weights and biases in trainable layers * * @param layer Trianable layer to update. * */ bool update_params(trainable_layer& layer) override; /** * @brief function to update internal parameters before update_params() * * @param layer Trianable layer to update. * */ bool pre_update_params() override; /** * @brief function to update internal parameters after update_params() * */ bool post_update_params() override; }; } // namespace tensor } // namespace panic