una tutorial redes reconocimiento neuronales neuronal neural network machine learning implementacion imagenes espaƱol ejemplos convolucionales clasificador basicos neural-network tensorflow deep-learning lstm

neural network - tutorial - Red neuronal siamesa en TensorFlow



tensorflow ejemplos basicos (1)

Actualizar con tf.layers

Si usa el módulo tf.layers para construir su red, simplemente puede usar el argumento reuse=True para la segunda parte de la red siamesa:

x = tf.ones((1, 3)) y1 = tf.layers.dense(x, 4, name=''h1'') y2 = tf.layers.dense(x, 4, name=''h1'', reuse=True) # y1 and y2 will evaluate to the same values sess = tf.Session() sess.run(tf.global_variables_initializer()) print(sess.run(y1)) print(sess.run(y2)) # both prints will return the same values

Respuesta anterior con tf.get_variable

Puedes intentar usar la función tf.get_variable() . (Ver el tutorial )

Implemente la primera red utilizando un alcance variable con reuse=False :

with tf.variable_scope(''Inference'', reuse=False): weights_1 = tf.get_variable(''weights'', shape=[1, 1], initializer=...) output_1 = weights_1 * input_1

Luego implemente el segundo con el mismo código, excepto con reuse=True

with tf.variable_scope(''Inference'', reuse=True): weights_2 = tf.get_variable(''weights'') output_2 = weights_2 * input_2

La primera implementación creará e inicializará cada variable de la LSTM, mientras que la segunda implementación usará tf.get_variable() para obtener las mismas variables que se usaron en la primera red. De esa manera, las variables serán compartidas .

Luego solo tiene que usar la pérdida que desee (por ejemplo, puede usar la distancia L2 entre las dos redes siamesas), y los gradientes se propagarán por ambas redes, actualizando las variables compartidas con la suma de los gradientes .

Estoy intentando implementar una red neuronal siamesa en TensorFlow pero realmente no puedo encontrar ningún ejemplo que funcione en Internet (consulte el documento de Yann LeCun ).

La arquitectura que estoy tratando de construir consistiría en dos pesos LSTM compartidos y solo conectados al final de la red.

Mi pregunta es: ¿cómo construir dos redes neuronales diferentes compartiendo sus pesos (pesos atados) en TensorFlow y cómo conectarlos al final?

Gracias :)

Edición : implementé un ejemplo simple y funcional de una red siamesa here en MNIST.