NeuralNetworks 0.2.0__tar.gz → 0.2.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. {neuralnetworks-0.2.0/src/NeuralNetworks.egg-info → neuralnetworks-0.2.2}/PKG-INFO +70 -66
  2. neuralnetworks-0.2.2/README.md +164 -0
  3. neuralnetworks-0.2.2/src/NeuralNetworks/Dependances/__init__.py +75 -0
  4. neuralnetworks-0.2.2/src/NeuralNetworks/Dependances/matplot.py +25 -0
  5. neuralnetworks-0.2.2/src/NeuralNetworks/Dependances/pytorch.py +111 -0
  6. neuralnetworks-0.2.2/src/NeuralNetworks/MLP/FourierFeatures.py +89 -0
  7. neuralnetworks-0.2.2/src/NeuralNetworks/MLP/Layers.py +31 -0
  8. neuralnetworks-0.2.2/src/NeuralNetworks/MLP/__init__.py +99 -0
  9. neuralnetworks-0.2.2/src/NeuralNetworks/MLP/inference.py +26 -0
  10. neuralnetworks-0.2.2/src/NeuralNetworks/Trainer/__init__.py +51 -0
  11. neuralnetworks-0.2.2/src/NeuralNetworks/Trainer/dynamic_learning_rate.py +79 -0
  12. neuralnetworks-0.2.2/src/NeuralNetworks/Trainer/sample_data.py +19 -0
  13. neuralnetworks-0.2.2/src/NeuralNetworks/Trainer/train.py +75 -0
  14. neuralnetworks-0.2.2/src/NeuralNetworks/UI/Learnings.py +45 -0
  15. neuralnetworks-0.2.2/src/NeuralNetworks/UI/Losses.py +45 -0
  16. neuralnetworks-0.2.2/src/NeuralNetworks/UI/__init__.py +9 -0
  17. neuralnetworks-0.2.2/src/NeuralNetworks/__init__.py +23 -0
  18. {neuralnetworks-0.2.0 → neuralnetworks-0.2.2/src/NeuralNetworks.egg-info}/PKG-INFO +70 -66
  19. neuralnetworks-0.2.2/src/NeuralNetworks.egg-info/SOURCES.txt +27 -0
  20. neuralnetworks-0.2.0/README.md +0 -160
  21. neuralnetworks-0.2.0/src/NeuralNetworks/Dependances.py +0 -319
  22. neuralnetworks-0.2.0/src/NeuralNetworks/Latent.py +0 -51
  23. neuralnetworks-0.2.0/src/NeuralNetworks/MLP.py +0 -601
  24. neuralnetworks-0.2.0/src/NeuralNetworks/__init__.py +0 -127
  25. neuralnetworks-0.2.0/src/NeuralNetworks.egg-info/SOURCES.txt +0 -17
  26. neuralnetworks-0.2.0/tests/test_MLP.py +0 -91
  27. {neuralnetworks-0.2.0 → neuralnetworks-0.2.2}/LICENSE +0 -0
  28. {neuralnetworks-0.2.0 → neuralnetworks-0.2.2}/pyproject.toml +0 -0
  29. {neuralnetworks-0.2.0 → neuralnetworks-0.2.2}/setup.cfg +0 -0
  30. {neuralnetworks-0.2.0 → neuralnetworks-0.2.2}/src/NeuralNetworks/tools/AirfRANS.py +0 -0
  31. {neuralnetworks-0.2.0 → neuralnetworks-0.2.2}/src/NeuralNetworks/tools/MNIST.py +0 -0
  32. {neuralnetworks-0.2.0 → neuralnetworks-0.2.2}/src/NeuralNetworks/tools/VKI-LS59.py +0 -0
  33. {neuralnetworks-0.2.0 → neuralnetworks-0.2.2}/src/NeuralNetworks/tools/image.py +0 -0
  34. {neuralnetworks-0.2.0 → neuralnetworks-0.2.2}/src/NeuralNetworks.egg-info/dependency_links.txt +0 -0
  35. {neuralnetworks-0.2.0 → neuralnetworks-0.2.2}/src/NeuralNetworks.egg-info/requires.txt +0 -0
  36. {neuralnetworks-0.2.0 → neuralnetworks-0.2.2}/src/NeuralNetworks.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: NeuralNetworks
3
- Version: 0.2.0
3
+ Version: 0.2.2
4
4
  Summary: Multi-Layer Perceptrons with multi-Fourier encoding, variable learning rate, visualization and PyTorch compilation
5
5
  Author-email: Alexandre Brun <alexandre51160@gmail.com>
6
6
  License: GPL-3.0-or-later
@@ -40,92 +40,101 @@ de traitement d'images pour l'apprentissage sur des images RGB.
40
40
 
41
41
  ### Classes
42
42
 
43
- #### MLP
43
+ #### `MLP`
44
44
 
45
- Multi-Layer Perceptron (MLP) avec options avancées :
45
+ Multi-Layer Perceptron (MLP) avec encodage optionnel Fourier (RFF),
46
+ suivi automatique des pertes, visualisation et compilation PyTorch.
46
47
 
