przepływ tensorowy:: Zakres
#include <scope.h>
Obiekt Scope
reprezentuje zestaw powiązanych operacji TensorFlow, które mają te same właściwości, takie jak przedrostek nazwy pospolitej.
Streszczenie
Obiekt Scope jest kontenerem dla właściwości TensorFlow Op. Konstruktory op otrzymują obiekt Scope jako obowiązkowy pierwszy argument, a skonstruowany op przejmuje właściwości obiektu.
Prosty przykład:
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()) { ... }
Hierarchia zakresu :
Klasa Scope udostępnia różne funkcje With<>, które tworzą nowy zakres. W nowym zakresie zazwyczaj zmieniana jest jedna właściwość, podczas gdy inne właściwości są dziedziczone z zakresu nadrzędnego. Metoda NewSubScope(name) dołącza name
do przedrostka nazw operacji utworzonych w zakresie, a WithOpName() zmienia sufiks, który w przeciwnym razie byłby domyślnym typem operacji.
Przykłady nazw:
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"
Żywotność zakresu :
Nowy zakres jest tworzony przez wywołanie Scope::NewRootScope . Spowoduje to utworzenie zasobów współdzielonych przez wszystkie zakresy podrzędne, które dziedziczą z tego zakresu, bezpośrednio lub przechodnio. Na przykład nowy zakres tworzy nowy obiekt Graph, do którego dodawane są operacje, gdy nowy zakres lub jego elementy podrzędne są używane przez konstruktora Op. Nowy zakres posiada również obiekt Status, który będzie używany do wskazywania błędów przez funkcje konstruktora op wywoływane w dowolnym zakresie podrzędnym. Funkcje konstruktora op muszą sprawdzić status zakresu, wywołując metodę ok() przed przystąpieniem do konstruowania op.
Bezpieczeństwo wątku:
Obiekt Scope
NIE jest bezpieczny dla wątków. Wątki nie mogą jednocześnie wywoływać funkcji konstruktora op na tym samym obiekcie Scope
.
Konstruktory i destruktory | |
---|---|
Scope (const Scope & other) | |
~Scope () |
Funkcje publiczne | |
---|---|
ClearColocation () const | Usuń wszystkie ograniczenia kolokacji. |
ColocateWith (const Operation & op) const | Zwróć nowy zakres. |
ColocateWith (const Output & out) const | Funkcja wygodna dla powyższych. |
ExitOnError () const | Zwróć nowy zakres. |
GetCompositeOpScopes (const string & composite_op_name) const | |
GetUniqueNameForOp (const string & default_name) const | string Zwróć unikalną nazwę, używając nazwy_domyślnej, jeśli nazwa operacji nie została określona. |
NewSubScope (const string & child_scope_name) const | Zwróć nowy zakres. |
ToGraphDef (GraphDef *gdef) const | Status Jeśli status() to Status::OK(), przekonwertuj obiekt Graph przechowywany w tym zakresie na proto GraphDef i zwróć Status::OK(). |
UpdateStatus (const Status & s) const | void Zaktualizuj stan tego zakresu. |
WithAssignedDevice (const string & assigned_device) const | Zwraca nowy zakres. |
WithControlDependencies (const gtl::ArraySlice< Operation > & control_deps) const | Zwróć nowy zakres. |
WithControlDependencies (const Output & control_dep) const | To samo co powyżej, ale wygodnie jest dodać zależność sterowania od operacji generującej wynik control_dep. |
WithDevice (const string & device) const | Zwróć nowy zakres. |
WithKernelLabel (const string & kernel_label) const | Zwróć nowy zakres. |
WithNoControlDependencies () const | Zwróć nowy zakres. |
WithOpName (Ty... fragments) const | Zwróć nowy zakres. |
WithXlaCluster (const string & xla_cluster) const | Zwraca nowy zakres. |
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 | Status |
Publiczne funkcje statyczne | |
---|---|
NewRootScope () | Zwróć nowy zakres. |
Funkcje publiczne
KolokujZ
Scope ColocateWith( const Operation & op ) const
Zwróć nowy zakres.
Wszystkie operacje utworzone w zwróconym zakresie będą zlokalizowane na urządzeniu, na którym znajduje się operacja. UWAGA: Ta funkcja jest przeznaczona do wykorzystania bibliotek wewnętrznych wyłącznie do kontrolowania rozmieszczenia operacji na urządzeniach. Nie zaleca się użytku publicznego, ponieważ sposób rozmieszczenia urządzeń może ulec zmianie.
Wyjdź przy błędzie
Scope ExitOnError() const
Zwróć nowy zakres.
Funkcje konstruktora op, przyjmując zwrócony zakres jako argument zakresu, zostaną zakończone natychmiast po wykryciu błędu, zamiast ustawiać status zakresu.
Pobierz CompositeOpScopes
CompositeOpScopes GetCompositeOpScopes( const string & composite_op_name ) const
GetUniqueNameForOp
string GetUniqueNameForOp( const string & default_name ) const
Zwróć unikalną nazwę, używając nazwy_domyślnej, jeśli nazwa operacji nie została określona.
Nowy podzakres
Scope NewSubScope( const string & child_scope_name ) const
Zwróć nowy zakres.
Operacje utworzone przy użyciu tego zakresu będą miały name/child_scope_name
podrzędnego. Rzeczywista nazwa będzie unikalna w bieżącym zakresie. Wszystkie pozostałe właściwości są dziedziczone z bieżącego zakresu. Jeśli child_scope_name
jest pusta, znak /
jest pomijany.
Zakres
Scope( const Scope & other )
DoWykresuDef
Status ToGraphDef( GraphDef *gdef ) const
Jeśli status() to Status::OK(), przekonwertuj obiekt Graph przechowywany w tym zakresie na proto GraphDef i zwróć Status::OK().
W przeciwnym razie zwróć status błędu bez wykonywania konwersji GraphDef.
Aktualizuj stan
void UpdateStatus( const Status & s ) const
Zaktualizuj stan tego zakresu.
Uwaga: Obiekt stanu jest współdzielony przez wszystkie elementy podrzędne tego zakresu. Jeśli wynikowy status nie jest Status::OK() i w tym zakresie ustawiono exit_on_error_, funkcja kończy się poprzez wywołanie LOG(FATAL).
Z przypisanym urządzeniem
Scope WithAssignedDevice( const string & assigned_device ) const
Zwraca nowy zakres.
Wszystkie operacje utworzone w zwróconym zakresie będą miały przypisane urządzenie ustawione na assigned_device
.
Z zależnościami kontrolnymi
Scope WithControlDependencies( const gtl::ArraySlice< Operation > & control_deps ) const
Zwróć nowy zakres.
Wszystkie operacje utworzone w zwróconym zakresie będą miały jako zależności kontrolne sumę operacji w wektorze control_deps i zależności kontrolne bieżącego zakresu.
Z zależnościami kontrolnymi
Scope WithControlDependencies( const Output & control_dep ) const
To samo co powyżej, ale wygodnie jest dodać zależność sterowania od operacji generującej wynik control_dep.
Z urządzeniem
Scope WithDevice( const string & device ) const
Zwróć nowy zakres.
Wszystkie operacje utworzone w zwróconym zakresie będą miały pole urządzenia ustawione na „urządzenie”.
Z KernelLabel
Scope WithKernelLabel( const string & kernel_label ) const
Zwróć nowy zakres.
Wszystkie operacje utworzone przy użyciu nowego zakresu będą miały kernel_label jako wartość atrybutu „_kernel”;
Bez zależności kontrolnych
Scope WithNoControlDependencies() const
Zwróć nowy zakres.
Wszystkie operacje utworzone w zwróconym zakresie nie będą miały zależności kontrolnych od innych operacji.
ZOpName
Scope WithOpName( Ty... fragments ) const
Zwróć nowy zakres.
Wszystkie operacje utworzone w zwróconym zakresie będą miały nazwy w postaci name/StrCat(fragments...)[_suffix]
ZXlaCluster
Scope WithXlaCluster( const string & xla_cluster ) const
Zwraca nowy zakres.
Wszystkie operacje utworzone w zwróconym zakresie będą miały atrybut _XlaCluster ustawiony na xla_cluster
.
kontrola_deps
const std::vector< Operation > & control_deps() const
wykres
Graph * graph() const
graph_as_shared_ptr
std::shared_ptr< Graph > graph_as_shared_ptr() const
OK
bool ok() const
status
Status status() const
~Zakres
~Scope()
Publiczne funkcje statyczne
NowyRootScope
Scope NewRootScope()
Zwróć nowy zakres.
Spowoduje to utworzenie nowego wykresu i wszystkie operacje wykonane na tym wykresie powinny używać zwróconego obiektu jako zakresu „głównego”.