Hola, tenemos la solución a lo que andabas buscando, desplázate y la hallarás un poco más abajo.
Solución:
Los algoritmos de aprendizaje automático en general son no determinista. Esto significa que cada vez que los ejecute, el resultado debería variar. Esto tiene que ver con la inicialización aleatoria de los pesos. Si desea que los resultados sean reproducibles, debe eliminar la aleatoriedad de la tabla. Una manera simple de hacer esto es usar un Semilla aleatoria.
import numpy as np
import tensorflow as tf
np.random.seed(1234)
tf.random.set_seed(1234)
# rest of your code
Si desea el factor de aleatoriedad pero no una variación tan alta en su salida, le sugiero que reduzca su tasa de aprendizaje o cambie su optimizador (sugiero un optimizador SGD con una tasa de aprendizaje relativamente baja). ¡Aquí está disponible una excelente descripción general de la optimización del descenso de gradiente!
Una nota sobre los generadores aleatorios de TensorFlow es que además de una semilla global (es decir, tf.random.set_seed()
), también utilizan un contador interno, por lo que si ejecuta
tf.random.set_seed(1234)
print(tf.random.uniform([1]).numpy())
print(tf.random.uniform([1]).numpy())
Obtendrás 0.5380393
y 0.3253647
, respectivamente. Sin embargo, si vuelve a ejecutar ese mismo fragmento, obtendrá los mismos dos números nuevamente.
Puede encontrar una explicación detallada de cómo funcionan las semillas aleatorias en TensorFlow aquí.
Para las versiones más nuevas de TF, tenga cuidado con esto también: TensorFlow 2.2 se envía con una variable de entorno os TF_DETERMINISTIC_OPS
que si se establece en '1'
se asegurará de que solo se utilicen operaciones de GPU deterministas.
Este código es para keras usando backend tensorflow
Esto se debe a que los pesos se inicializan con números aleatorios y, por lo tanto, obtendrá resultados diferentes cada vez. Este es el comportamiento esperado. Para tener un resultado reproducible, debe establecer la semilla aleatoria como. A continuación, el ejemplo establece semillas de nivel de operación y nivel de gráfico para obtener más información, consulte aquí
import tensorflow as tf
import random as rn
os.environ['PYTHONHASHSEED'] = '0'
# Setting the seed for numpy-generated random numbers
np.random.seed(37)
# Setting the seed for python random numbers
rn.seed(1254)
# Setting the graph-level random seed.
tf.set_random_seed(89)
from keras import backend as K
session_conf = tf.ConfigProto(
intra_op_parallelism_threads=1,
inter_op_parallelism_threads=1)
#Force Tensorflow to use a single thread
sess = tf.Session(graph=tf.get_default_graph(), config=session_conf)
K.set_session(sess)
# Rest of the code follows from here on ...
Te mostramos reseñas y puntuaciones
Nos puedes corroborar nuestra publicación exponiendo un comentario y dejando una puntuación te lo agradecemos.