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 prefiks 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 skonstruowana op uzyskuje właściwości w obiekcie.
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. Nowy zakres ma zazwyczaj jedną zmienioną właściwość, podczas gdy inne właściwości są dziedziczone z zakresu nadrzędnego. Metoda NewSubScope(name) dodaje name
do prefiksu nazw operacji utworzonych w zakresie, a WithOpName() zmienia sufiks, który w przeciwnym razie jest 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 . Powoduje to utworzenie niektórych zasobów, które są współużytkowane przez wszystkie zakresy podrzędne, które dziedziczą z tego zakresu, bezpośrednio lub przechodnie. Na przykład nowy zakres tworzy nowy obiekt Graph, do którego dodawane są operacje, gdy nowy zakres lub jego elementy potomne są używane przez konstruktor Op. Nowy zakres zawiera również obiekt Status , który będzie używany do wskazywania błędów przez funkcje Op-constructor 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 gwintu:
Obiekt Scope
NIE jest bezpieczny dla wątków. Wątki nie mogą jednocześnie wywoływać funkcji konstruktora op w tym samym obiekcie Scope
.
Konstruktory i destruktory | |
---|---|
Scope (const Scope & other) | |
~Scope () |
Funkcje publiczne | |
---|---|
ClearColocation () const | Usuń wszystkie ograniczenia dotyczące kolokacji. |
ColocateWith (const Operation & op) const | Zwróć nowy zakres. |
ColocateWith (const Output & out) const | Funkcja wygody 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 default_name, jeśli nazwa operacji nie została określona. |
NewSubScope (const string & child_scope_name) const | Zwróć nowy zakres. |
ToGraphDef (GraphDef *gdef) const | Jeśli status() jest Status::OK(), przekonwertuj obiekt Graph przechowywany w tym zakresie na proto GraphDef i zwróć Status::OK(). |
UpdateStatus (const Status s) const | void Zaktualizuj stan w tym zakresie. |
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 | Tak samo jak powyżej, ale wygodnie jest dodać zależność sterowania od operacji wytwarzającej dane wyjściowe 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 |
Publiczne funkcje statyczne | |
---|---|
NewRootScope () | Zwróć nowy zakres. |
Funkcje publiczne
ColocateWith
Scope ColocateWith( const Operation & op ) const
Zwróć nowy zakres.
Wszystkie operacje utworzone w zwróconym zakresie zostaną umieszczone na urządzeniu, na którym znajduje się operacja. UWAGA: Ta funkcja jest przeznaczona do używania wewnętrznych bibliotek tylko do kontrolowania umieszczania operacji na urządzeniach. Nie zachęca się do użytku publicznego, ponieważ implementacja rozmieszczenia urządzeń może ulec zmianie.
Błąd wyjścia
Scope ExitOnError() const
Zwróć nowy zakres.
Funkcje konstruktora op przyjmujące zwrócony zakres jako argument zakresu zostaną zakończone, gdy tylko zostanie wykryty błąd, zamiast ustawiać status zakresu.
GetCompositeOpScopes
CompositeOpScopes GetCompositeOpScopes( const string & composite_op_name ) const
GetUniqueNameForOp
string GetUniqueNameForOp( const string & default_name ) const
Zwróć unikalną nazwę, używając default_name, jeśli nazwa operacji nie została określona.
Nowy podzakres
Scope NewSubScope( const string & child_scope_name ) const
Zwróć nowy zakres.
Operacje utworzone w tym zakresie będą miały prefiks name/child_scope_name
. Rzeczywista nazwa będzie unikalna w bieżącym zakresie. Wszystkie inne właściwości są dziedziczone z bieżącego zakresu. Jeśli child_scope_name
jest pusta, /
jest usuwany.
Zakres
Scope( const Scope & other )
ToGraphDef
Status ToGraphDef( GraphDef *gdef ) const
Jeśli status() jest Status::OK(), przekonwertuj obiekt Graph przechowywany w tym zakresie na proto GraphDef i zwróć Status::OK().
W przeciwnym razie zwróć stan błędu bez wykonywania konwersji GraphDef.
Status aktualizacji
void UpdateStatus( const Status s ) const
Zaktualizuj stan w tym zakresie.
Uwaga: Obiekt statusu jest współużytkowany przez wszystkie elementy podrzędne tego zakresu. Jeśli wynikowy status nie jest Status::OK() i exit_on_error_ jest ustawione w tym zakresie, funkcja kończy działanie przez 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 assigned_device
.
Z zależnościami sterowania
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 unię operacji w wektorze control_deps i zależności kontrolne bieżącego zakresu.
Z zależnościami sterowania
Scope WithControlDependencies( const Output & control_dep ) const
Tak samo jak powyżej, ale wygodnie jest dodać zależność sterowania od operacji wytwarzającej dane wyjściowe control_dep.
ZUrzą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 etykietą jądra
Scope WithKernelLabel( const string & kernel_label ) const
Zwróć nowy zakres.
Wszystkie operacje utworzone w nowym zakresie 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 postaci name/StrCat(fragments...)[_suffix]
ZXlaClusterem
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
.
control_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
Nowy zakres główny
Scope NewRootScope()
Zwróć nowy zakres.
Spowoduje to utworzenie nowego grafu i wszystkie operacje konstruowane na tym grafie powinny używać zwróconego obiektu jako zakresu „root”.