/**++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * * 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_sgd.hpp * Revision: 0.1.0 * Date: 04-08-2026 * Author: Michelle Bausager * * Description: * Defines the optimizer_sgd struct used in neural network * *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ #pragma once //--------------------------------------------------------------------------------------------------------------------------- // INCLUDE DESCRIPTION //--------------------------------------------------------------------------------------------------------------------------- #include #include namespace panic{ namespace neural_network{ /** * @brief optimizer_sgd for the rest of the neural network library to use * */ struct optimizer_sgd: optimizer{ panic::types::real_t learning_rate; /** * @brief Constructor * * @param learning_rate The learning rate for the optimization. * */ optimizer_sgd(const panic::types::real_t learning_rate = static_cast(1e-3)); /** * @brief Default de-constructor * */ ~optimizer_sgd() = default; /** * @brief Updates weights and biases in trainable layers * * @param layer Trianable layer to update. * */ bool update_params(trainable_layer& layer) override; }; } // namespace tensor } // namespace panic