flujo tensor:: Alcance
#include <scope.h>
Un objeto Scope
representa un conjunto de operaciones de TensorFlow relacionadas que tienen las mismas propiedades, como un prefijo de nombre común.
Resumen
Un objeto Scope es un contenedor de propiedades de TensorFlow Op. Los constructores de operaciones obtienen un objeto Scope como primer argumento obligatorio y la operación construida adquiere las propiedades del objeto.
Un ejemplo sencillo:
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()) { ... }
Jerarquía de alcance :
La clase Scope proporciona varias funciones With<> que crean un nuevo alcance. En el nuevo ámbito normalmente se cambia una propiedad, mientras que otras propiedades se heredan del ámbito principal. El método NewSubScope(name) agrega name
al prefijo de los nombres de las operaciones creadas dentro del alcance, y WithOpName() cambia el sufijo que, de lo contrario, se establece de forma predeterminada en el tipo de operación.
Ejemplos de nombres:
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"
Vida útil del alcance :
Se crea un nuevo ámbito llamando a Scope::NewRootScope . Esto crea algunos recursos que son compartidos por todos los ámbitos secundarios que heredan de este ámbito, directa o transitivamente. Por ejemplo, un nuevo alcance crea un nuevo objeto Graph al que se agregan operaciones cuando un constructor de operaciones utiliza el nuevo alcance o sus hijos. El nuevo ámbito también tiene un objeto Estado que se utilizará para indicar errores por las funciones del Op-constructor llamadas en cualquier ámbito secundario. Las funciones del Op-constructor deben verificar el estado del alcance llamando al método ok() antes de proceder a construir la operación.
Seguridad del hilo:
Un objeto Scope
NO es seguro para subprocesos. Los subprocesos no pueden llamar simultáneamente a funciones del constructor de operaciones en el mismo objeto Scope
.
Constructores y destructores | |
---|---|
Scope (const Scope & other) | |
~Scope () |
Funciones públicas | |
---|---|
ClearColocation () const | Borre todas las restricciones de colocación. |
ColocateWith (const Operation & op) const | Devuelve un nuevo alcance. |
ColocateWith (const Output & out) const | Función de conveniencia para lo anterior. |
ExitOnError () const | Devuelve un nuevo alcance. |
GetCompositeOpScopes (const string & composite_op_name) const | |
GetUniqueNameForOp (const string & default_name) const | string Devuelve un nombre único, utilizando default_name si no se ha especificado un nombre de operación. |
NewSubScope (const string & child_scope_name) const | Devuelve un nuevo alcance. |
ToGraphDef (GraphDef *gdef) const | Si status() es Status::OK(), convierta el objeto Graph almacenado en este alcance en un proto GraphDef y devuelva Status::OK(). |
UpdateStatus (const Status & s) const | void Actualice el estado en este ámbito. |
WithAssignedDevice (const string & assigned_device) const | Devuelve un nuevo alcance. |
WithControlDependencies (const gtl::ArraySlice< Operation > & control_deps) const | Devuelve un nuevo alcance. |
WithControlDependencies (const Output & control_dep) const | Igual que el anterior, pero es conveniente agregar dependencia de control en la operación que produce la salida control_dep. |
WithDevice (const string & device) const | Devuelve un nuevo alcance. |
WithKernelLabel (const string & kernel_label) const | Devuelve un nuevo alcance. |
WithNoControlDependencies () const | Devuelve un nuevo alcance. |
WithOpName (Ty... fragments) const | Devuelve un nuevo alcance. |
WithXlaCluster (const string & xla_cluster) const | Devuelve un nuevo alcance. |
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 |
Funciones estáticas públicas | |
---|---|
NewRootScope () | Devuelve un nuevo alcance. |
Funciones públicas
Colocar con
Scope ColocateWith( const Operation & op ) const
Devuelve un nuevo alcance.
Todas las operaciones creadas dentro del alcance devuelto se ubicarán en el dispositivo donde se coloca la operación. NOTA: Esta función está diseñada para usarse en bibliotecas internas solo para controlar la ubicación de operaciones en los dispositivos. No se recomienda el uso público porque la implementación de la ubicación de los dispositivos está sujeta a cambios.
Colocar con
Scope ColocateWith( const Output & out ) const
Función de conveniencia para lo anterior.
Salir en error
Scope ExitOnError() const
Devuelve un nuevo alcance.
Las funciones del constructor de operaciones que toman el alcance devuelto como argumento de alcance saldrán tan pronto como se detecte un error, en lugar de establecer el estado en el alcance.
Obtener CompositeOpScopes
CompositeOpScopes GetCompositeOpScopes( const string & composite_op_name ) const
Obtener nombre único para Op
string GetUniqueNameForOp( const string & default_name ) const
Devuelve un nombre único, utilizando default_name si no se ha especificado un nombre de operación.
NuevoSubScope
Scope NewSubScope( const string & child_scope_name ) const
Devuelve un nuevo alcance.
Las operaciones creadas con este alcance tendrán name/child_scope_name
como prefijo. El nombre real será único en el ámbito actual. Todas las demás propiedades se heredan del ámbito actual. Si child_scope_name
está vacío, se omite /
.
Alcance
Scope( const Scope & other )
ToGraphDef
Status ToGraphDef( GraphDef *gdef ) const
Si status() es Status::OK(), convierta el objeto Graph almacenado en este alcance en un proto GraphDef y devuelva Status::OK().
De lo contrario, devuelva el estado de error tal cual sin realizar la conversión GraphDef.
Estado de actualización
void UpdateStatus( const Status & s ) const
Actualice el estado en este alcance.
Nota: El objeto de estado se comparte entre todos los elementos secundarios de este ámbito. Si el estado resultante no es Status::OK() y exit_on_error_ está configurado en este ámbito, esta función sale llamando a LOG(FATAL).
Con dispositivo asignado
Scope WithAssignedDevice( const string & assigned_device ) const
Devuelve un nuevo alcance.
Todas las operaciones creadas dentro del alcance devuelto tendrán su dispositivo asignado configurado en assigned_device
.
Con dependencias de control
Scope WithControlDependencies( const gtl::ArraySlice< Operation > & control_deps ) const
Devuelve un nuevo alcance.
Todas las operaciones creadas dentro del alcance devuelto tendrán como dependencias de control la unión de operaciones en el vector control_deps y las dependencias de control del alcance actual.
Con dependencias de control
Scope WithControlDependencies( const Output & control_dep ) const
Igual que el anterior, pero es conveniente agregar dependencia de control en la operación que produce la salida control_dep.
Con dispositivo
Scope WithDevice( const string & device ) const
Devuelve un nuevo alcance.
Todas las operaciones creadas dentro del alcance devuelto tendrán el campo del dispositivo configurado en "dispositivo".
ConKernelLabel
Scope WithKernelLabel( const string & kernel_label ) const
Devuelve un nuevo alcance.
Todas las operaciones creadas con el nuevo alcance tendrán kernel_label como valor para su atributo '_kernel';
Sin dependencias de control
Scope WithNoControlDependencies() const
Devuelve un nuevo alcance.
Todas las operaciones creadas dentro del alcance devuelto no tendrán dependencias de control de otras operaciones.
ConNombreOp
Scope WithOpName( Ty... fragments ) const
Devuelve un nuevo alcance.
Todas las operaciones creadas dentro del alcance devuelto tendrán nombres del formato name/StrCat(fragments...)[_suffix]
ConXlaCluster
Scope WithXlaCluster( const string & xla_cluster ) const
Devuelve un nuevo alcance.
Todas las operaciones creadas dentro del alcance devuelto tendrán su atributo _XlaCluster establecido en xla_cluster
.
controles_deps
const std::vector< Operation > & control_deps() const
gráfico
Graph * graph() const
gráfico_as_shared_ptr
std::shared_ptr< Graph > graph_as_shared_ptr() const
OK
bool ok() const
estado
Status status() const
~ Alcance
~Scope()
Funciones estáticas públicas
Nuevo alcance raíz
Scope NewRootScope()
Devuelve un nuevo alcance.
Esto crea un nuevo gráfico y todas las operaciones construidas en este gráfico deben utilizar el objeto devuelto como alcance "raíz".