Wie man stabile Ergebnisse mit TensorFlow, Einstellung random seed
Ich versuche zu laufen, von einem neuronalen Netz mehrere Male mit verschiedenen Parametern, um zu Kalibrieren, die Netzwerke Parameter (dropout-Wahrscheinlichkeiten -, Lern-rate-e.d....). Aber ich habe das problem, dass das Netzwerk, während die Parameter die gleichen gibt mir immer noch eine andere Lösung wenn ich das Netzwerk in einer Schleife wie folgt:
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()
Ich bin mit dem folgenden code am Anfang meiner train_network-Funktion vor der Einrichtung der Schichten und die error-Funktion von meinem Netzwerk:
np.random.seed(1)
tf.set_random_seed(1)
Habe ich auch versucht, indem Sie diesen code vor der TensorFlow Diagramm-Erstellung, aber ich habe immer unterschiedliche Lösungen, die in meiner Ausgabe.
Bin ich mit einer AdamOptimizer und bin initialisieren von Netzwerk-GEWICHTE mit tf.truncated_normal
. Außerdem bin ich mit np.random.permutation
zu schieben Sie die eingehenden Bilder für jede Epoche.
InformationsquelleAutor Waanders | 2016-03-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einstellung der aktuellen TensorFlow zufällige Streuung wirkt sich auf den aktuellen Standard Diagramm nur. Da Sie erstellen eine neue Grafik für Ihr training und setzen Sie es als Standard (
with g.as_default():
), müssen Sie den random seed in den Anwendungsbereich vonwith
block.Zum Beispiel, die Schleife sollte wie folgt Aussehen:
Beachten Sie, dass das der gleiche random seed für jede iteration der äußeren
for
Schleife. Wenn Sie möchten, verwenden Sie ein anderes—aber immer noch deterministisch—Samen in jeder iteration, die Sie verwenden könnentf.set_random_seed(i + 1)
.Ich bin mit dem gleichen problem.
tensorflow
0.12.1
Einstellung random seed als angegeben, sehe ich leichte Unterschiede in der Wahrscheinlichkeit der Ausgänge aus sind.Der Grund wird von dem abhängen, was Ihre Funktion ist, aber es ist wahrscheinlich, dass kleine Unterschiede in der Genauigkeit der Berechnung sind die durch eine nicht-deterministische parallele Reduktion ops wie
tf.reduce_sum()
. (Diese ops Behandlung von floating-point addition kommutativ ist, wenn Sie in Wirklichkeit nicht, und änderungen in der Reduzierung der Bestellung führen kann, zu leichte Fehler im Ergebnis....)Ich stehe vor einem ähnlichen Fehler mit
DropoutWrapper
. Wenn ich haltenkeep_prob=1
, ich bekomme konsistente Ergebnisse. Aber bei anderen läuft, geben Sie mir andere Werte mitkeep_prob=0.8
. Was könnte der Grund sein? Ich habe es verschoben nach stackoverflow.com/questions/42156296InformationsquelleAutor mrry
Deterministisch Verhalten, kann erhalten werden entweder durch die Lieferung einer Grafik-Ebene oder ein-Betrieb-level-seed. Beide arbeiteten für mich. Eine Diagramm-Ebene Saatgut platziert werden können, mit tf.set_random_seed. Eine operation-Ebene Saatgut platziert werden können.e.g in einer Variablen intializer in:
InformationsquelleAutor ssegvic