Encontré este ejemplo de una CNN implementada en Tensorflow.
En este ejemplo de una CNN, el sesgo es constante (a partir de la línea 59).
58 W1 = tf.Variable(tf.truncated_normal([6, 6, 1, K], stddev=0.1))
59 B1 = tf.Variable(tf.constant(0.1, tf.float32, [K]))
60 W2 = tf.Variable(tf.truncated_normal([5, 5, K, L], stddev=0.1))
61 B2 = tf.Variable(tf.constant(0.1, tf.float32, [L]))
62 W3 = tf.Variable(tf.truncated_normal([4, 4, L, M], stddev=0.1))
63 B3 = tf.Variable(tf.constant(0.1, tf.float32, [M]))
¿Significa eso que el optimizador no ajusta el sesgo? Si es así, ¿cuál es la razón de un sesgo constante? ¿Por qué el sesgo es constante incluso en la parte completamente conectada de la red?
B1 = tf.Variable (tf.constant (0.1, tf.float32, [K]))
Aquí se crea B1 (una variable) que se inicializa usando una constante. El optimizador cambia las variables B1, B2, B3 durante el entrenamiento. Es solo que se inicializaron con una constante. ¿Viste la diferencia?
En C / C ++ esto sería similar a:
const float c = 0.1;
float B1 = c;
float W1 = 0.2; // initialized weights
float X= 10;
float out = X*W1 + B1;
std::cout << "ouput =, " << out << " B1 =" <<B1 <<"\n";
// now update bias, weight
B1 = B1 + B1/10;
W1 = W1 + W1/10;
out = X*W1 + B1;
std::cout << "ouput =, " << out << " B1 =" <<B1 <<"\n";
Eso es exactamente lo que está sucediendo. Inicializar la variable B1 con constante C no cambia el hecho de que B1 sigue siendo una variable. Fue solo la decisión del autor en el ejemplo que citó.
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras