deepLearn

addLayer

##set_deeplearn ##ai ##deeplearning

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 !

Syntaxe Officielle
proc cas;
deepLearn.addLayer /
layer={type="BATCHNORM" | "CONVO" | "FC" | "INPUT" | "OUTPUT" | "POOL" | "RECURRENT" | "RESIDUAL" | ..., <paramètres_spécifiques_au_type>}
modelTable={name="nom_de_la_table_modele", caslib="librairie_cas"}
name="nom_unique_de_la_couche"
nThreads=entier
replace=TRUE | FALSE
sharingWeights="nom_couche_partageant_les_poids"
srcLayers={"couche_source_1", "couche_source_2", ...};
run;
quit;

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.

1PROC CAS;
2 DEEPLEARN.buildModel /
3 modelTable={name="MonSuperCNN", replace=TRUE}
4 type="CNN";
5RUN;
6QUIT;

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.

1PROC 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};
6RUN;
7QUIT;
Résultat Attendu :
Le modèle 'MonSuperCNN' est désormais doté d'une couche d'entrée capable d'ingérer vos données.
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.

1PROC 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"};
7RUN;
8QUIT;
Résultat Attendu :
Une couche de convolution est ajoutée et connectée directement à 'Entree_Images'.
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.

1PROC 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"};
11RUN;
12QUIT;
Résultat Attendu :
Félicitations, vous venez de coder l'architecture complète d'un classifieur d'images prêt à être entraîné avec `dlTrain` !