tensorflow::Portée
#include <scope.h> Un objet Scope représente un ensemble d'opérations TensorFlow liées qui possèdent les mêmes propriétés, telles qu'un préfixe de nom commun.
Résumé
Un objet Scope est un conteneur pour les propriétés des opérations TensorFlow. Les constructeurs d'opérations reçoivent un objet Scope comme premier argument obligatoire, et l'opération construite hérite des propriétés de cet objet.
Un exemple simple :
using namespace ops; Scope root = Scope::NewRootScope(); auto c1 = Const(root, { {1, 1} }); auto m = MatMul(root, c1, { {41}, {1} }); GraphDef gdef; Status s = root.ToGraphDef(&gdef); if (!s.ok()) { ... }
Hiérarchie de portée :
La classe Scope propose différentes fonctions With<> permettant de créer une nouvelle portée. Généralement, une seule propriété de cette nouvelle portée est modifiée, tandis que les autres sont héritées de la portée parente. La méthode NewSubScope(name) ajoute name au préfixe des noms des opérations créées dans cette portée, et WithOpName() modifie le suffixe, qui correspond par défaut au type de l'opération.
Exemples de noms :
Scope root = Scope::NewRootScope(); Scope linear = root.NewSubScope("linear"); // W will be named "linear/W" auto W = Variable(linear.WithOpName("W"), {2, 2}, DT_FLOAT); // b will be named "linear/b_3" int idx = 3; auto b = Variable(linear.WithOpName("b_", idx), {2}, DT_FLOAT); auto x = Const(linear, {...}); // name: "linear/Const" auto m = MatMul(linear, x, W); // name: "linear/MatMul" auto r = BiasAdd(linear, m, b); // name: "linear/BiasAdd"
Durée de vie de la portée :
Un nouveau scope est créé en appelant `Scope::NewRootScope` . Cela crée des ressources partagées par tous les scopes enfants qui héritent de ce scope, directement ou transitivement. Par exemple, un nouveau scope crée un nouvel objet `Graph` auquel les opérations sont ajoutées lorsque ce nouveau scope ou ses enfants sont utilisés par un constructeur `Op`. Le nouveau scope possède également un objet `Status` qui sert à signaler les erreurs aux fonctions de construction `Op` appelées sur n'importe quel scope enfant. Les fonctions de construction `Op` doivent vérifier l'état du scope en appelant la méthode `ok()` avant de procéder à la construction de l'opération.
Sécurité du fil :
Un objet Scope n'est PAS thread-safe. Les threads ne peuvent pas appeler simultanément les fonctions constructeurs d'opérations sur le même objet Scope .
Constructeurs et destructeurs | |
|---|---|
Scope (const Scope & other) | |
~Scope () |
fonctions publiques | |
|---|---|
ClearColocation () const | Supprimer toutes les contraintes de colocalisation. |
ColocateWith (const Operation & op) const | Retourner une nouvelle portée. |
ColocateWith (const Output & out) const | Fonction pratique pour ce qui précède. |
ExitOnError () const | Retourner une nouvelle portée. |
GetCompositeOpScopes (const string & composite_op_name) const | |
GetUniqueNameForOp (const string & default_name) const | string Renvoie un nom unique, en utilisant default_name si aucun nom d'opération n'a été spécifié. |
NewSubScope (const string & child_scope_name) const | Retourner une nouvelle portée. |
ToGraphDef (GraphDef *gdef) const | Si status() est Status::OK(), convertissez l'objet Graph stocké dans cette portée en un proto GraphDef et renvoyez Status::OK(). |
UpdateStatus (const Status & s) const | void Mettre à jour le statut de ce périmètre. |
WithAssignedDevice (const string & assigned_device) const | Renvoie une nouvelle portée. |
WithControlDependencies (const gtl::ArraySlice< Operation > & control_deps) const | Retourner une nouvelle portée. |
WithControlDependencies (const Output & control_dep) const | Identique à ce qui précède, mais pratique pour ajouter une dépendance de contrôle sur l'opération produisant la sortie control_dep. |
WithDevice (const string & device) const | Retourner une nouvelle portée. |
WithKernelLabel (const string & kernel_label) const | Retourner une nouvelle portée. |
WithNoControlDependencies () const | Retourner une nouvelle portée. |
WithOpName (Ty... fragments) const | Retourner une nouvelle portée. |
WithXlaCluster (const string & xla_cluster) const | Renvoie une nouvelle portée. |
control_deps () const | const std::vector< Operation > & |
graph () const | Graph * |
graph_as_shared_ptr () const | std::shared_ptr< Graph > |
ok () const | bool |
operator= (const Scope & other) | Scope & |
status () const | |
fonctions statiques publiques | |
|---|---|
NewRootScope () | Retourner une nouvelle portée. |
fonctions publiques
ColocateWith
Scope ColocateWith( const Operation & op ) const
Retourner une nouvelle portée.
Toutes les opérations créées dans le périmètre renvoyé seront exécutées sur le même périphérique que l'opération. REMARQUE : Cette fonction est destinée à un usage interne, via des bibliothèques, pour contrôler l'exécution des opérations sur les périphériques. Son utilisation publique est déconseillée, car le comportement de cette fonction est susceptible d'évoluer.
Sortie en cas d'erreur
Scope ExitOnError() const
Retourner une nouvelle portée.
Les fonctions de construction d'op prenant la portée renvoyée comme argument de portée s'arrêteront dès qu'une erreur sera détectée, au lieu de définir l'état de la portée.
ObtenirCompositeOpScopes
CompositeOpScopes GetCompositeOpScopes( const string & composite_op_name ) const
ObtenirNomUniquePourOp
string GetUniqueNameForOp( const string & default_name ) const
Renvoie un nom unique, en utilisant default_name si aucun nom d'opération n'a été spécifié.
Nouvelle sous-portée
Scope NewSubScope( const string & child_scope_name ) const
Retourner une nouvelle portée.
Les opérations créées avec cette portée auront pour préfixe name/child_scope_name . Le nom proprement dit sera unique dans la portée actuelle. Toutes les autres propriétés sont héritées de la portée actuelle. Si child_scope_name est vide, le / est omis.
Portée
Scope( const Scope & other )
ToGraphDef
Status ToGraphDef( GraphDef *gdef ) const
Si status() est Status::OK(), convertissez l'objet Graph stocké dans cette portée en un proto GraphDef et renvoyez Status::OK().
Sinon, renvoyez le statut d'erreur tel quel sans effectuer de conversion GraphDef.
Mise à jour du statut
void UpdateStatus( const Status & s ) const
Mettre à jour le statut de ce périmètre.
Remarque : L’objet d’état est partagé entre tous les enfants de cette portée. Si l’état résultant n’est pas Status::OK() et que exit_on_error_ est défini sur cette portée, cette fonction se termine en appelant LOG(FATAL).
Avec l'appareil attribué
Scope WithAssignedDevice( const string & assigned_device ) const
Renvoie une nouvelle portée.
Toutes les opérations créées dans la portée renvoyée auront leur périphérique assigné défini sur assigned_device .
Avec les dépendances de contrôle
Scope WithControlDependencies( const gtl::ArraySlice< Operation > & control_deps ) const
Retourner une nouvelle portée.
Toutes les opérations créées dans la portée renvoyée auront comme dépendances de contrôle l'union des opérations du vecteur control_deps et des dépendances de contrôle de la portée actuelle.
Avec les dépendances de contrôle
Scope WithControlDependencies( const Output & control_dep ) const
Identique à ce qui précède, mais pratique pour ajouter une dépendance de contrôle sur l'opération produisant la sortie control_dep.
Avec l'appareil
Scope WithDevice( const string & device ) const
Retourner une nouvelle portée.
Toutes les opérations créées dans le périmètre renvoyé auront le champ « device » défini sur « device ».
Avec étiquette de noyau
Scope WithKernelLabel( const string & kernel_label ) const
Retourner une nouvelle portée.
Toutes les opérations créées avec la nouvelle portée auront kernel_label comme valeur de leur attribut '_kernel' ;
Sans dépendances de contrôle
Scope WithNoControlDependencies() const
Retourner une nouvelle portée.
Toutes les opérations créées dans le périmètre renvoyé n'auront aucune dépendance de contrôle vis-à-vis d'autres opérations.
AvecOpName
Scope WithOpName( Ty... fragments ) const
Retourner une nouvelle portée.
Toutes les opérations créées dans la portée renvoyée auront des noms de la forme name/StrCat(fragments...)[_suffix]
AvecXlaCluster
Scope WithXlaCluster( const string & xla_cluster ) const
Renvoie une nouvelle portée.
Toutes les opérations créées dans la portée renvoyée auront leur attribut _XlaCluster défini sur xla_cluster .
contrôle_dépendances
const std::vector< Operation > & control_deps() const
graphique
Graph * graph() const
graph_as_shared_ptr
std::shared_ptr< Graph > graph_as_shared_ptr() const
d'accord
bool ok() const
statut
Status status() const
~Portée
~Scope()
fonctions statiques publiques
NewRootScope
Scope NewRootScope()
Retourner une nouvelle portée.
Cela crée un nouveau graphe et toutes les opérations construites dans ce graphe doivent utiliser l'objet retourné comme portée « racine ».