?>Array ( [lang] => es [id] => 114 ) Verificación de Firmas con una Red Siamesa usando Pesos Compartidos - WeAreCAS
deepLearn addLayer

Verificación de Firmas con una Red Siamesa usando Pesos Compartidos

Scénario de test & Cas d'usage

Contexto empresarial

Una institución financiera quiere un modelo que verifique si la firma de un cliente es auténtica comparándola con una firma de referencia. Una Red Siamesa es ideal para esto. Este escenario prueba la creación de una arquitectura compleja con dos ramas de procesamiento idénticas que comparten pesos, utilizando el parámetro `sharingWeights`.
Preparación de datos

No se requieren datos para la construcción del modelo. La red tendría dos entradas, una para la firma de referencia y otra para la firma a verificar.

¡Copiado!
1%put NOTA: La arquitectura del modelo se define con dos capas de entrada para manejar pares de imágenes.;

Étapes de réalisation

1
Crear un modelo vacío y añadir dos capas de entrada, una para cada imagen de la firma.
¡Copiado!
1PROC CAS;
2DEEPLEARN.buildModel / model={name='Red_Siamesa', replace=true};
3DEEPLEARN.addLayer / model='Red_Siamesa' name='Input_Ref' layer={type='input', nchannels=1, width=224, height=224};
4DEEPLEARN.addLayer / model='Red_Siamesa' name='Input_New' layer={type='input', nchannels=1, width=224, height=224};
5RUN;
2
Añadir la primera capa convolucional para la rama de la firma de referencia.
¡Copiado!
1DEEPLEARN.addLayer /
2 model='Red_Siamesa'
3 name='Conv1_A'
4 layer={type='convolution', nFilters=16, width=5, height=5, act='relu'}
5 srcLayers={'Input_Ref'};
6RUN;
3
Añadir la segunda capa convolucional para la nueva firma, compartiendo pesos con la primera.
¡Copiado!
1DEEPLEARN.addLayer /
2 model='Red_Siamesa'
3 name='Conv1_B'
4 sharingWeights='Conv1_A'
5 layer={type='convolution', nFilters=16, width=5, height=5, act='relu'}
6 srcLayers={'Input_New'};
7RUN;
4
Añadir capas de pooling para ambas ramas, también con pesos compartidos.
¡Copiado!
1DEEPLEARN.addLayer / model='Red_Siamesa' name='Pool1_A' layer={type='pooling', pool='max', width=2, height=2} srcLayers={'Conv1_A'};
2DEEPLEARN.addLayer / model='Red_Siamesa' name='Pool1_B' sharingWeights='Pool1_A' layer={type='pooling', pool='max', width=2, height=2} srcLayers={'Conv1_B'};
3RUN;
5
Añadir una capa de concatenación para unir las dos ramas de la red.
¡Copiado!
1DEEPLEARN.addLayer /
2 model='Red_Siamesa'
3 name='Concat'
4 layer={type='concat'}
5 srcLayers={'Pool1_A', 'Pool1_B'};
6RUN;
6
Añadir una capa final para calcular la similitud.
¡Copiado!
1DEEPLEARN.addLayer /
2 model='Red_Siamesa'
3 name='Similarity_Output'
4 layer={type='fullconnect', n=1, act='sigmoid'}
5 srcLayers={'Concat'};
6RUN;
7QUIT;

Resultado esperado


Se crea un modelo 'Red_Siamesa' con una arquitectura de dos ramas. La verificación clave es que la tabla del modelo especifique que 'Conv1_B' comparte pesos con 'Conv1_A', y 'Pool1_B' con 'Pool1_A'. Las dos ramas deben converger correctamente en la capa 'Concat'. El escenario valida el uso avanzado de `addLayer` para construir redes no secuenciales y con pesos compartidos.