una repetir posiciones números numeros matriz llenar listas lista generar datos con como azar aleatorios aleatorias python numpy tensorflow

python - repetir - Cómo obtener resultados estables con TensorFlow, estableciendo semilla aleatoria



listas aleatorias en python (2)

Estoy tratando de ejecutar una red neuronal varias veces con diferentes parámetros para calibrar los parámetros de la red (probabilidades de abandono, tasa de aprendizaje ed). Sin embargo, tengo el problema de que ejecutar la red manteniendo los parámetros iguales todavía me da una solución diferente cuando ejecuto la red en un bucle de la siguiente manera:

filename = create_results_file() for i in range(3): g = tf.Graph() with g.as_default(): accuracy_result, average_error = network.train_network( parameters, inputHeight, inputWidth, inputChannels, outputClasses) f, w = get_csv_writer(filename) w.writerow([accuracy_result, "did run %d" % i, average_error]) f.close()

Estoy usando el siguiente código al comienzo de mi función train_network antes de configurar las capas y la función de error de mi red:

np.random.seed(1) tf.set_random_seed(1)

También he intentado agregar este código antes de la creación del gráfico TensorFlow, pero sigo obteniendo diferentes soluciones en mi salida de resultados.

Estoy usando un AdamOptimizer y estoy inicializando pesos de red usando tf.truncated_normal . Además, estoy usando np.random.permutation para mezclar las imágenes entrantes para cada época.


El comportamiento determinista se puede obtener suministrando un nivel de gráfico o una semilla de nivel de operación. Ambos trabajaron para mí. Se puede colocar una semilla a nivel de gráfico con tf.set_random_seed . Se puede colocar una semilla de nivel de operación, por ejemplo, en un intializador variable como en:

myvar = tf.Variable(tf.truncated_normal(((10,10)), stddev=0.1, seed=0))


La configuración de la semilla aleatoria TensorFlow actual solo afecta al gráfico predeterminado actual. Como está creando un nuevo gráfico para su entrenamiento y configurándolo como predeterminado ( with g.as_default(): , debe establecer la semilla aleatoria dentro del alcance de ese bloque.

Por ejemplo, su bucle debería tener el siguiente aspecto:

for i in range(3): g = tf.Graph() with g.as_default(): tf.set_random_seed(1) accuracy_result, average_error = network.train_network( parameters, inputHeight, inputWidth, inputChannels, outputClasses)

Tenga en cuenta que esto usará la misma semilla aleatoria para cada iteración del bucle for externo. Si desea usar una semilla diferente, pero aún determinista, en cada iteración, puede usar tf.set_random_seed(i + 1) .