텐서플로우::스코프
#include <scope.h> Scope 객체는 공통 이름 접두사와 같은 동일한 속성을 가진 관련 TensorFlow 연산 집합을 나타냅니다.
요약
Scope 객체는 TensorFlow Op 속성을 담는 컨테이너입니다. Op 생성자는 필수 첫 번째 인수로 Scope 객체를 받으며, 생성된 Op는 해당 객체의 속성을 상속받습니다.
간단한 예:
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()) { ... }
범위 계층 구조:
Scope 클래스는 새로운 스코프를 생성하는 다양한 With<> 함수를 제공합니다. 새 스코프는 일반적으로 하나의 속성만 변경되고 나머지 속성은 부모 스코프에서 상속됩니다. NewSubScope(name) 메서드는 스코프 내에서 생성되는 연산(op) 이름의 접두사에 name 추가하고, WithOpName() 메서드는 접미사를 변경합니다. 접미사를 변경하지 않으면 기본값은 연산의 유형입니다.
이름 예시:
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"
범위 수명:
Scope::NewRootScope를 호출하여 새로운 스코프를 생성합니다. 이 메서드는 해당 스코프를 직접 또는 간접적으로 상속받는 모든 자식 스코프에서 공유되는 몇 가지 리소스를 생성합니다. 예를 들어, 새 스코프는 새로운 Graph 객체를 생성하며, 새 스코프 또는 해당 자식 스코프의 Op 생성자가 사용될 때 이 Graph 객체에 연산이 추가됩니다. 또한 새 스코프는 Status 객체를 가지며, 이 객체는 모든 자식 스코프의 Op 생성자 함수에서 오류를 나타내는 데 사용됩니다. Op 생성자 함수는 연산을 생성하기 전에 ok() 메서드를 호출하여 스코프의 상태를 확인해야 합니다.
나사산 안전:
Scope 객체는 스레드로부터 안전하지 않습니다. 스레드는 동일한 Scope 객체에 대해 op 생성자 함수를 동시에 호출할 수 없습니다.
생성자와 소멸자 | |
|---|---|
Scope (const Scope & other) | |
~Scope () |
공공 기능 | |
|---|---|
ClearColocation () const | 모든 공동 배치 제약 조건을 해제합니다. |
ColocateWith (const Operation & op) const | 새로운 범위를 반환합니다. |
ColocateWith (const Output & out) const | 위의 기능을 위한 편의 기능입니다. |
ExitOnError () const | 새로운 범위를 반환합니다. |
GetCompositeOpScopes (const string & composite_op_name) const | |
GetUniqueNameForOp (const string & default_name) const | string 고유한 이름을 반환하고, 작업 이름이 지정되지 않은 경우 default_name을 사용합니다. |
NewSubScope (const string & child_scope_name) const | 새로운 범위를 반환합니다. |
ToGraphDef (GraphDef *gdef) const | status()가 Status::OK()이면 이 스코프에 저장된 Graph 객체를 GraphDef 프로토타입으로 변환하고 Status::OK()를 반환합니다. |
UpdateStatus (const Status s) const | void 이 범위의 상태를 업데이트하세요. |
WithAssignedDevice (const string & assigned_device) const | 새로운 스코프를 반환합니다. |
WithControlDependencies (const gtl::ArraySlice< Operation > & control_deps) const | 새로운 범위를 반환합니다. |
WithControlDependencies (const Output & control_dep) const | 위와 동일하지만, control_dep 출력을 생성하는 작업에 대한 제어 종속성을 추가하는 것이 편리합니다. |
WithDevice (const string & device) const | 새로운 범위를 반환합니다. |
WithKernelLabel (const string & kernel_label) const | 새로운 범위를 반환합니다. |
WithNoControlDependencies () const | 새로운 범위를 반환합니다. |
WithOpName (Ty... fragments) const | 새로운 범위를 반환합니다. |
WithXlaCluster (const string & xla_cluster) const | 새로운 스코프를 반환합니다. |
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 | |
공개 정적 함수 | |
|---|---|
NewRootScope () | 새로운 범위를 반환합니다. |
공공 기능
함께 배치
Scope ColocateWith( const Operation & op ) const
새로운 범위를 반환합니다.
반환된 범위 내에서 생성된 모든 연산은 해당 연산이 배치된 장치에 함께 배치됩니다. 참고: 이 함수는 연산의 장치 배치를 제어하기 위한 내부 라이브러리 용도로만 사용하도록 설계되었습니다. 장치 배치 구현 방식은 변경될 수 있으므로 공개적인 사용은 권장하지 않습니다.
ExitOnError
Scope ExitOnError() const
새로운 범위를 반환합니다.
반환된 스코프를 스코프 인수로 받는 연산 생성자 함수는 스코프에 상태를 설정하는 대신 오류가 감지되는 즉시 종료됩니다.
GetCompositeOpScopes
CompositeOpScopes GetCompositeOpScopes( const string & composite_op_name ) const
GetUniqueNameForOp
string GetUniqueNameForOp( const string & default_name ) const
고유한 이름을 반환하고, 작업 이름이 지정되지 않은 경우 default_name을 사용합니다.
새로운 하위 범위
Scope NewSubScope( const string & child_scope_name ) const
새로운 범위를 반환합니다.
이 스코프를 사용하여 생성된 오퍼레이션(Op)은 name/child_scope_name 접두사로 사용합니다. 실제 이름은 현재 스코프 내에서 고유해야 합니다. 다른 모든 속성은 현재 스코프에서 상속됩니다. child_scope_name 비어 있는 경우 슬래시 / 는 생략됩니다.
범위
Scope( const Scope & other )
ToGraphDef
Status ToGraphDef( GraphDef *gdef ) const
status()가 Status::OK()이면 이 스코프에 저장된 Graph 객체를 GraphDef 프로토타입으로 변환하고 Status::OK()를 반환합니다.
그렇지 않으면 GraphDef 변환을 수행하지 않고 오류 상태를 그대로 반환합니다.
상태 업데이트
void UpdateStatus( const Status s ) const
이 범위의 상태를 업데이트하세요.
참고: 상태 객체는 이 범위의 모든 하위 요소에서 공유됩니다. 결과 상태가 Status::OK()가 아니고 이 범위에 exit_on_error_가 설정되어 있으면 이 함수는 LOG(FATAL)을 호출하여 종료됩니다.
할당된 장치 포함
Scope WithAssignedDevice( const string & assigned_device ) const
새로운 스코프를 반환합니다.
반환된 범위 내에서 생성된 모든 작업에는 할당된 장치가 assigned_device 로 설정됩니다.
컨트롤 종속성 포함
Scope WithControlDependencies( const gtl::ArraySlice< Operation > & control_deps ) const
새로운 범위를 반환합니다.
반환된 범위 내에서 생성된 모든 연산은 control_deps 벡터에 있는 연산들의 합집합과 현재 범위의 제어 종속성을 제어 종속성으로 갖게 됩니다.
컨트롤 종속성 포함
Scope WithControlDependencies( const Output & control_dep ) const
위와 동일하지만, control_dep 출력을 생성하는 작업에 대한 제어 종속성을 추가하는 것이 편리합니다.
기기와 함께
Scope WithDevice( const string & device ) const
새로운 범위를 반환합니다.
반환된 범위 내에서 생성된 모든 작업의 device 필드는 'device'로 설정됩니다.
WithKernelLabel
Scope WithKernelLabel( const string & kernel_label ) const
새로운 범위를 반환합니다.
새로운 범위로 생성된 모든 작업에는 '_kernel' 속성 값으로 kernel_label이 지정됩니다.
WithNoControlDependencies
Scope WithNoControlDependencies() const
새로운 범위를 반환합니다.
반환된 범위 내에서 생성된 모든 작업은 다른 작업에 대한 제어 종속성이 없습니다.
WithOpName
Scope WithOpName( Ty... fragments ) const
새로운 범위를 반환합니다.
반환된 범위 내에서 생성된 모든 작업의 이름은 name/StrCat(fragments...)[_suffix] 형식이 됩니다.
Xla클러스터와 함께
Scope WithXlaCluster( const string & xla_cluster ) const
새로운 스코프를 반환합니다.
반환된 범위 내에서 생성된 모든 작업에는 _XlaCluster 속성이 xla_cluster 로 설정됩니다.
제어_디펜스
const std::vector< Operation > & control_deps() const
그래프
Graph * graph() const
그래프를 공유 포인터로
std::shared_ptr< Graph > graph_as_shared_ptr() const
좋아요
bool ok() const
상태
Status status() const
~범위
~Scope()
공개 정적 함수
뉴루트스코프
Scope NewRootScope()
새로운 범위를 반환합니다.
이렇게 하면 새로운 그래프가 생성되고, 이 그래프에서 수행되는 모든 작업은 반환된 객체를 "루트" 범위로 사용해야 합니다.