2017-06-28 6 views
9

In TensorFlow, tf.layers und tf.contrib.layers teilen eine Menge Funktionalität (Standard-2D-Faltungsschichten, Batch-Normalisierung Schichten, etc). Ist der Unterschied zwischen diesen beiden nur, dass das contrib.layers Paket noch experimentell ist, wo das layers Paket als stabil betrachtet wird? Oder wird einer durch den anderen ersetzt? Andere Unterschiede? Warum sind diese beiden getrennt?TensorFlow - tf.layers vs tf.contrib.layers

Antwort

10

Sie haben Ihre eigene Frage beantwortet. Die Beschreibung auf der offiziellen Dokumentation des tf.contrib Namespace ist:

contrib Modul mit flüchtigen oder experimentellen Code.

Also tf.contrib ist für experimentelle Funktionen reserviert. APIs in diesem Namespace können sich zwischen den Versionen schnell ändern, während die anderen in der Regel nicht ohne eine neue Hauptversion auskommen. Insbesondere sind die Funktionen in tf.contrib.layers nicht identisch mit denen in tf.layers gefunden, obwohl einige von ihnen mit anderen Namen repliziert werden können.

Ob Sie sie verwenden sollten, hängt davon ab, ob Sie bereit sind, plötzliche Änderungen zu verarbeiten. Code, der nicht auf tf.contrib beruht, ist möglicherweise einfacher auf zukünftige Versionen von TensorFlow zu migrieren.

+0

Gibt es einen Grund, warum ein Großteil der Funktionalität zwischen diesen Modulen dupliziert ist? Sind die Versionen in tf.contrib.layers, sagen wir, experimentelle Versionen mit besserer Optimierung oder so? Oder sind sie nur übrig geblieben, bevor das Schichtenmodul aus historischen Gründen zu tf hinzugefügt wurde? – erobertc

+1

@erobert Das muss möglicherweise von Fall zu Fall ausgewertet werden. "Tf.contrib" ermöglicht es der Community oft, mit verschiedenen APIs zu experimentieren und dabei weniger stabile Funktionen bereitzustellen. Daher müssen sie nicht sofort verschwinden, nachdem ein neues Feature gelandet ist. Ebenso können sie auch bei einer Nebenversion komplett verändert oder aufgeräumt werden. Momentan haben zum Beispiel "tf.layers.conv2d" und "tf.contrib.layers.conv2d" unterschiedliche Prototypen und sind nicht immer austauschbar. –