Saltar al contenido

Cómo hacer la inicialización de Xavier en TensorFlow

Nuestros mejores programadores agotaron sus depósitos de café, investigando noche y día por la solución, hasta que Isabel halló el hallazgo en Bitbucket por lo tanto hoy la compartimos aquí.

Solución:

Dado que la versión 0.8 hay un inicializador de Xavier, consulte aquí los documentos.

Puedes usar algo como esto:

W = tf.get_variable("W", shape=[784, 256],
           initializer=tf.contrib.layers.xavier_initializer())

Solo para agregar otro ejemplo sobre cómo definir un tf.Variable inicializado usando el método de Xavier y Yoshua:

graph = tf.Graph()
with graph.as_default():
    ...
    initializer = tf.contrib.layers.xavier_initializer()
    w1 = tf.Variable(initializer(w1_shape))
    b1 = tf.Variable(initializer(b1_shape))
    ...

Esto me impidió tener nan valores en mi función de pérdida debido a inestabilidades numéricas cuando uso múltiples capas con RELU.

@ Aleph7, la inicialización de Xavier / Glorot depende del número de conexiones entrantes (fan_in), el número de conexiones salientes (fan_out) y el tipo de función de activación (sigmoidea o tanh) de la neurona. Vea esto: http://jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf

Así que ahora, a tu pregunta. Así es como lo haría en TensorFlow:

(fan_in, fan_out) = ...
    low = -4*np.sqrt(6.0/(fan_in + fan_out)) # use 4 for sigmoid, 1 for tanh activation 
    high = 4*np.sqrt(6.0/(fan_in + fan_out))
    return tf.Variable(tf.random_uniform(shape, minval=low, maxval=high, dtype=tf.float32))

Tenga en cuenta que deberíamos tomar muestras de una distribución uniforme y no de la distribución normal como se sugiere en la otra respuesta.

Por cierto, ayer escribí una publicación para algo diferente usando TensorFlow que también usa la inicialización de Xavier. Si está interesado, también hay un cuaderno de Python con un ejemplo de extremo a extremo: https://github.com/delip/blog-stuff/blob/master/tensorflow_ufp.ipynb

valoraciones y comentarios

Si te gustó nuestro trabajo, tienes la habilidad dejar un ensayo acerca de qué le añadirías a esta división.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *