deepLearn addLayer

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

Scénario de test & Cas d'usage

Geschäftskontext

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`.
Über das Set : deepLearn

Erstellung und Training tiefer neuronaler Netze.

Entdecken Sie alle Aktionen von deepLearn
Datenaufbereitung

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

Kopiert!
1/* Keine Datenvorbereitung erforderlich. */

Étapes de réalisation

1
Erstellung eines leeren Modell-Containers namens 'siamese_signature_model'.
Kopiert!
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.
Kopiert!
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.
Kopiert!
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.
Kopiert!
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.
Kopiert!
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;

Erwartetes Ergebnis


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.