NeuralNetworks 0.1.11__py3-none-any.whl → 0.2.0__py3-none-any.whl
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.
- NeuralNetworks/Dependances.py +2 -14
- NeuralNetworks/Latent.py +51 -0
- NeuralNetworks/MLP.py +171 -161
- NeuralNetworks/__init__.py +7 -8
- NeuralNetworks/tools/AirfRANS.py +36 -0
- NeuralNetworks/tools/MNIST.py +118 -0
- NeuralNetworks/tools/VKI-LS59.py +7 -0
- NeuralNetworks/tools/image.py +249 -0
- neuralnetworks-0.2.0.dist-info/METADATA +190 -0
- neuralnetworks-0.2.0.dist-info/RECORD +13 -0
- NeuralNetworks/Image.py +0 -105
- NeuralNetworks/Plot.py +0 -324
- neuralnetworks-0.1.11.dist-info/METADATA +0 -146
- neuralnetworks-0.1.11.dist-info/RECORD +0 -10
- {neuralnetworks-0.1.11.dist-info → neuralnetworks-0.2.0.dist-info}/WHEEL +0 -0
- {neuralnetworks-0.1.11.dist-info → neuralnetworks-0.2.0.dist-info}/licenses/LICENSE +0 -0
- {neuralnetworks-0.1.11.dist-info → neuralnetworks-0.2.0.dist-info}/top_level.txt +0 -0
NeuralNetworks/Plot.py
DELETED
|
@@ -1,324 +0,0 @@
|
|
|
1
|
-
# NeuralNetworksBeta - Multi-Layer Perceptrons avec encodage Fourier
|
|
2
|
-
# Copyright (C) 2025 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 .Dependances import *
|
|
9
|
-
|
|
10
|
-
def compare(img_array, inputs, *nets):
|
|
11
|
-
"""
|
|
12
|
-
Affiche, pour chaque réseau, l’erreur absolue entre l’image originale
|
|
13
|
-
et l’image reconstruite par le réseau.
|
|
14
|
-
|
|
15
|
-
Chaque réseau doit posséder :
|
|
16
|
-
- une méthode `encoding(x)` (si RFF activé),
|
|
17
|
-
- un module `model` retournant un tenseur de shape (N, 3),
|
|
18
|
-
- une reconstruction compatible avec (H, W, 3).
|
|
19
|
-
|
|
20
|
-
Parameters
|
|
21
|
-
----------
|
|
22
|
-
img_array : np.ndarray of shape (H, W, 3)
|
|
23
|
-
Image originale servant de référence.
|
|
24
|
-
inputs : tensor-like of shape (H*W, 2)
|
|
25
|
-
Coordonnées normalisées des pixels correspondant à chaque point de l'image.
|
|
26
|
-
nets : MLP
|
|
27
|
-
Un ou plusieurs réseaux possédant les méthodes `.encoding()` et `.model()`,
|
|
28
|
-
et l’attribut `.losses`.
|
|
29
|
-
|
|
30
|
-
Notes
|
|
31
|
-
-----
|
|
32
|
-
- L’affichage montre la différence absolue entre l’image originale et la prédiction du réseau.
|
|
33
|
-
- Les pertes cumulées sont également tracées pour chaque réseau.
|
|
34
|
-
- Utilise matplotlib en mode interactif.
|
|
35
|
-
"""
|
|
36
|
-
|
|
37
|
-
# --- Conversion des inputs en tensor et récupération du nombre d'échantillons ---
|
|
38
|
-
inputs, n_samples = tensorise(inputs), inputs.size(0)
|
|
39
|
-
h, w = img_array.shape[:2]
|
|
40
|
-
|
|
41
|
-
# --- Configuration de la grille de figure ---
|
|
42
|
-
grid_length = 2 if len(nets) == 1 else len(nets)
|
|
43
|
-
fig = plt.figure(figsize=(5*grid_length, 10))
|
|
44
|
-
gs = GridSpec(2, grid_length, figure=fig)
|
|
45
|
-
|
|
46
|
-
# --- Affichage de l'image originale ---
|
|
47
|
-
ax_orig = fig.add_subplot(gs[0, 0])
|
|
48
|
-
ax_orig.axis('off')
|
|
49
|
-
ax_orig.set_title("Original Image")
|
|
50
|
-
ax_orig.imshow(img_array)
|
|
51
|
-
|
|
52
|
-
# --- Préparation du subplot pour les courbes de pertes ---
|
|
53
|
-
ax_loss = fig.add_subplot(gs[0, 1])
|
|
54
|
-
all_losses = [[loss.item() for loss in net.losses] for net in nets]
|
|
55
|
-
if max(len(lst) for lst in all_losses) == 1:
|
|
56
|
-
lenlosses = 2
|
|
57
|
-
else:
|
|
58
|
-
lenlosses = max(len(lst) for lst in all_losses)
|
|
59
|
-
ax_loss.set_xlim(1, lenlosses)
|
|
60
|
-
ax_loss.set_ylim(0, max(max(lst) for lst in all_losses))
|
|
61
|
-
|
|
62
|
-
# --- Boucle sur chaque réseau pour afficher l'erreur et les pertes ---
|
|
63
|
-
for k, net in enumerate(nets):
|
|
64
|
-
# Subplot pour l'erreur absolue
|
|
65
|
-
ax = fig.add_subplot(gs[1, k])
|
|
66
|
-
ax.axis('off')
|
|
67
|
-
ax.set_title(net.name)
|
|
68
|
-
|
|
69
|
-
# Prédiction et reconstruction de l'image
|
|
70
|
-
pred = net.model(net.encoding(inputs))
|
|
71
|
-
pred_img = pred.reshape(h, w, 3).cpu().detach().numpy()
|
|
72
|
-
|
|
73
|
-
# Tracé des pertes cumulées
|
|
74
|
-
ax_loss.plot(np.arange(1, len(all_losses[k])+1), all_losses[k])
|
|
75
|
-
|
|
76
|
-
# Affichage de l'erreur absolue
|
|
77
|
-
ax.imshow(np.abs(img_array - pred_img))
|
|
78
|
-
|
|
79
|
-
# --- Affichage final ---
|
|
80
|
-
fig.canvas.draw_idle()
|
|
81
|
-
plt.tight_layout()
|
|
82
|
-
plt.ion()
|
|
83
|
-
plt.show()
|
|
84
|
-
compare.help = fPrintDoc(compare)
|
|
85
|
-
|
|
86
|
-
def plot(img_array, inputs, *nets):
|
|
87
|
-
"""
|
|
88
|
-
Affiche, pour chaque réseau, l’image reconstruite à partir de ses prédictions.
|
|
89
|
-
|
|
90
|
-
Parameters
|
|
91
|
-
----------
|
|
92
|
-
img_array : np.ndarray of shape (H, W, 3)
|
|
93
|
-
Image originale, utilisée pour connaître les dimensions de reconstruction.
|
|
94
|
-
inputs : tensor-like of shape (H*W, 2)
|
|
95
|
-
Coordonnées normalisées des pixels correspondant à chaque point de l'image.
|
|
96
|
-
nets : MLP
|
|
97
|
-
Un ou plusieurs réseaux possédant les méthodes `.encoding()` et `.model()`,
|
|
98
|
-
et l’attribut `.losses`.
|
|
99
|
-
|
|
100
|
-
Notes
|
|
101
|
-
-----
|
|
102
|
-
- Cette fonction affiche la prédiction brute.
|
|
103
|
-
- Les pertes cumulées sont également tracées pour chaque réseau.
|
|
104
|
-
- Utilise matplotlib en mode interactif.
|
|
105
|
-
"""
|
|
106
|
-
|
|
107
|
-
# --- Conversion des inputs en tensor et récupération du nombre d'échantillons ---
|
|
108
|
-
inputs, n_samples = tensorise(inputs), inputs.size(0)
|
|
109
|
-
h, w = img_array.shape[:2]
|
|
110
|
-
|
|
111
|
-
# --- Configuration de la grille de figure ---
|
|
112
|
-
grid_length = 2 if len(nets) == 1 else len(nets)
|
|
113
|
-
fig = plt.figure(figsize=(5*grid_length, 10))
|
|
114
|
-
gs = GridSpec(2, grid_length, figure=fig)
|
|
115
|
-
|
|
116
|
-
# --- Affichage de l'image originale ---
|
|
117
|
-
ax_orig = fig.add_subplot(gs[0, 0])
|
|
118
|
-
ax_orig.axis('off')
|
|
119
|
-
ax_orig.set_title("Original Image")
|
|
120
|
-
ax_orig.imshow(img_array)
|
|
121
|
-
|
|
122
|
-
# --- Préparation du subplot pour les courbes de pertes ---
|
|
123
|
-
ax_loss = fig.add_subplot(gs[0, 1])
|
|
124
|
-
all_losses = [[loss.item() for loss in net.losses] for net in nets]
|
|
125
|
-
if max(len(lst) for lst in all_losses) == 1:
|
|
126
|
-
lenlosses = 2
|
|
127
|
-
else:
|
|
128
|
-
lenlosses = max(len(lst) for lst in all_losses)
|
|
129
|
-
ax_loss.set_xlim(1, lenlosses)
|
|
130
|
-
ax_loss.set_ylim(0, max(max(lst) for lst in all_losses))
|
|
131
|
-
|
|
132
|
-
# --- Boucle sur chaque réseau pour afficher les prédictions et pertes ---
|
|
133
|
-
for k, net in enumerate(nets):
|
|
134
|
-
# Subplot pour l'image reconstruite
|
|
135
|
-
ax = fig.add_subplot(gs[1, k])
|
|
136
|
-
ax.axis('off')
|
|
137
|
-
ax.set_title(net.name)
|
|
138
|
-
|
|
139
|
-
# Prédiction et reconstruction de l'image
|
|
140
|
-
pred = net.model(net.encoding(inputs))
|
|
141
|
-
pred_img = pred.reshape(h, w, 3).cpu().detach().numpy()
|
|
142
|
-
|
|
143
|
-
# Tracé des pertes cumulées
|
|
144
|
-
ax_loss.plot(np.arange(1, len(all_losses[k])+1), all_losses[k],label = net.name)
|
|
145
|
-
ax_loss.legend()
|
|
146
|
-
|
|
147
|
-
# Affichage de l'image prédite
|
|
148
|
-
ax.imshow(pred_img)
|
|
149
|
-
|
|
150
|
-
# --- Affichage final ---
|
|
151
|
-
fig.canvas.draw_idle()
|
|
152
|
-
plt.tight_layout()
|
|
153
|
-
plt.ion()
|
|
154
|
-
plt.show()
|
|
155
|
-
plot.help = fPrintDoc(plot)
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
def losses(*nets):
|
|
159
|
-
"""
|
|
160
|
-
Affiche les courbes de pertes (training loss) de plusieurs réseaux MLP.
|
|
161
|
-
|
|
162
|
-
Parameters
|
|
163
|
-
----------
|
|
164
|
-
nets : MLP
|
|
165
|
-
Un ou plusieurs réseaux possédant un attribut `.losses`
|
|
166
|
-
contenant l'historique des pertes (liste de float).
|
|
167
|
-
|
|
168
|
-
Notes
|
|
169
|
-
-----
|
|
170
|
-
- L’axe X correspond aux itérations (epochs ou steps).
|
|
171
|
-
- L’axe Y correspond à la valeur de la perte.
|
|
172
|
-
- La fonction utilise matplotlib en mode interactif pour affichage dynamique.
|
|
173
|
-
"""
|
|
174
|
-
|
|
175
|
-
# --- Initialisation de la figure ---
|
|
176
|
-
fig = plt.figure(figsize=(5, 5))
|
|
177
|
-
|
|
178
|
-
# --- Définition des limites des axes ---
|
|
179
|
-
all_losses = [[loss.item() for loss in net.losses] for net in nets]
|
|
180
|
-
if max(len(lst) for lst in all_losses) == 1:
|
|
181
|
-
lenlosses = 2
|
|
182
|
-
else:
|
|
183
|
-
lenlosses = max(len(lst) for lst in all_losses)
|
|
184
|
-
plt.xlim(1, lenlosses)
|
|
185
|
-
plt.ylim(0, max(max(lst) for lst in all_losses))
|
|
186
|
-
|
|
187
|
-
# --- Tracé des courbes de pertes pour chaque réseau ---
|
|
188
|
-
for k, net in enumerate(nets):
|
|
189
|
-
steps = np.linspace(1, len(net.losses), len(net.losses)) # epochs
|
|
190
|
-
plt.plot(np.arange(1, len(all_losses[k])+1), all_losses[k],label = net.name)
|
|
191
|
-
|
|
192
|
-
# --- Affichage ---
|
|
193
|
-
plt.legend()
|
|
194
|
-
fig.canvas.draw_idle()
|
|
195
|
-
plt.tight_layout()
|
|
196
|
-
plt.ion() # mode interactif
|
|
197
|
-
plt.show()
|
|
198
|
-
losses.help = fPrintDoc(losses)
|
|
199
|
-
|
|
200
|
-
def train(inputs, outputs, num_epochs=1500, batch_size=1024, *nets, img_array=None):
|
|
201
|
-
"""
|
|
202
|
-
Entraîne un ou plusieurs MLP sur des paires (inputs, outputs) avec gestion optionnelle de l'affichage interactif.
|
|
203
|
-
|
|
204
|
-
Affiche dynamiquement si img_array est fourni :
|
|
205
|
-
- L'image originale (référence)
|
|
206
|
-
- Les prédictions des MLP
|
|
207
|
-
- L'évolution des pertes au fil des époques
|
|
208
|
-
|
|
209
|
-
Parameters
|
|
210
|
-
----------
|
|
211
|
-
inputs : array-like
|
|
212
|
-
Entrées du ou des MLP (shape: [n_samples, n_features]).
|
|
213
|
-
outputs : array-like
|
|
214
|
-
Sorties cibles correspondantes (shape: [n_samples, output_dim]).
|
|
215
|
-
num_epochs : int, optional
|
|
216
|
-
Nombre d’époques pour l’entraînement (default=1500).
|
|
217
|
-
batch_size : int, optional
|
|
218
|
-
Taille des mini-batchs pour la descente de gradient (default=1024).
|
|
219
|
-
*nets : MLP
|
|
220
|
-
Un ou plusieurs objets MLP à entraîner.
|
|
221
|
-
img_array : np.ndarray of shape (H, W, 3), optional
|
|
222
|
-
Image de référence pour visualisation des prédictions (default=None).
|
|
223
|
-
|
|
224
|
-
Notes
|
|
225
|
-
-----
|
|
226
|
-
- Les MLP sont entraînés indépendamment mais avec le même ordre aléatoire d'échantillons.
|
|
227
|
-
- Utilise torch.amp.GradScaler pour l'entraînement en FP16.
|
|
228
|
-
- La visualisation interactive utilise clear_output() et plt.ion().
|
|
229
|
-
"""
|
|
230
|
-
|
|
231
|
-
# --- Conversion des données en tensors et récupération du nombre d'échantillons ---
|
|
232
|
-
inputs, outputs, n_samples = tensorise(inputs).to(device), tensorise(outputs).to(device), inputs.size(0)
|
|
233
|
-
for net in nets:
|
|
234
|
-
net.model = net.model.to(device)
|
|
235
|
-
dev = str(device)
|
|
236
|
-
scaler = GradScaler(dev)
|
|
237
|
-
visual = False
|
|
238
|
-
|
|
239
|
-
# --- Initialisation de l'affichage interactif si une image de référence est fournie ---
|
|
240
|
-
if img_array is not None:
|
|
241
|
-
visual = True
|
|
242
|
-
h, w = img_array.shape[:2]
|
|
243
|
-
grid_length = 2 if len(nets) == 1 else len(nets)
|
|
244
|
-
fig = plt.figure(figsize=(5*grid_length, 10))
|
|
245
|
-
gs = GridSpec(2, grid_length, figure=fig)
|
|
246
|
-
|
|
247
|
-
# Image originale
|
|
248
|
-
ax_orig = fig.add_subplot(gs[0, 0])
|
|
249
|
-
ax_orig.axis('off')
|
|
250
|
-
ax_orig.set_title("Original Image")
|
|
251
|
-
im_orig = ax_orig.imshow(img_array)
|
|
252
|
-
|
|
253
|
-
# Images des prédictions initiales des MLP
|
|
254
|
-
ims_preds, axs_preds = [], []
|
|
255
|
-
for k, net in enumerate(nets):
|
|
256
|
-
ax = fig.add_subplot(gs[1, k])
|
|
257
|
-
ax.axis('off')
|
|
258
|
-
ax.set_title(f"Net {k+1}")
|
|
259
|
-
im = ax.imshow(net.model(net.encoding(inputs)).reshape(h, w, 3).cpu().detach().numpy())
|
|
260
|
-
ims_preds.append(im)
|
|
261
|
-
axs_preds.append(ax)
|
|
262
|
-
|
|
263
|
-
# Graphiques des pertes
|
|
264
|
-
ax_loss = fig.add_subplot(gs[0, 1])
|
|
265
|
-
lines = []
|
|
266
|
-
for k in range(len(nets)):
|
|
267
|
-
line, = ax_loss.plot([], [], label=f"Network {k+1}")
|
|
268
|
-
lines.append(line)
|
|
269
|
-
ax_loss.set_xlim(1)
|
|
270
|
-
ax_loss.set_ylim(0, 1)
|
|
271
|
-
ax_loss.set_xlabel("Epoch")
|
|
272
|
-
ax_loss.set_ylabel("Loss")
|
|
273
|
-
ax_loss.set_title("Loss per Epoch")
|
|
274
|
-
ax_loss.legend()
|
|
275
|
-
ax_loss.set_box_aspect(1)
|
|
276
|
-
|
|
277
|
-
fig.canvas.draw_idle()
|
|
278
|
-
plt.tight_layout()
|
|
279
|
-
plt.ion()
|
|
280
|
-
plt.show()
|
|
281
|
-
|
|
282
|
-
# --- Boucle principale d’entraînement ---
|
|
283
|
-
for epoch in tqdm(range(num_epochs), desc="train iter"):
|
|
284
|
-
perm = torch.randperm(n_samples, device=device) # permutation aléatoire des indices
|
|
285
|
-
epoch_loss = [0.0 for _ in nets] # stockage des pertes par MLP pour l'époque
|
|
286
|
-
|
|
287
|
-
# --- Mini-batchs ---
|
|
288
|
-
for k, net in enumerate(nets):
|
|
289
|
-
for i in range(0, n_samples, batch_size):
|
|
290
|
-
idx = perm[i:i+batch_size]
|
|
291
|
-
|
|
292
|
-
def closure():
|
|
293
|
-
"""Calcul de la loss et backpropagation pour un mini-batch."""
|
|
294
|
-
net.optim.zero_grad(set_to_none=True)
|
|
295
|
-
with autocast(dev):
|
|
296
|
-
loss = net.crit(net.model(net.encoding(inputs[idx])), outputs[idx])
|
|
297
|
-
scaler.scale(loss).backward()
|
|
298
|
-
return loss
|
|
299
|
-
|
|
300
|
-
loss = closure()
|
|
301
|
-
scaler.step(net.optim)
|
|
302
|
-
scaler.update()
|
|
303
|
-
epoch_loss[k] += loss
|
|
304
|
-
|
|
305
|
-
# --- Stockage des pertes de l'époque ---
|
|
306
|
-
net.losses.append(epoch_loss[k])
|
|
307
|
-
|
|
308
|
-
# --- Mise à jour visuelle si mode interactif ---
|
|
309
|
-
if visual:
|
|
310
|
-
with torch.no_grad():
|
|
311
|
-
# Mise à jour des images prédictions
|
|
312
|
-
[im.set_data(nets[k](inputs).reshape(h, w, 3)) for k, im in enumerate(ims_preds)]
|
|
313
|
-
# Mise à jour des courbes de pertes
|
|
314
|
-
all_losses = [[loss.item() for loss in net.losses] for net in nets]
|
|
315
|
-
[line.set_data(np.arange(1, len(all_losses[k])+1), all_losses[k]) for k, line in enumerate(lines)]
|
|
316
|
-
ax_loss.set_xlim(1, max(len(lst) for lst in all_losses))
|
|
317
|
-
ax_loss.set_ylim(0, max(max(lst) for lst in all_losses))
|
|
318
|
-
clear_output(wait=True)
|
|
319
|
-
display(fig)
|
|
320
|
-
|
|
321
|
-
# --- Fin du mode interactif ---
|
|
322
|
-
if visual:
|
|
323
|
-
plt.ioff()
|
|
324
|
-
train.help = fPrintDoc(train)
|
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: NeuralNetworks
|
|
3
|
-
Version: 0.1.11
|
|
4
|
-
Summary: Multi-Layer Perceptrons with Fourier encoding, visualization and PyTorch compilation
|
|
5
|
-
Author-email: Alexandre Brun <alexandre51160@gmail.com>
|
|
6
|
-
License: GPL-3.0-or-later
|
|
7
|
-
Project-URL: Documentation, https://xxxfetraxxx.github.io/NeuralNetworks/
|
|
8
|
-
Project-URL: Source, https://github.com/xXxFetraxXx/NeuralNetworks
|
|
9
|
-
Classifier: Programming Language :: Python :: 3
|
|
10
|
-
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
|
|
11
|
-
Classifier: Operating System :: OS Independent
|
|
12
|
-
Requires-Python: >=3.9
|
|
13
|
-
Description-Content-Type: text/markdown
|
|
14
|
-
License-File: LICENSE
|
|
15
|
-
Requires-Dist: numpy>=1.25
|
|
16
|
-
Requires-Dist: matplotlib>=3.10
|
|
17
|
-
Requires-Dist: tqdm>=4.66
|
|
18
|
-
Requires-Dist: torch<3.0,>=2.9.1
|
|
19
|
-
Requires-Dist: torchvision<1.0,>=0.24
|
|
20
|
-
Requires-Dist: torchaudio<3.0,>=2.9
|
|
21
|
-
Requires-Dist: torchmetrics>=1.8
|
|
22
|
-
Requires-Dist: visualtorch>=0.2
|
|
23
|
-
Requires-Dist: random-fourier-features-pytorch>=1.0
|
|
24
|
-
Requires-Dist: IPython>=8.16
|
|
25
|
-
Requires-Dist: requests
|
|
26
|
-
Dynamic: license-file
|
|
27
|
-
|
|
28
|
-
# NeuralNetworks Module
|
|
29
|
-
|
|
30
|
-
Module complet pour la création, l'entraînement et la visualisation de Multi-Layer Perceptrons (MLP)
|
|
31
|
-
avec encodage optionnel Fourier, gestion automatique des pertes, compilation Torch et outils
|
|
32
|
-
de traitement d'images pour l'apprentissage sur des images RGB.
|
|
33
|
-
|
|
34
|
-
---
|
|
35
|
-
|
|
36
|
-
## Contenu principal
|
|
37
|
-
|
|
38
|
-
### Classes
|
|
39
|
-
|
|
40
|
-
#### MLP
|
|
41
|
-
|
|
42
|
-
Multi-Layer Perceptron (MLP) avec options avancées :
|
|
43
|
-
|
|
44
|
-
- Encodage Fourier gaussien (RFF) optionnel
|
|
45
|
-
- Stockage automatique des pertes
|
|
46
|
-
- Compilation Torch optionnelle pour accélérer l’inférence
|
|
47
|
-
- Gestion flexible de l’optimiseur, de la fonction de perte et de la normalisation
|
|
48
|
-
|
|
49
|
-
**Méthodes principales :**
|
|
50
|
-
|
|
51
|
-
- `__init__(layers, learning_rate, Fourier, optimizer, criterion, normalizer, name, Iscompiled)`
|
|
52
|
-
Initialise le réseau avec toutes les options.
|
|
53
|
-
|
|
54
|
-
- `train(inputs, outputs, num_epochs, batch_size)`
|
|
55
|
-
Entraîne le MLP sur des données (`inputs → outputs`) en utilisant AMP et mini-batchs.
|
|
56
|
-
|
|
57
|
-
- `plot(inputs, img_array)`
|
|
58
|
-
Affiche l'image originale, la prédiction du MLP et la courbe des pertes.
|
|
59
|
-
|
|
60
|
-
- `__call__(x)`
|
|
61
|
-
Applique l’encodage puis le MLP pour produire une prédiction.
|
|
62
|
-
|
|
63
|
-
- `Create_MLP(layers)`
|
|
64
|
-
Construit le MLP avec normalisation/activation et Sigmoid finale.
|
|
65
|
-
|
|
66
|
-
- `params()`
|
|
67
|
-
Retourne tous les poids du MLP (ligne par ligne) sous forme de liste de `numpy.ndarray`.
|
|
68
|
-
|
|
69
|
-
- `nb_params()`
|
|
70
|
-
Calcule le nombre total de poids dans le MLP.
|
|
71
|
-
|
|
72
|
-
- `neurons()`
|
|
73
|
-
Retourne la liste des biais (neurones) de toutes les couches linéaires.
|
|
74
|
-
|
|
75
|
-
- `__repr__()`
|
|
76
|
-
Affiche un schéma visuel du MLP via visualtorch et print des dimensions.
|
|
77
|
-
|
|
78
|
-
---
|
|
79
|
-
|
|
80
|
-
### Fonctions utilitaires
|
|
81
|
-
|
|
82
|
-
- `tensorise(obj)`
|
|
83
|
-
Convertit un objet array-like ou tensor en `torch.Tensor` float32 sur le device actif.
|
|
84
|
-
|
|
85
|
-
- `rglen(list)`
|
|
86
|
-
Renvoie un range correspondant aux indices d'une liste.
|
|
87
|
-
|
|
88
|
-
- `fPrintDoc(obj)`
|
|
89
|
-
Crée une fonction lambda qui affiche le docstring d'un objet.
|
|
90
|
-
|
|
91
|
-
- `image_from_url(url, img_size)`
|
|
92
|
-
Télécharge une image depuis une URL, la redimensionne et génère :
|
|
93
|
-
- `img_array` : `np.ndarray (H, W, 3)` pour affichage.
|
|
94
|
-
- `inputs` : tenseur `(H*W, 2)` coordonnées normalisées.
|
|
95
|
-
- `outputs` : tenseur `(H*W, 3)` valeurs RGB cibles.
|
|
96
|
-
|
|
97
|
-
---
|
|
98
|
-
|
|
99
|
-
### Visualisation et comparaison
|
|
100
|
-
|
|
101
|
-
- `plot(img_array, inputs, *nets)`
|
|
102
|
-
Affiche pour chaque réseau l'image reconstruite à partir des entrées.
|
|
103
|
-
|
|
104
|
-
- `compare(img_array, inputs, *nets)`
|
|
105
|
-
Affiche pour chaque réseau l'erreur absolue entre l'image originale et la prédiction,
|
|
106
|
-
et trace également les pertes cumulées. Chaque réseau doit posséder :
|
|
107
|
-
- `encoding(x)` si RFF activé
|
|
108
|
-
- `model()` retournant un tenseur `(N, 3)`
|
|
109
|
-
- attribut `losses`
|
|
110
|
-
|
|
111
|
-
---
|
|
112
|
-
|
|
113
|
-
### Objets et dictionnaires
|
|
114
|
-
|
|
115
|
-
- `Norm_list : dict`
|
|
116
|
-
Contient les modules PyTorch correspondant aux fonctions de normalisation/activation disponibles (ReLU, GELU, Sigmoid, Tanh, etc.)
|
|
117
|
-
|
|
118
|
-
- `Criterion_list : dict`
|
|
119
|
-
Contient les fonctions de perte PyTorch disponibles (MSE, L1, SmoothL1, BCE, CrossEntropy, etc.)
|
|
120
|
-
|
|
121
|
-
- `Optim_list(self, learning_rate)`
|
|
122
|
-
Retourne un dictionnaire d’optimiseurs PyTorch initialisés avec `self.model.parameters()`.
|
|
123
|
-
|
|
124
|
-
---
|
|
125
|
-
|
|
126
|
-
### Device et configuration
|
|
127
|
-
|
|
128
|
-
- `device`
|
|
129
|
-
Device par défaut (GPU si disponible, sinon CPU).
|
|
130
|
-
|
|
131
|
-
---
|
|
132
|
-
|
|
133
|
-
### Paramètres matplotlib et PyTorch
|
|
134
|
-
|
|
135
|
-
- Style global pour fond transparent et texte gris
|
|
136
|
-
- Optimisations CUDA activées pour TF32, matmul et convolutions
|
|
137
|
-
- Autograd configuré pour privilégier les performances
|
|
138
|
-
|
|
139
|
-
---
|
|
140
|
-
|
|
141
|
-
### Notes générales
|
|
142
|
-
|
|
143
|
-
- Toutes les méthodes de MLP utilisent les tenseurs sur le device global (CPU ou GPU)
|
|
144
|
-
- Les images doivent être normalisées entre 0 et 1
|
|
145
|
-
- Les fonctions interactives (`plot`, `compare`) utilisent matplotlib en mode interactif
|
|
146
|
-
- Le module est conçu pour fonctionner dans Jupyter et scripts Python classiques
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
NeuralNetworks/Dependances.py,sha256=3_C3cwUPgHmy1WHdNFKrUHmwtaE56ELJ4WnvpTdppSw,8674
|
|
2
|
-
NeuralNetworks/Image.py,sha256=qhTYBTCOO8_8_vYH9Su9luH9iq96ovDfZw9mTKifKVY,4013
|
|
3
|
-
NeuralNetworks/MLP.py,sha256=A86dJTxizUbJleKi-Cvp1W5sySUXZmn8FFvMzkwXR7E,22438
|
|
4
|
-
NeuralNetworks/Plot.py,sha256=yQc1JaQftvkzzT6sLfW9N41v-7lmVq463IZYiKDEzfs,12017
|
|
5
|
-
NeuralNetworks/__init__.py,sha256=cu1B_f8btqzZntZHL3uFQgeVlOoDwgLVDKmlrSSCCec,4777
|
|
6
|
-
neuralnetworks-0.1.11.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
7
|
-
neuralnetworks-0.1.11.dist-info/METADATA,sha256=5c89cKQDvcUzrAGyBYZuMBehYvU3_DaznFAIay6RbHs,4812
|
|
8
|
-
neuralnetworks-0.1.11.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
9
|
-
neuralnetworks-0.1.11.dist-info/top_level.txt,sha256=h18nmC1BX7avyAAwKh0OQWezxgXmOpmVtbFq-8Mcbms,15
|
|
10
|
-
neuralnetworks-0.1.11.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|