Loading...
Searching...
No Matches
embedding_layer.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
9
10namespace opennn
11{
12
13class Embedding final : public Layer
14{
15public:
16
17 Embedding(const Shape& = {0, 0},
18 Index = 0,
19 const string& = "embedding_layer");
20
21 bool accepts_input_rank(Index rank) const override { return is_one_of(rank, 1); }
22 bool allows_bf16_input_cast(size_t) const noexcept override { return false; }
23
24 Shape get_input_shape() const noexcept override { return {sequence_length}; }
25
26 void apply_input_shape(const Shape& new_input_shape) override
27 {
28 set(vocabulary_size, new_input_shape.dim_or_zero(0), embedding_dimension, label);
29 }
30 void set_output_shape(const Shape& shape) override
31 {
32 set(vocabulary_size, shape.dim_or_zero(0), shape.dim_or_zero(1), label);
33 }
34 Shape get_output_shape() const override;
35
36 Index get_vocabulary_size() const { return vocabulary_size; }
37 Index get_sequence_length() const { return sequence_length; }
38 Index get_embedding_dimension() const { return embedding_dimension; }
39
40 vector<TensorSpec> get_forward_specs(Index) const override;
41 vector<TensorSpec> get_backward_specs(Index) const override { return {}; }
42 ForwardSlotKind get_forward_slot_kind(size_t slot) const override
43 {
44 return slot == DropoutMask
47 }
48
49 void set(Index = 0,
50 Index = 0,
51 Index = 0,
52 const string& = "embedding_layer");
53
54 void set_scale_embedding(bool enabled) { embedding_lookup.scale_embedding = enabled; }
55 void set_add_positional_encoding(bool enabled) { embedding_lookup.add_positional_encoding = enabled; }
56
57 void set_learned_positional(bool enabled)
58 {
59 embedding_lookup.add_positional_encoding = enabled;
60 embedding_lookup.positional_trainable = enabled;
61 }
62 bool get_learned_positional() const { return embedding_lookup.positional_trainable; }
63
64 void set_export_valid_lengths(bool enabled) { embedding_lookup.export_valid_lengths = enabled; }
65 bool get_export_valid_lengths() const { return embedding_lookup.export_valid_lengths; }
66 void set_weights_follow_compute_dtype(bool enabled) { embedding_lookup.weights_follow_compute_dtype = enabled; }
67 void set_dropout_rate(float rate) { dropout.set_rate(rate); }
68
69 void on_compute_dtype_changed() override { embedding_lookup.compute_dtype = get_compute_dtype(); }
70
71 void read_JSON_body(const Json*) override;
72 void write_JSON_body(JsonWriter&) const override;
73
74private:
75
76 Index vocabulary_size = 0;
77 Index sequence_length = 0;
78 Index embedding_dimension = 0;
79
80 EmbeddingLookupOperator embedding_lookup;
81 DropoutOperator dropout;
82
83 enum Forward {Input, DropoutMask, Output};
84};
85
86}
void set_scale_embedding(bool enabled)
Definition embedding_layer.h:54
bool allows_bf16_input_cast(size_t) const noexcept override
Definition embedding_layer.h:22
void set_dropout_rate(float rate)
Definition embedding_layer.h:67
void set_output_shape(const Shape &shape) override
Definition embedding_layer.h:30
bool accepts_input_rank(Index rank) const override
Definition embedding_layer.h:21
void read_JSON_body(const Json *) override
Embedding(const Shape &={0, 0}, Index=0, const string &="embedding_layer")
void on_compute_dtype_changed() override
Definition embedding_layer.h:69
Index get_sequence_length() const
Definition embedding_layer.h:37
ForwardSlotKind get_forward_slot_kind(size_t slot) const override
Definition embedding_layer.h:42
void set(Index=0, Index=0, Index=0, const string &="embedding_layer")
vector< TensorSpec > get_forward_specs(Index) const override
void set_export_valid_lengths(bool enabled)
Definition embedding_layer.h:64
bool get_learned_positional() const
Definition embedding_layer.h:62
void set_add_positional_encoding(bool enabled)
Definition embedding_layer.h:55
vector< TensorSpec > get_backward_specs(Index) const override
Definition embedding_layer.h:41
Shape get_input_shape() const noexcept override
Definition embedding_layer.h:24
bool get_export_valid_lengths() const
Definition embedding_layer.h:65
void set_learned_positional(bool enabled)
Definition embedding_layer.h:57
void set_weights_follow_compute_dtype(bool enabled)
Definition embedding_layer.h:66
Index get_vocabulary_size() const
Definition embedding_layer.h:36
Index get_embedding_dimension() const
Definition embedding_layer.h:38
void apply_input_shape(const Shape &new_input_shape) override
Definition embedding_layer.h:26
Shape get_output_shape() const override
void write_JSON_body(JsonWriter &) const override
Definition json.h:92
Definition json.h:24
Type get_compute_dtype() const noexcept
Definition layer.h:157
string label
Definition layer.h:215
Layer(LayerType type, Trainability trainability=Trainability::Trainable)
Definition layer.h:210
Definition configuration.h:10
constexpr bool is_one_of(const T &value, const Candidates &... candidates)
Definition opennn_types.h:273
ForwardSlotKind
Definition layer.h:18
@ TrainingOnly
Definition layer.h:18
@ Pooled
Definition layer.h:18
Definition dropout_operator.h:15
Definition embedding_lookup_operator.h:23
Definition tensor_types.h:172
Index dim_or_zero(size_t i) const noexcept
Definition tensor_types.h:219