addLayer
Description
L'action `addLayer` du jeu d'actions `deepLearn` permet d'ajouter une nouvelle couche à un modèleReprésentation mathématique entraînée sur des données pour capturer des tendances, prédire des résultats ou classifier des observations via des algorithmes (Régression, Forêt aléatoire, Gradient Boosting). d'apprentissage profond (Deep LearningSous-ensemble du Machine Learning basé sur des réseaux de neurones artificiels profonds. Il excelle dans l'extraction automatique de motifs complexes depuis des données brutes (images, texte, son).) en mémoire. Que vous construisiez un réseau de neurones convolutionnel (CNNRéseau de neurones profond spécialisé dans le traitement de données structurées en grille (images). Il utilise des couches de convolution pour extraire automatiquement des caractéristiques spatiales.), récurrent (RNNRéseau de neurones récurrent conçu pour les données séquentielles. Il utilise des boucles de rétroaction pour mémoriser l'information passée, idéal pour l'analyse de texte ou de séries temporelles.) ou profond classique (DNNRéseau de neurones profond (Deep Neural Network) comprenant plusieurs couches cachées entre l'entrée et la sortie. Il modélise des relations non linéaires complexes à partir de grands volumes de données.), c'est ici que vous empilez vos blocs LEGO ! Des couches d'entrée (`INPUT`) aux couches de convolution (`CONVO`), en passant par le pooling (`POOL`) et les couches de sortie (`OUTPUT`), vous orchestrez l'architecture complète de votre cerveau artificiel. C'est l'heure de créer des connexions synaptiques !
Paramètres Clés
| Nom du paramètre | Description |
|---|---|
| layer | Définit le type de la couche (ex: CONVO, POOL, FC, INPUT, OUTPUT) et regroupe tous les paramètres mathématiques spécifiques à cette architecture (fonction d'activation `act`, nombre de neurones `n`, taille de la fenêtre de convolution `width`/`height`, taux d'oubli `dropout`, etc.). |
| modelTable | Spécifie la table CAS contenant le modèle en mémoire auquel vous souhaitez ajouter cette nouvelle couche. Ce modèle doit avoir été créé préalablement via l'action `buildModel`. |
| name | Le petit nom unique de votre couche. Soyez créatif mais rigoureux : ce nom sera utilisé par les couches suivantes dans leur paramètre `srcLayers` pour s'y connecter. |
| nThreads | Nombre de threads à utiliser pour cette opération. Laissez le serveur répartir la charge ou imposez votre volonté si vous voulez optimiser le CPU. |
| replace | Si positionné sur `TRUE`, remplace sans pitié une couche existante portant le même nom. Parfait pour le prototypage itératif. |
| sharingWeights | Spécifie le nom d'une autre couche avec laquelle partager les poids (weights). Très pratique pour les réseaux siamois ou certains réseaux récurrents. |
| srcLayers | La ou les couches parentes ! Définit quelles couches existantes transmettent leurs sorties en entrée de cette nouvelle couche, formant ainsi le graphe du réseau. |
Préparation des données
Initialisation du Modèle Hôte
Avant de pouvoir ajouter des couches, il nous faut un modèle vide. Faisons appel à `buildModel` pour créer un réseau de neurones convolutionnel (CNN) basique en mémoire.
| 1 | PROC CAS; |
| 2 | DEEPLEARN.buildModel / |
| 3 | modelTable={name="MonSuperCNN", replace=TRUE} |
| 4 | type="CNN"; |
| 5 | RUN; |
| 6 | QUIT; |
Exemples d'utilisation
1. Ajout de la couche d'entrée (INPUT)
Cet exemple définit la couche INPUT (tenseurs RGB 3x32x32). Le paramètre scale (1/255) normalise les pixels dans [0,1], une étape critique pour stabiliser la descente de gradient.
| 1 | PROC CAS; |
| 2 | DEEPLEARN.addLayer / |
| 3 | modelTable={name="MonSuperCNN"} |
| 4 | name="Entree_Images" |
| 5 | layer={type="INPUT", nChannels=3, width=32, height=32, scale=0.003921568627}; |
| 6 | RUN; |
| 7 | QUIT; |
Résultat Attendu :
2. Ajout d'une couche de convolution (CONVO)
Cet exemple intègre une couche CONVO (16 filtres 3x3, stride=1). L'activation ReLU introduit la non-linéarité, et l'initialisation XAVIER préserve la variance des gradients.
| 1 | PROC CAS; |
| 2 | DEEPLEARN.addLayer / |
| 3 | modelTable={name="MonSuperCNN"} |
| 4 | name="Conv_1" |
| 5 | srcLayers={"Entree_Images"} |
| 6 | layer={type="CONVO", nFilters=16, width=3, height=3, stride=1, act="RELU", init="XAVIER"}; |
| 7 | RUN; |
| 8 | QUIT; |
Résultat Attendu :
Assemblage d'un réseau CNN de bout en bout
On ne s'arrête pas en si bon chemin ! Voyons comment chainer plusieurs couches d'affilée : une couche de Pooling pour réduire la dimensionnalité, une couche Dense (Fully Connected) pour le raisonnement, et enfin une couche de Sortie (OUTPUT) pour classer nos images avec la fonction d'activation Softmax.
| 1 | PROC CAS; |
| 2 | /* 1. Couche de Pooling (MAX) */ |
| 3 | DEEPLEARN.addLayer / modelTable={name="MonSuperCNN"} name="Pool_1" srcLayers={"Conv_1"} |
| 4 | layer={type="POOL", pool="MAX", width=2, height=2, stride=2}; |
| 5 | /* 2. Couche Dense (FC - Fully Connected) */ |
| 6 | DEEPLEARN.addLayer / modelTable={name="MonSuperCNN"} name="Dense_1" srcLayers={"Pool_1"} |
| 7 | layer={type="FC", n=128, act="RELU", init="XAVIER", dropout=0.2}; |
| 8 | /* 3. Couche de Sortie (OUTPUT) */ |
| 9 | DEEPLEARN.addLayer / modelTable={name="MonSuperCNN"} name="Sortie_Classification" srcLayers={"Dense_1"} |
| 10 | layer={type="OUTPUT", act="SOFTMAX", error="ENTROPY"}; |
| 11 | RUN; |
| 12 | QUIT; |