Manages groups of related properties when creating Tensorflow Operations, such as a common name prefix.
A Scope
is a container for common properties applied to TensorFlow Ops. Normal user
code initializes a Scope
and provides it to Operation building classes. For example:
Scope scope = new Scope(graph);
Constant c = Constant.create(scope, 42);
An Operation building class acquires a Scope, and uses it to set properties on the underlying Tensorflow ops. For example:
// An operator class that adds a constant.
public class Constant {
public static Constant create(Scope scope, ...) {
scope.graph().opBuilder(
"Const", scope.makeOpName("Const"))
.setAttr(...)
.build()
...
}
}
Scope hierarchy:
A Scope
provides various with()
methods that create a new scope. The new scope
typically has one property changed while other properties are inherited from the parent scope.
An example using Constant
implemented as before:
Scope root = new Scope(graph);
// The linear subscope will generate names like linear/...
Scope linear = Scope.withSubScope("linear");
// This op name will be "linear/W"
Constant.create(linear.withName("W"), ...);
// This op will be "linear/Const", using the default
// name provided by Constant
Constant.create(linear, ...);
// This op will be "linear/Const_1", using the default
// name provided by Constant and making it unique within
// this scope
Constant.create(linear, ...);
Scope objects are not thread-safe.
Public Constructors
Public Methods
OperationBuilder |
apply(OperationBuilder builder)
Applies device specification and adds each Operand in controlDependencies as a control input to the provided
builder.
|
OperationBuilder |
applyControlDependencies(OperationBuilder builder)
Adds each Operand in controlDependencies as a control input to the provided builder.
|
ExecutionEnvironment |
env()
Returns the execution environment used by this scope.
|
String |
getDeviceString()
Returns device string from the scope.
|
String |
makeOpName(String defaultName)
Create a unique name for an operator, using a provided default if necessary.
|
Scope |
withControlDependencies(Iterable<Op> controls)
Returns a new scope where added operations will have the provided control dependencies.
|
Scope |
withDevice(DeviceSpec deviceSpec)
Return a new scope that uses the provided device specification for an op.
|
Scope |
withName(String opName)
Return a new scope that uses the provided name for an op.
|
Scope |
withNameAsSubScope(String defaultName)
Returns a new scope where added operations will be prefixed by this scope's op name
(set by
withName(String) ), or the given default if it is unset. |
Scope |
withSubScope(String childScopeName)
Returns a new scope where added operations will have the provided name prefix.
|
Inherited Methods
Public Constructors
public Scope (ExecutionEnvironment env)
Create a new top-level scope.
Parameters
env | The execution environment used by the scope. |
---|
Public Methods
public OperationBuilder apply (OperationBuilder builder)
Applies device specification and adds each Operand in controlDependencies as a control input to the provided builder.
Parameters
builder | OperationBuilder to add control inputs and device specification to |
---|
public OperationBuilder applyControlDependencies (OperationBuilder builder)
Adds each Operand in controlDependencies as a control input to the provided builder.
Parameters
builder | OperationBuilder to add control inputs to |
---|
public String getDeviceString ()
Returns device string from the scope.
public String makeOpName (String defaultName)
Create a unique name for an operator, using a provided default if necessary.
This is normally called only by operator building classes.
This method generates a unique name, appropriate for the name scope controlled by this instance. Typical operator building code might look like
scope.env().opBuilder("Const", scope.makeOpName("Const"))...
Note: if you provide a composite operator building class (i.e, a class that creates a set of related operations by calling other operator building code), the provided name will act as a subscope to all underlying operators.
Parameters
defaultName | name for the underlying operator. |
---|
Returns
- unique name for the operator.
Throws
IllegalArgumentException | if the default name is invalid. |
---|
public Scope withControlDependencies (Iterable<Op> controls)
Returns a new scope where added operations will have the provided control dependencies.
Ops created with this scope will have a control edge from each of the provided controls. All other properties are inherited from the current scope.
Parameters
controls | control dependencies for ops created with the returned scope |
---|
Returns
- a new scope with the provided control dependencies
public Scope withDevice (DeviceSpec deviceSpec)
Return a new scope that uses the provided device specification for an op.
Operations created within this scope will place the created operations on the device(s) matching the provided spec.
Parameters
deviceSpec | device specification for an operator in the returned scope |
---|
Returns
- a new Scope that uses opName for operations.
public Scope withName (String opName)
Return a new scope that uses the provided name for an op.
Operations created within this scope will have a name of the form name/opName[_suffix]
. This lets you name a specific operator more meaningfully.
Names must match the regular expression [A-Za-z0-9.][A-Za-z0-9_.\-]*
Parameters
opName | name for an operator in the returned scope |
---|
Returns
- a new Scope that uses opName for operations.
Throws
IllegalArgumentException | if the name is invalid |
---|
public Scope withNameAsSubScope (String defaultName)
Returns a new scope where added operations will be prefixed by this scope's op name
(set by withName(String)
), or the given default if it is unset. This is intended to be used for
composite ops.
Ops created with this scope will have name/opName/
as the prefix. The actual
name will be unique in the returned scope. All other properties are inherited from the current
scope.
The default child scope name must match the regular expression [A-Za-z0-9.][A-Za-z0-9_.\-]*
Parameters
defaultName | name of the sub scope if this scope's name hasn't been set. |
---|
Returns
- a new subscope
Throws
IllegalArgumentException | if the name is invalid |
---|
public Scope withSubScope (String childScopeName)
Returns a new scope where added operations will have the provided name prefix.
Ops created with this scope will have name/childScopeName/
as the prefix. The actual
name will be unique in the returned scope. All other properties are inherited from the current scope.
The child scope name must match the regular expression [A-Za-z0-9.][A-Za-z0-9_.\-]*
Parameters
childScopeName | name for the new child scope |
---|
Returns
- a new subscope
Throws
IllegalArgumentException | if the name is invalid |
---|