47
- - Encodage Fourier gaussien (RFF) optionnel
48
- - Stockage automatique des pertes
49
- - Compilation Torch optionnelle pour accélérer l’inférence
50
- - Gestion flexible de l’optimiseur, de la fonction de perte et de la normalisation
48
+ Cette classe fournit :
51
49
 
52
- **Méthodes principales :**
50
+ - Un MLP entièrement configurable (dimensions, normalisation, activation)
51
+ - Option d'encodage Fourier (Random Fourier Features) sur les entrées
52
+ - Méthodes pour entraîner le réseau avec mini-batchs et AMP (Automatic Mixed Precision)
53
+ - Visualisation de l'architecture via visualtorch
54
+ - Suivi et affichage de la perte d'entraînement
55
+ - Accès aux poids, biais et nombre de paramètres
53
56
 
54
- - `MLP(layers, learning_rate, Fourier, optim, crit, norm, name, Iscompiled)`
55
- Initialise le réseau avec toutes les options.
56
-
57
- Les valeurs possibles de `optim` sont disponibles avec `optims()`
58
- Les valeurs possibles de `crit` sont disponibles avec `crits()`
59
- Les valeurs possibles de `norm` sont disponibles avec `norms()`
57
+ ---
60
58
 
61
- - `train(inputs, outputs, num_epochs, batch_size)`
62
- Entraîne le MLP sur des données (`inputs → outputs`) en utilisant AMP et mini-batchs.
59
+ ##### Parameters
63
60
 
64
- - `plot(inputs, img_array)`
65
- Affiche l'image originale, la prédiction du MLP et la courbe des pertes.
61
+ | Parameter | Type | Optional | Description |
62
+ |----------------------|---------------|----------|-----------------------------------------------------------------------------------------------|
63
+ | `input_size` | int | Yes | Taille des données en entrée au réseau. Default: `1` |
64
+ | `output_size` | int | Yes | Taille des données en sortie au réseau. Default: `1` |
65
+ | `hidden_layers` | list[int] | Yes | Dimensions successives des couches intermédiaires du réseau. Default: `[1]` |
66
+ | `sigmas` | list[float] | Yes | Liste de sigma pour encodages RFF. Si None : passthrough. Default: `None` |
67
+ | `fourier_input_size` | int | Yes | WIP. Default: `2` |
68
+ | `nb_fourier` | int | Yes | Nombre de fréquences utilisées pour les Fourier Features. Default: `8` |
69
+ | `norm` | str | Yes | Type de normalisation / activation pour les couches cachées (ex: `"Relu"`). Default: `"Relu"` |
70
+ | `name` | str | Yes | Nom du réseau pour identification ou affichage. Default: `"Net"` |
66
71
 
67
- - `params()`
68
- Retourne tous les poids du MLP (ligne par ligne) sous forme de liste de `numpy.ndarray`.
72
+ ---
69
73
 
70
- - `nb_params()`
71
- Calcule le nombre total de poids dans le MLP.
74
+ ##### Attributes
72
75
 
73
- - `neurons()`
74
- Retourne la liste des biais (neurones) de toutes les couches linéaires.
76
+ - `losses : list[float]` — Historique des pertes cumulées lors de l'entraînement
77
+ - `learnings : list[float]` — Historique des taux d'apprentissage utilisées lors de l'entraînement
78
+ - `model : nn.Sequential` — MLP complet construit dynamiquement
79
+ - `name : str` — Nom du réseau
75
80
 
76
81
  ---
77
82
 
78
- ### Fonctions utilitaires
83
+ #### `Trainer`
79
84
 
80
- - `tensorise(obj)`
81
- Convertit un objet array-like ou tensor en `torch.Tensor` float32 sur le device actif.
85
+ ---
82
86
 
83
- - `rglen(list)`
84
- Renvoie un range correspondant aux indices d'une liste.
87
+ ##### Parameters
85
88
 
86
- - `image_from_url(url, img_size)`
87
- Télécharge une image depuis une URL, la redimensionne et génère :
88
- - `img_array` : `np.ndarray (H, W, 3)` pour affichage.
89
- - `inputs` : tenseur `(H*W, 2)` coordonnées normalisées.
90
- - `outputs` : tenseur `(H*W, 3)` valeurs RGB cibles.
89
+ | Parameter | Type | Optional | Description |
90
+ |--------------|-----------------|----------|-----------------------------------------------------------------------------------------------------------------|
91
+ | `*nets` | *MLP | No | Réseaux pour lesquels le trainer va entrainer. |
92
+ | `inputs` | np.array(float) | No | Données en entrée au réseau. |
93
+ | `outputs` | np.array(float) | No | Données en sortie au réseau. |
94
+ | `test_size` | float | Yes | Proportion des données à utiliser pendant l'entrainement. Si None : utilise toutes les données. Default: `None` |
95
+ | `optim` | str | Yes | Nom de l’optimiseur à utiliser (doit exister dans `optims()`). Default: `"Adam"` |
96
+ | `init_lr` | float | Yes | Taux d’apprentissage initial pour l’optimiseur. Default: `1e-3` |
97
+ | `crit` | str | Yes | Fonction de perte à utiliser (doit exister dans `crits()`). Default: `"MSE"` |
98
+ | `batch_size` | float | Yes | Taille des minibatchs. Default: `1024` |
91
99
 
