Loading...
Searching...
No Matches
adam.h
Go to the documentation of this file.
1// SPDX-License-Identifier: AGPL-3.0-only
2// Copyright (C) 2026 Artificial Intelligence Techniques, S.L. and Roberto López González
3
4#pragma once
5
7
8namespace opennn
9{
10
11struct BackPropagation;
12
13class Adam final : public Optimizer
14{
15
16public:
17
19
20 explicit Adam(Loss* = nullptr);
21
23
24 void set_learning_rate(const float new_learning_rate) { learning_rate = new_learning_rate; }
25 float get_learning_rate() const { return learning_rate; }
26 void set_beta_1(const float);
27 void set_beta_2(const float);
28 void set_epsilon(float);
29 float get_epsilon() const noexcept { return epsilon; }
30
31 void set_bf16_first_moment(const bool enabled) { bf16_first_moment = enabled; }
32 bool get_bf16_first_moment() const noexcept { return bf16_first_moment; }
33
36
37 void on_epoch_begin(Index, OptimizerData&) override;
38
39 void from_JSON(const JsonDocument&) override;
40
41 void to_JSON(JsonWriter&) const override;
42
43private:
44
45 string get_display_name() const override { return "adaptive moment estimation \"Adam\""; }
46 bool supports_cuda_graph() const noexcept override { return true; }
47 void setup_optimizer_data(OptimizerData&, Index, Device) override;
48
49 float learning_rate = 0.001f;
50
51 float beta_1 = 0.9f;
52
53 float beta_2 = 0.999f;
54
55 float epsilon = EPSILON;
56
57 // Storage precision of the device first-moment slot: BF16 halves it to 2 bytes
58 // per parameter, taking Adam's resident state from 8 to 6 bytes per parameter.
59 // Defaulted from OPENNN_ADAM_BF16_MOMENT in the constructor; see the note
60 // there for why the second moment stays FP32.
61 bool bf16_first_moment = true;
62
63 Index update_step = 0;
64};
65
66}
float get_learning_rate() const
Definition adam.h:25
void set_learning_rate(const float new_learning_rate)
Definition adam.h:24
void set_beta_1(const float)
void to_JSON(JsonWriter &) const override
void from_JSON(const JsonDocument &) override
float get_epsilon() const noexcept
Definition adam.h:29
void configure_for_task(NetworkTask) override
DataSlot
Definition adam.h:18
@ GraphScalars
Definition adam.h:18
@ SquareGradientMoment
Definition adam.h:18
@ GradientMoment
Definition adam.h:18
bool get_bf16_first_moment() const noexcept
Definition adam.h:32
void on_epoch_begin(Index, OptimizerData &) override
void set_beta_2(const float)
Adam(Loss *=nullptr)
void set_epsilon(float)
void update_parameters(BackPropagation &, OptimizerData &, UpdateMode=UpdateMode::Standard) override
void set_bf16_first_moment(const bool enabled)
Definition adam.h:31
Definition json.h:75
Definition json.h:92
Definition loss.h:19
UpdateMode
Definition optimizer.h:115
@ Standard
Definition optimizer.h:115
Optimizer(Loss *=nullptr)
Definition configuration.h:10
NetworkTask
Definition network.h:74
constexpr float EPSILON
Definition opennn_types.h:308
Device
Definition configuration.h:12
Definition back_propagation.h:19
Definition optimizer.h:28