Comment obtenir des résultats stables avec TensorFlow, réglage de la graine aléatoire
Je suis en train de lancer un réseau de neurones plusieurs fois avec des paramètres différents dans le but de calibrer les paramètres réseaux (abandon des probabilités, au taux d'apprentissage électronique.d.). Cependant, je vais avoir le problème que l'exécution du réseau tout en conservant les paramètres de la même me donne encore une autre solution, quand je lance le réseau dans une boucle comme suit:
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()
Je suis en utilisant le code suivant au début de ma train_network fonction avant la mise en place des couches et de la fonction d'erreur de mon réseau:
np.random.seed(1)
tf.set_random_seed(1)
J'ai aussi essayé d'ajouter ce code avant le TensorFlow création graphique, mais je continue à recevoir des solutions différentes dans mes résultats de sortie.
Je suis en utilisant un AdamOptimizer et je suis de l'initialisation réseau poids en utilisant tf.truncated_normal
. En outre, je suis en utilisant np.random.permutation
aléatoire les images entrantes pour chaque époque.
- Double Possible de des résultats Reproductibles dans Tensorflow avec tf.set_random_seed
Vous devez vous connecter pour publier un commentaire.
Réglage de l'actuel TensorFlow aléatoire, affecte la valeur par défaut graphique seulement. Puisque vous êtes la création d'un nouveau graphique de votre formation et de la définir comme valeur par défaut (
with g.as_default():
), vous devez définir la valeur de départ aléatoire dans le champ d'application de cettewith
bloc.Par exemple, la boucle doit se présenter comme suit:
Qui va utiliser la même valeur aléatoire pour chaque itération de l'extérieur
for
boucle. Si vous souhaitez utiliser un autre—mais encore déterministe graines dans chaque itération, vous pouvez utilisertf.set_random_seed(i + 1)
.tensorflow
0.12.1
paramètre aléatoire, comme indiqué, je vois une légère différence dans la probabilité des sorties d'une exécution.tf.reduce_sum()
. (Ces ops traiter à virgule flottante plus que commutative, alors qu'en réalité il ne l'est pas, et les changements dans la réduction de la commande peut conduire à de légères erreurs dans le résultat....)DropoutWrapper
. Quand je suiskeep_prob=1
, j'obtiens des résultats cohérents. Cependant, les différentes pistes de me donner des valeurs différentes aveckeep_prob=0.8
. Quelle pourrait être la raison? J'ai déménagé à stackoverflow.com/questions/42156296Déterministe du comportement peut être obtenu soit par la remise d'un graphe de niveau ou d'une opération au niveau de la graine. Les deux ont travaillé pour moi. Un graphe de niveau de semence peuvent être placées avec tf.set_random_seed. Une opération au niveau de la graine peut être placé à l'e.g, dans une variable intializer comme dans:
Veuillez ajouter tous les graine aléatoire fonctions avant votre code:
tf.reset_default_graph()
tf.set_random_seed(0)
aléatoire.de la graine(0)
np.aléatoire.de la graine(0)
Je pense, certains modèles en TensorFlow sont à l'aide de numpy ou le python fonction aléatoire.