Also habe ich ein sehr einfaches NN-Skript in Tensorflow geschrieben, und es fällt mir schwer, herauszufinden, woher etwas "Zufälligkeit" kommt.Determinismus in Tensorflow-Gradienten-Updates?
ich die
- Gewichte aufgenommen haben,
- Gradients,
- Logits
meines Netzes, wie ich trainieren, und für die erste Iteration ist es klar, dass alles beginnt aus dem gleichen. Ich habe einen SEED-Wert sowohl für die Art, wie Daten eingelesen werden, als auch einen SEED-Wert für die Initialisierung der Gewichte des Netzes. Diese ändere ich nie.
Mein Problem ist, dass zu sagen, auf die zweite Iteration jeden re-run ich tue, beginne ich den Gradienten divergieren, um zu sehen, (um einen kleinen Betrag, wie etwa 1e-6 oder so). Im Laufe der Zeit führt dies jedoch zu nicht wiederholbarem Verhalten.
Was könnte die Ursache dafür sein? Ich weiß nicht, wo jede mögliche Quelle der Zufälligkeit könnte aus kommen ...
Dank
Verwenden Sie GPU? Verschiedene ops auf GPU sind nicht deterministisch aufgrund ihrer Verwendung von CUDA atomics (wie tf.reduce_sum) –
Auch gibt einige SSE Optimierungen sind, die in nicht-deterministischen Ergebnissen führen, könnten Sie versuchen, eine TensorFlow ohne Optimierungen kompilieren, um zu sehen, ob das der ist Fall (Details - http://blog.nag.com/2011/02/wandering-precision.html) –
Hallo @ YaroslavBulatov ja, ich benutze tatsächlich eine GPU. – Spacey