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.