92
100
  ---
93
101
 
94
- ### Visualisation et comparaison
95
-
96
- - `plot(img_array, inputs, *nets)`
97
- Affiche pour chaque réseau l'image reconstruite à partir des entrées.
102
+ ##### `Trainer.train`
98
103
 
99
- - `compare(img_array, inputs, *nets)`
100
- Affiche pour chaque réseau l'erreur absolue entre l'image originale et la prédiction,
101
- et trace également les pertes cumulées. Chaque réseau doit posséder :
104
+ Lancement d'un entrainement avec le trainer définit
102
105
 
106
+ | Parameter | Type | Optional | Description |
107
+ |-----------------|---------|----------|-----------------------------------------|
108
+ | `num_epochs` | int | Yes | Nombres d'itérations à effectuer. |
109
+ | `activate_tqdm` | boolean | Yes | Utilisation d'une barre de progression. |
110
+
103
111
  ---
104
112
 
105
- ### Objets et dictionnaires
113
+ ### Dictionnaires
106
114
 
107
- #### **norms()**
115
+ #### `norms()`
108
116
 
109
- | **Valeurs** | **Module PyTorch** | **Description** |
110
- |---------------------|---------------------------|-----------------------------------------------------------------------------------------------------------|
111
- | **"Relu"** | `nn.ReLU()` | Fonction d'activation ReLU classique (Rectified Linear Unit). |
112
- | **"LeakyRelu"** | `nn.LeakyReLU()` | ReLU avec un petit coefficient pour les valeurs négatives (paramètre `negative_slope`). |
113
- | **"ELU"** | `nn.ELU()` | Fonction d'activation ELU (Exponential Linear Unit), qui a une meilleure gestion des valeurs négatives. |
114
- | **"SELU"** | `nn.SELU()` | SELU (Scaled Exponential Linear Unit), une version améliorée de l'ELU pour des réseaux auto-normalisants. |
115
- | **"GELU"** | `nn.GELU()` | GELU (Gaussian Error Linear Unit), une activation probabiliste basée sur une fonction gaussienne. |
116
- | **"Sigmoid"** | `nn.Sigmoid()` | Fonction d'activation Sigmoid, qui produit une sortie entre 0 et 1. |
117
- | **"Tanh"** | `nn.Tanh()` | Fonction d'activation Tanh, avec une sortie dans l'intervalle [-1, 1]. |
118
- | **"Hardtanh"** | `nn.Hardtanh()` | Variante de Tanh, avec des sorties limitées entre une plage spécifiée. |
119
- | **"Softplus"** | `nn.Softplus()` | Fonction d'activation qui approxime ReLU mais de manière lissée. |
120
- | **"Softsign"** | `nn.Softsign()` | Fonction d'activation similaire à Tanh mais plus souple, avec des valeurs dans [-1, 1]. |
117
+ | **Valeurs** | **Module PyTorch** | **Description** |
118
+ |---------------------|--------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------|
119
+ | **"ReLU"** | [`nn.ReLU()`](https://docs.pytorch.org/docs/stable/generated/torch.nn.ReLU.html) | Fonction d'activation ReLU classique (Rectified Linear Unit). |
120
+ | **"LeakyReLU"** | [`nn.LeakyReLU()`](https://docs.pytorch.org/docs/stable/generated/torch.nn.LeakyReLU.html) | ReLU avec un petit coefficient pour les valeurs négatives (paramètre `negative_slope`). |
121
+ | **"ELU"** | [`nn.ELU()`](https://docs.pytorch.org/docs/stable/generated/torch.nn.ELU.html) | Fonction d'activation ELU (Exponential Linear Unit), qui a une meilleure gestion des valeurs négatives. |
122
+ | **"SELU"** | [`nn.SELU()`](https://docs.pytorch.org/docs/stable/generated/torch.nn.SELU.html) | SELU (Scaled Exponential Linear Unit), une version améliorée de l'ELU pour des réseaux auto-normalisants. |
123
+ | **"GELU"** | [`nn.GELU()`](https://docs.pytorch.org/docs/stable/generated/torch.nn.GELU.html) | GELU (Gaussian Error Linear Unit), une activation probabiliste basée sur une fonction gaussienne. |
124
+ | **"Mish"** | [`nn.Mish()`](https://docs.pytorch.org/docs/stable/generated/torch.nn.Mish.html) | ReLU différentiable en tout points avec passage négatif. |
125
+ | **"Softplus"** | [`nn.Softplus()`](https://docs.pytorch.org/docs/stable/generated/torch.nn.Softplus.html) | Fonction d'activation qui approxime ReLU mais de manière lissée. |
126
+ | **"Sigmoid"** | [`nn.Sigmoid()`](https://docs.pytorch.org/docs/stable/generated/torch.nn.Sigmoid.html) | Fonction d'activation Sigmoid, qui produit une sortie entre 0 et 1. |
127
+ | **"Tanh"** | [`nn.Tanh()`](https://docs.pytorch.org/docs/stable/generated/torch.nn.Tanh.html) | Fonction d'activation Tanh, avec une sortie dans l'intervalle [-1, 1]. |
128
+ | **"Hardtanh"** | [`nn.Hardtanh()`](https://docs.pytorch.org/docs/stable/generated/torch.nn.Hardtanh.html) | Variante de Tanh, avec des sorties limitées entre une plage spécifiée. |
129
+ | **"Softsign"** | [`nn.Softsign()`](https://docs.pytorch.org/docs/stable/generated/torch.nn.Softsign.html) | Fonction d'activation similaire à Tanh mais plus souple, avec des valeurs dans [-1, 1]. |
121
130
 
122
131
  ---
123
132
 
124
- #### **crits()**
133
+ #### `crits()`
125
134
 
126
135
  | **Valeurs** | **Module PyTorch** | **Description** |
127
136
  |--------------------------------|-------------------------------------|----------------------------------------------------------------------------------------------------------------------------|
128
- | **"MSE"** | `nn.MSELoss()` | Mean Squared Error Loss, utilisée pour les régressions. |
137
+ | **"MSE"** | [`nn.MSELoss`](https://pytorch.org/docs/stable/generated/torch.nn.MSELoss.html) | Mean Squared Error Loss, utilisée pour les régressions. |
129
138
  | **"L1"** | `nn.L1Loss()` | L1 Loss (erreur absolue), souvent utilisée pour la régularisation. |
130
139
  | **"SmoothL1"** | `nn.SmoothL1Loss()` | Smooth L1 Loss, une combinaison de L1 et de MSE, moins sensible aux outliers. |
131
140
  | **"Huber"** | `nn.HuberLoss()` | Fonction de perte Huber, une version lissée de L1 et MSE, moins affectée par les grands écarts. |
@@ -136,7 +145,7 @@ Multi-Layer Perceptron (MLP) avec options avancées :
136
145
 
137
146
  ---
138
147
 
139
- #### **optims()**
148
+ #### `optims()`
140
149
 
141
150
  | **Valeurs** | **Module PyTorch** | **Description** |
142
151
  |---------------------|--------------------------------------|------------------------------------------------------------------------------------------------------------------------------------|
@@ -154,7 +163,9 @@ Multi-Layer Perceptron (MLP) avec options avancées :
154
163
 
155
164
  ---
156
165
 
157
- ### Device et configuration
166
+ ### `device`
167
+
168
+ variable principale d'allocation des performances
158
169
 
159
170
  #### **Apple Silicon (macOS)**
160
171
  - Si le système d'exploitation est macOS (nommé `darwin` dans `platform.system()`), la fonction vérifie si l'accélérateur **Metal Performance Shaders** (MPS) est disponible sur l'appareil.
@@ -181,10 +192,3 @@ Multi-Layer Perceptron (MLP) avec options avancées :
181
192
  - Autograd configuré pour privilégier les performances
182
193
 
183
194
  ---
184
-
185
- ### Notes générales
186
-
187
- - Toutes les méthodes de MLP utilisent les tenseurs sur le device global (CPU ou GPU)
188
- - Les images doivent être normalisées entre 0 et 1
189
- - Les fonctions interactives (`plot`, `compare`) utilisent matplotlib en mode interactif
190
- - Le module est conçu pour fonctionner dans Jupyter et scripts Python classiques
@@ -0,0 +1,164 @@
1
+ # NeuralNetworks Module
2
+
3
+ Module complet pour la création, l'entraînement et la visualisation de Multi-Layer Perceptrons (MLP)
4
+ avec encodage optionnel Fourier, gestion automatique des pertes, compilation Torch et outils
5
+ de traitement d'images pour l'apprentissage sur des images RGB.
6
+
7
+ ---
8
+
9
+ ## Contenu principal
10
+
11
+ ### Classes
12
+
13
+ #### `MLP`
14
+
15
+ Multi-Layer Perceptron (MLP) avec encodage optionnel Fourier (RFF),
16
+ suivi automatique des pertes, visualisation et compilation PyTorch.
17
+
18
+ Cette classe fournit :
19
+
20
+ - Un MLP entièrement configurable (dimensions, normalisation, activation)
21
+ - Option d'encodage Fourier (Random Fourier Features) sur les entrées
22
+ - Méthodes pour entraîner le réseau avec mini-batchs et AMP (Automatic Mixed Precision)
23
+ - Visualisation de l'architecture via visualtorch
24
+ - Suivi et affichage de la perte d'entraînement
25
+ - Accès aux poids, biais et nombre de paramètres
26
+
27
+ ---
28
+
29
+ ##### Parameters
30
+
31
+ | Parameter | Type | Optional | Description |
32
+ |----------------------|---------------|----------|-----------------------------------------------------------------------------------------------|
33
+ | `input_size` | int | Yes | Taille des données en entrée au réseau. Default: `1` |
34
+ | `output_size` | int | Yes | Taille des données en sortie au réseau. Default: `1` |
35
+ | `hidden_layers` | list[int] | Yes | Dimensions successives des couches intermédiaires du réseau. Default: `[1]` |
36
+ | `sigmas` | list[float] | Yes | Liste de sigma pour encodages RFF. Si None : passthrough. Default: `None` |
37
+ | `fourier_input_size` | int | Yes | WIP. Default: `2` |
38
+ | `nb_fourier` | int | Yes | Nombre de fréquences utilisées pour les Fourier Features. Default: `8` |
39
+ | `norm` | str | Yes | Type de normalisation / activation pour les couches cachées (ex: `"Relu"`). Default: `"Relu"` |
40
+ | `name` | str | Yes | Nom du réseau pour identification ou affichage. Default: `"Net"` |
41
+
42
+ ---
43
+
44
+ ##### Attributes
45
+
46
+ - `losses : list[float]` — Historique des pertes cumulées lors de l'entraînement
47
+ - `learnings : list[float]` — Historique des taux d'apprentissage utilisées lors de l'entraînement
48
+ - `model : nn.Sequential` — MLP complet construit dynamiquement
49
+ - `name : str` — Nom du réseau
50
+
51
+ ---
52
+
53
+ #### `Trainer`
54
+
55
+ ---
56
+
57
+ ##### Parameters
58
+
59
+ | Parameter | Type | Optional | Description |
60
+ |--------------|-----------------|----------|-----------------------------------------------------------------------------------------------------------------|
61
+ | `*nets` | *MLP | No | Réseaux pour lesquels le trainer va entrainer. |
62
+ | `inputs` | np.array(float) | No | Données en entrée au réseau. |
63
+ | `outputs` | np.array(float) | No | Données en sortie au réseau. |
64
+ | `test_size` | float | Yes | Proportion des données à utiliser pendant l'entrainement. Si None : utilise toutes les données. Default: `None` |
65
+ | `optim` | str | Yes | Nom de l’optimiseur à utiliser (doit exister dans `optims()`). Default: `"Adam"` |
66
+ | `init_lr` | float | Yes | Taux d’apprentissage initial pour l’optimiseur. Default: `1e-3` |
67
+ | `crit` | str | Yes | Fonction de perte à utiliser (doit exister dans `crits()`). Default: `"MSE"` |
68
+ | `batch_size` | float | Yes | Taille des minibatchs. Default: `1024` |
69
+
70
+ ---
71
+
72
+ ##### `Trainer.train`
73
+
74
+ Lancement d'un entrainement avec le trainer définit
75
+
76
+ | Parameter | Type | Optional | Description |
77
+ |-----------------|---------|----------|-----------------------------------------|
78
+ | `num_epochs` | int | Yes | Nombres d'itérations à effectuer. |
79
+ | `activate_tqdm` | boolean | Yes | Utilisation d'une barre de progression. |
80
+
81
+ ---
82
+
83
+ ### Dictionnaires
84
+
85
+ #### `norms()`
86
+
87
+ | **Valeurs** | **Module PyTorch** | **Description** |
88
+ |---------------------|--------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------|
89
+ | **"ReLU"** | [`nn.ReLU()`](https://docs.pytorch.org/docs/stable/generated/torch.nn.ReLU.html) | Fonction d'activation ReLU classique (Rectified Linear Unit). |
90
+ | **"LeakyReLU"** | [`nn.LeakyReLU()`](https://docs.pytorch.org/docs/stable/generated/torch.nn.LeakyReLU.html) | ReLU avec un petit coefficient pour les valeurs négatives (paramètre `negative_slope`). |
91
+ | **"ELU"** | [`nn.ELU()`](https://docs.pytorch.org/docs/stable/generated/torch.nn.ELU.html) | Fonction d'activation ELU (Exponential Linear Unit), qui a une meilleure gestion des valeurs négatives. |
92
+ | **"SELU"** | [`nn.SELU()`](https://docs.pytorch.org/docs/stable/generated/torch.nn.SELU.html) | SELU (Scaled Exponential Linear Unit), une version améliorée de l'ELU pour des réseaux auto-normalisants. |
93
+ | **"GELU"** | [`nn.GELU()`](https://docs.pytorch.org/docs/stable/generated/torch.nn.GELU.html) | GELU (Gaussian Error Linear Unit), une activation probabiliste basée sur une fonction gaussienne. |
94
+ | **"Mish"** | [`nn.Mish()`](https://docs.pytorch.org/docs/stable/generated/torch.nn.Mish.html) | ReLU différentiable en tout points avec passage négatif. |
95
+ | **"Softplus"** | [`nn.Softplus()`](https://docs.pytorch.org/docs/stable/generated/torch.nn.Softplus.html) | Fonction d'activation qui approxime ReLU mais de manière lissée. |
96
+ | **"Sigmoid"** | [`nn.Sigmoid()`](https://docs.pytorch.org/docs/stable/generated/torch.nn.Sigmoid.html) | Fonction d'activation Sigmoid, qui produit une sortie entre 0 et 1. |
97
+ | **"Tanh"** | [`nn.Tanh()`](https://docs.pytorch.org/docs/stable/generated/torch.nn.Tanh.html) | Fonction d'activation Tanh, avec une sortie dans l'intervalle [-1, 1]. |
98
+ | **"Hardtanh"** | [`nn.Hardtanh()`](https://docs.pytorch.org/docs/stable/generated/torch.nn.Hardtanh.html) | Variante de Tanh, avec des sorties limitées entre une plage spécifiée. |
99
+ | **"Softsign"** | [`nn.Softsign()`](https://docs.pytorch.org/docs/stable/generated/torch.nn.Softsign.html) | Fonction d'activation similaire à Tanh mais plus souple, avec des valeurs dans [-1, 1]. |
100
+
101
+ ---
102
+
103
+ #### `crits()`
104
+
105
+ | **Valeurs** | **Module PyTorch** | **Description** |
106
+ |--------------------------------|-------------------------------------|----------------------------------------------------------------------------------------------------------------------------|
107
+ | **"MSE"** | [`nn.MSELoss`](https://pytorch.org/docs/stable/generated/torch.nn.MSELoss.html) | Mean Squared Error Loss, utilisée pour les régressions. |
108
+ | **"L1"** | `nn.L1Loss()` | L1 Loss (erreur absolue), souvent utilisée pour la régularisation. |
109
+ | **"SmoothL1"** | `nn.SmoothL1Loss()` | Smooth L1 Loss, une combinaison de L1 et de MSE, moins sensible aux outliers. |
110
+ | **"Huber"** | `nn.HuberLoss()` | Fonction de perte Huber, une version lissée de L1 et MSE, moins affectée par les grands écarts. |
111
+ | **"CrossEntropy"** | `nn.CrossEntropyLoss()` | Perte de Cross-Entropy, utilisée pour les problèmes de classification multi-classes. |
112
+ | **"KLDiv"** | `nn.KLDivLoss()` | Perte de divergence de Kullback-Leibler, souvent utilisée pour des modèles probabilistes. |
113
+ | **"PoissonNLL"** | `nn.PoissonNLLLoss()` | Perte de log-vraisemblance pour une distribution de Poisson, utilisée pour la modélisation de comptages. |
114
+ | **"MultiLabelSoftMargin"** | `nn.MultiLabelSoftMarginLoss()` | Perte utilisée pour les problèmes de classification multi-étiquettes. |
115
+
116
+ ---
117
+
118
+ #### `optims()`
119
+
120
+ | **Valeurs** | **Module PyTorch** | **Description** |
121
+ |---------------------|--------------------------------------|------------------------------------------------------------------------------------------------------------------------------------|
122
+ | **"Adadelta"** | `optim.Adadelta()` | Optimiseur Adadelta, basé sur les gradients adaptatifs, sans nécessité de réglage du taux d'apprentissage. |
123
+ | **"Adafactor"** | `optim.Adafactor()` | Optimiseur Adafactor, variant d'Adam avec une mise à jour plus efficace de la mémoire pour de grands modèles. |
124
+ | **"Adam"** | `optim.Adam()` | Optimiseur Adam, utilisant un gradient stochastique adaptatif avec des moyennes mobiles des gradients et des carrés des gradients. |
125
+ | **"AdamW"** | `optim.AdamW()` | Optimiseur Adam avec une régularisation L2 (weight decay) distincte, plus efficace que `Adam` avec `weight_decay`. |
126
+ | **"Adamax"** | `optim.Adamax()` | Version d'Adam utilisant une norme infinie pour les gradients, plus stable pour certaines configurations. |
127
+ | **"ASGD"** | `optim.ASGD()` | Optimiseur ASGD (Averaged Stochastic Gradient Descent), utilisé pour de grandes données avec une moyenne des gradients. |
128
+ | **"NAdam"** | `optim.NAdam()` | Optimiseur NAdam, une version améliorée d'Adam avec une adaptation des moments de second ordre. |
129
+ | **"RAdam"** | `optim.RAdam()` | Optimiseur RAdam, une version robuste de l'Adam qui ajuste dynamiquement les moments pour stabiliser l'entraînement. |
130
+ | **"RMSprop"** | `optim.RMSprop()` | Optimiseur RMSprop, utilisant une moyenne mobile des carrés des gradients pour réduire les oscillations. |
131
+ | **"Rprop"** | `optim.Rprop()` | Optimiseur Rprop, basé sur les mises à jour des poids indépendantes des gradients. |
132
+ | **"SGD"** | `optim.SGD()` | Descente de gradient stochastique classique, souvent utilisée avec un taux d'apprentissage constant ou ajusté. |
133
+
134
+ ---
135
+
136
+ ### `device`
137
+
138
+ variable principale d'allocation des performances
139
+
140
+ #### **Apple Silicon (macOS)**
141
+ - Si le système d'exploitation est macOS (nommé `darwin` dans `platform.system()`), la fonction vérifie si l'accélérateur **Metal Performance Shaders** (MPS) est disponible sur l'appareil.
142
+ - Si MPS est disponible (`torch.backends.mps.is_available()`), l'appareil cible sera défini sur **MPS** (c'est un équivalent de CUDA pour les appareils Apple Silicon).
143
+
144
+ #### **Windows**
145
+ - Si le système d'exploitation est Windows, la fonction vérifie d'abord si **CUDA** (NVIDIA) est disponible avec `torch.cuda.is_available()`. Si c'est le cas, le périphérique sera défini sur **CUDA**.
146
+
147
+ #### **Linux**
148
+ - Si le système d'exploitation est Linux, plusieurs vérifications sont effectuées :
149
+ 1. **CUDA** (NVIDIA) : Si `torch.cuda.is_available()` renvoie `True`, le périphérique sera défini sur **CUDA**.
150
+ 2. **ROCm** (AMD) : Si le système supporte **ROCm** via `torch.backends.hip.is_available()`, l'appareil sera défini sur **CUDA** (ROCm est utilisé pour les cartes AMD dans le cadre de l'API CUDA).
151
+ 3. **Intel oneAPI / XPU** : Si le système prend en charge **Intel oneAPI** ou **XPU** via `torch.xpu.is_available()`, le périphérique sera défini sur **XPU**.
152
+
153
+ #### **Système non reconnu**
154
+ - Si aucune des conditions ci-dessus n'est remplie, la fonction retourne **CPU** comme périphérique par défaut.
155
+
156
+ ---
157
+
158
+ ### Paramètres matplotlib et PyTorch
159
+
160
+ - Style global pour fond transparent et texte gris
161
+ - Optimisations CUDA activées pour TF32, matmul et convolutions
162
+ - Autograd configuré pour privilégier les performances
163
+
164
+ ---
@@ -0,0 +1,75 @@
1
+ # NeuralNetworks - Multi-Layer Perceptrons avec encodage Fourier
2
+ # Copyright (C) 2026 Alexandre Brun
3
+ # This program is free software: you can redistribute it and/or modify
4
+ # it under the terms of the GNU General Public License as published by
5
+ # the Free Software Foundation, either version 3 of the License, or
6
+ # (at your option) any later version.
7
+
8
+ from .matplot import *
9
+ from .pytorch import *
10
+
11
+ import numpy as np
12
+ from PIL import Image
13
+
14
+ import copy
15
+ import subprocess
16
+ import requests
17
+ from io import BytesIO
18
+ from tqdm import tqdm
19
+ import plotly.graph_objects as go
20
+ from IPython.display import display, clear_output
21
+
22
+ from scipy.interpolate import griddata
23
+ from sklearn.model_selection import train_test_split
24
+
25
+ import math
26
+ pi = math.pi
27
+ e = math.e
28
+
29
+ norms = lambda: print("""
30
+ "Relu"
31
+ "LeakyRelu"
32
+ "ELU"
33
+ "SELU"
34
+ "GELU"
35
+ "Mish"
36
+ "Sigmoid"
37
+ "Tanh"
38
+ "Hardtanh"
39
+ "Softplus"
40
+ "Softsign"
41
+ """
42
+ )
43
+
44
+ crits = lambda: print("""
45
+ "MSE"
46
+ "L1"
47
+ "SmoothL1"
48
+ "Huber"
49
+ "CrossEntropy"
50
+ "KLDiv"
51
+ "PoissonNLL"
52
+ "MultiLabelSoftMargin"
53
+ """
54
+ )
55
+
56
+ optims = lambda: print("""
57
+ "Adadelta"
58
+ "Adafactor"
59
+ "Adam"
60
+ "AdamW"
61
+ "Adamax"
62
+ "ASGD"
63
+ "NAdam"
64
+ "RAdam"
65
+ "RMSprop"
66
+ "Rprop"
67
+ "SGD"
68
+ """
69
+ )
70
+
71
+ def rglen(list):
72
+ return range(len(list))
73
+
74
+ def fPrintDoc(obj):
75
+ return lambda: print(obj.__doc__)
@@ -0,0 +1,25 @@
1
+ # NeuralNetworks - Multi-Layer Perceptrons avec encodage Fourier
2
+ # Copyright (C) 2026 Alexandre Brun
3
+ # This program is free software: you can redistribute it and/or modify
4
+ # it under the terms of the GNU General Public License as published by
5
+ # the Free Software Foundation, either version 3 of the License, or
6
+ # (at your option) any later version.
7
+
8
+ import matplotlib.pyplot as plt
9
+ from matplotlib.gridspec import GridSpec
10
+
11
+ plt.rcParams['figure.facecolor'] = (0,0,0,0)
12
+ plt.rcParams['axes.facecolor'] = (0,0,0,0)
13
+ grey_color = "#888888"
14
+
15
+ # Style général du texte et axes
16
+ plt.rcParams['text.color'] = grey_color
17
+ plt.rcParams['axes.labelcolor'] = grey_color
18
+ plt.rcParams['xtick.color'] = grey_color
19
+ plt.rcParams['ytick.color'] = grey_color
20
+ plt.rcParams['axes.edgecolor'] = grey_color
21
+ plt.rcParams['axes.titlecolor'] = grey_color
22
+
23
+ # Activation de la grille globale
24
+ plt.rcParams['axes.grid'] = True
25
+ plt.rcParams['grid.color'] = grey_color
@@ -0,0 +1,111 @@
1
+ # NeuralNetworks - Multi-Layer Perceptrons avec encodage Fourier
2
+ # Copyright (C) 2026 Alexandre Brun
3
+ # This program is free software: you can redistribute it and/or modify
4
+ # it under the terms of the GNU General Public License as published by
5
+ # the Free Software Foundation, either version 3 of the License, or
6
+ # (at your option) any later version.
7
+
8
+ import os
9
+ os.environ["PYTORCH_CUDA_ALLOC_CONF"] = "expandable_segments:True"
10
+
11
+ import platform
12
+
13
+ import torch
14
+ import torch.optim as optim
15
+ import torch.nn as nn
16
+ import torch.quantization as tq
17
+ from torch.amp import autocast, GradScaler
18
+ from torch.utils.data import TensorDataset, DataLoader
19
+
20
+ from torchmetrics.image import PeakSignalNoiseRatio as PSNR
21
+ from torchvision.transforms import ToTensor, Resize, Compose
22
+
23
+ torch.cuda.empty_cache()
24
+ def get_best_device():
25
+
26
+ os_name = platform.system().lower()
27
+
28
+ # =========== APPLE SILICON (macOS) ===========
29
+ if os_name == "darwin":
30
+ if torch.backends.mps.is_available():
31
+ return torch.device("mps")
32
+
33
+ # =========== WINDOWS ===========
34
+ if os_name == "windows":
35
+ # 1) CUDA
36
+ if torch.cuda.is_available():
37
+ return torch.device("cuda")
38
+
39
+ # =========== LINUX ===========
40
+ if os_name == "linux":
41
+ # 1) CUDA (Nvidia)
42
+ if torch.cuda.is_available():
43
+ return torch.device("cuda")
44
+ # 2) ROCm (AMD)
45
+ elif hasattr(torch.backends, "hip") and torch.backends.hip.is_available():
46
+ return torch.device("cuda")
47
+
48
+ # 3) Intel oneAPI / XPU
49
+ elif hasattr(torch, "xpu") and torch.xpu.is_available():
50
+ return torch.device("xpu")
51
+
52
+ # =========== Unknown OS ===========
53
+ return torch.device("cpu")
54
+ device = get_best_device()
55
+
56
+ # --- Optimisations CUDA ---
57
+ # Accélération des convolutions et matmul
58
+ torch.backends.cudnn.benchmark = True
59
+ torch.backends.cudnn.enabled = True
60
+ torch.backends.cuda.matmul.allow_tf32 = True
61
+ torch.backends.cudnn.allow_tf32 = True
62
+
63
+ # Paramètres autograd
64
+ torch.autograd.set_detect_anomaly(False)
65
+ torch.autograd.profiler.profile(enabled=False)
66
+ torch.use_deterministic_algorithms(False)
67
+
68
+ torch._inductor.config.max_autotune = "max"
69
+
70
+ norm_list = {
71
+ "Relu": nn.ReLU(),
72
+ "LeakyRelu": nn.LeakyReLU(),
73
+ "ELU": nn.ELU(),
74
+ "SELU": nn.SELU(),
75
+ "GELU": nn.GELU(),
76
+ "Mish": nn.Mish(),
77
+ "Sigmoid": nn.Sigmoid(),
78
+ "Tanh": nn.Tanh(),
79
+ "Hardtanh": nn.Hardtanh(),
80
+ "Softplus": nn.Softplus(),
81
+ "Softsign": nn.Softsign()
82
+ }
83
+
84
+ crit_list = {
85
+ "MSE": nn.MSELoss(),
86
+ "L1": nn.L1Loss(),
87
+ "SmoothL1": nn.SmoothL1Loss(),
88
+ "Huber": nn.HuberLoss(),
89
+ "CrossEntropy": nn.CrossEntropyLoss(),
90
+ "KLDiv": nn.KLDivLoss(),
91
+ "PoissonNLL": nn.PoissonNLLLoss(),
92
+ "MultiLabelSoftMargin": nn.MultiLabelSoftMarginLoss()
93
+ }
94
+
95
+ def optim_list(params):
96
+ return {
97
+ "Adadelta": optim.Adadelta(params),
98
+ "Adafactor": optim.Adafactor(params),
99
+ "Adam": optim.Adam(params),
100
+ "AdamW": optim.AdamW(params),
101
+ "Adamax": optim.Adamax(params),
102
+ "ASGD": optim.ASGD(params),
103
+ "NAdam": optim.NAdam(params),
104
+ "RAdam": optim.RAdam(params),
105
+ "RMSprop": optim.RMSprop(params),
106
+ "Rprop": optim.Rprop(params),
107
+ "SGD": optim.SGD(params)
108
+ }
109
+
110
+ def tensorise(obj):
111
+ return torch.as_tensor(obj, dtype=torch.float32, device='cpu')