?>Array ( [id] => 107 ) Grenzfall: Aufbau eines siamesischen Netzwerks mit geteilten Gewichten und Ersetzen einer Schicht - WeAreCAS
deepLearn addLayer

Grenzfall: Aufbau eines siamesischen Netzwerks mit geteilten Gewichten und Ersetzen einer Schicht

Scénario de test & Cas d'usage

Contexte Métier

Eine Bank möchte die Echtheit von Unterschriften überprüfen, indem sie eine neue Unterschrift mit einer Referenzunterschrift vergleicht. Ein siamesisches Netzwerk ist ideal dafür, da es zwei identische Eingaben durch Türme mit geteilten Gewichten verarbeitet. Dieses Szenario testet die fortgeschrittenen Parameter `sharingWeights` und `replace`.
Préparation des Données

Keine Daten erforderlich. Der Fokus liegt auf der komplexen Architekturdefinition.

Copié !
1/* Keine Datenvorbereitung erforderlich. */

Étapes de réalisation

1
Erstellung eines leeren Modell-Containers namens 'siamese_signature_model'.
Copié !
1PROC CAS;
2DEEPLEARN.buildModel /
3 model={name='siamese_signature_model', replace=true};
4RUN;
2
Hinzufügen von zwei separaten Input-Schichten für die beiden zu vergleichenden Unterschriftsbilder.
Copié !
1PROC CAS;
2DEEPLEARN.addLayer / modelTable={name='siamese_signature_model'} name='Input_A' layer={type='input', nchannels=1, width=256, height=128};
3DEEPLEARN.addLayer / modelTable={name='siamese_signature_model'} name='Input_B' layer={type='input', nchannels=1, width=256, height=128};
4RUN;
3
Aufbau des ersten Turms (Turm A) mit einer Convolutional- und einer Pooling-Schicht.
Copié !
1PROC CAS;
2DEEPLEARN.addLayer / modelTable={name='siamese_signature_model'} name='Conv_A' layer={type='convolution', nFilters=8, width=3, act='relu'} srcLayers={'Input_A'};
3DEEPLEARN.addLayer / modelTable={name='siamese_signature_model'} name='Pool_A' layer={type='pooling', width=2, pool='max'} srcLayers={'Conv_A'};
4RUN;
4
Aufbau des zweiten Turms (Turm B) unter Verwendung von `sharingWeights`, um die Gewichte von Turm A wiederzuverwenden.
Copié !
1PROC CAS;
2DEEPLEARN.addLayer / modelTable={name='siamese_signature_model'} name='Conv_B' layer={type='convolution', nFilters=8, width=3, act='relu'} srcLayers={'Input_B'} sharingWeights='Conv_A';
3DEEPLEARN.addLayer / modelTable={name='siamese_signature_model'} name='Pool_B' layer={type='pooling', width=2, pool='max'} srcLayers={'Conv_B'} sharingWeights='Pool_A';
4RUN;
5
Hinzufügen einer temporären 'falschen' Concat-Schicht, die dann durch die korrekte Version mit `replace=true` ersetzt wird.
Copié !
1PROC CAS;
2/* Falsche Schicht hinzufügen (z.B. mit falschem Typ) */
3DEEPLEARN.addLayer / modelTable={name='siamese_signature_model'} name='MergeLayer' layer={type='output', n=1} srcLayers={'Pool_A', 'Pool_B'};
4 
5/* Korrekte Concat-Schicht mit replace=true hinzufügen */
6DEEPLEARN.addLayer / modelTable={name='siamese_signature_model'} name='MergeLayer' layer={type='concat'} srcLayers={'Pool_A', 'Pool_B'} replace=true;
7RUN;

Résultat Attendu


Das Modell 'siamese_signature_model' beschreibt eine siamesische Architektur. Die Schichten 'Conv_B' und 'Pool_B' müssen einen Verweis auf die Gewichte von 'Conv_A' bzw. 'Pool_A' enthalten. Die Schicht 'MergeLayer' muss vom Typ 'CONCAT' sein, was beweist, dass die `replace`-Operation erfolgreich war. Es darf kein Fehler aufgrund eines doppelten Schichtnamens auftreten.