|
- syntax = "proto3";
-
- package domi.tensorflow;
- option cc_enable_arenas = true;
- option java_outer_classname = "OpDefProtos";
- option java_multiple_files = true;
- option java_package = "org.tensorflow.framework";
-
- import "attr_value.proto";
- import "types.proto";
-
- // Defines an operation. A NodeDef in a GraphDef specifies an Op by
- // using the "op" field which should match the name of a OpDef.
- // LINT.IfChange
- message OpDef {
- // Op names starting with an underscore are reserved for internal use.
- // Names should be CamelCase and match the regexp "[A-Z][a-zA-Z0-9_]*".
- string name = 1;
-
- // For describing inputs and outputs.
- message ArgDef {
- // Name for the input/output. Should match the regexp "[a-z][a-z0-9_]*".
- string name = 1;
-
- // Human readable description.
- string description = 2;
-
- // Describes the type of one or more tensors that are accepted/produced
- // by this input/output arg. The only legal combinations are:
- // * For a single tensor: either the "type" field is set or the
- // "type_attr" field is set to the name of an attr with type "type".
- // * For a sequence of tensors with the same type: the "number_attr"
- // field will be set to the name of an attr with type "int", and
- // either the "type" or "type_attr" field will be set as for
- // single tensors.
- // * For a sequence of tensors, the "type_list_attr" field will be set
- // to the name of an attr with type "list(type)".
- DataType type = 3;
- string type_attr = 4; // if specified, attr must have type "type"
- string number_attr = 5; // if specified, attr must have type "int"
- // If specified, attr must have type "list(type)", and none of
- // type, type_attr, and number_attr may be specified.
- string type_list_attr = 6;
-
- // For inputs: if true, the inputs are required to be refs.
- // By default, inputs can be either refs or non-refs.
- // For outputs: if true, outputs are refs, otherwise they are not.
- bool is_ref = 16;
- };
-
- // Description of the input(s).
- repeated ArgDef input_arg = 2;
-
- // Description of the output(s).
- repeated ArgDef output_arg = 3;
-
- // Description of the graph-construction-time configuration of this
- // Op. That is to say, this describes the attr fields that will
- // be specified in the NodeDef.
- message AttrDef {
- // A descriptive name for the argument. May be used, e.g. by the
- // Python client, as a keyword argument name, and so should match
- // the regexp "[a-z][a-z0-9_]+".
- string name = 1;
-
- // One of the type names from attr_value.proto ("string", "list(string)",
- // "int", etc.).
- string type = 2;
-
- // A reasonable default for this attribute if the user does not supply
- // a value. If not specified, the user must supply a value.
- AttrValue default_value = 3;
-
- // Human-readable description.
- string description = 4;
-
-
- // --- Constraints ---
- // These constraints are only in effect if specified. Default is no
- // constraints.
-
- // For type == "int", this is a minimum value. For "list(___)"
- // types, this is the minimum length.
- bool has_minimum = 5;
- int64 minimum = 6;
-
- // The set of allowed values. Has type that is the "list" version
- // of the "type" field above (uses the "list" field of AttrValue).
- // If type == "type" or "list(type)" above, then the "type" field
- // of "allowed_values.list" has the set of allowed DataTypes.
- // If type == "string" or "list(string)", then the "s" field of
- // "allowed_values.list" has the set of allowed strings.
- AttrValue allowed_values = 7;
- }
- repeated AttrDef attr = 4;
-
- // Optional deprecation based on GraphDef versions.
- OpDeprecation deprecation = 8;
-
- // One-line human-readable description of what the Op does.
- string summary = 5;
-
- // Additional, longer human-readable description of what the Op does.
- string description = 6;
-
- // -------------------------------------------------------------------------
- // Which optimizations this operation can participate in.
-
- // True if the operation is commutative ("op(a,b) == op(b,a)" for all inputs)
- bool is_commutative = 18;
-
- // If is_aggregate is true, then this operation accepts N >= 2
- // inputs and produces 1 output all of the same type. Should be
- // associative and commutative, and produce output with the same
- // shape as the input. The optimizer may replace an aggregate op
- // taking input from multiple devices with a tree of aggregate ops
- // that aggregate locally within each device (and possibly within
- // groups of nearby devices) before communicating.
- bool is_aggregate = 16; // for things like add
-
- // Other optimizations go here, like
- // can_alias_input, rewrite_when_output_unused, partitioning_strategy, etc.
-
- // -------------------------------------------------------------------------
- // Optimization constraints.
-
- // Ops are marked as stateful if their behavior depends on some state beyond
- // their input tensors (e.g. variable reading op) or if they have
- // a side-effect (e.g. printing or asserting ops). Equivalently, stateless ops
- // must always produce the same output for the same input and have
- // no side-effects.
- //
- // By default Ops may be moved between devices. Stateful ops should
- // either not be moved, or should only be moved if that state can also
- // be moved (e.g. via some sort of save / restore).
- // Stateful ops are guaranteed to never be optimized away by Common
- // Subexpression Elimination (CSE).
- bool is_stateful = 17; // for things like variables, queue
-
- // -------------------------------------------------------------------------
- // Non-standard options.
-
- // By default, all inputs to an Op must be initialized Tensors. Ops
- // that may initialize tensors for the first time should set this
- // field to true, to allow the Op to take an uninitialized Tensor as
- // input.
- bool allows_uninitialized_input = 19; // for Assign, etc.
- };
- // LINT.ThenChange(
- // https://www.tensorflow.org/code/tensorflow/core/framework/op_def_util.cc)
-
- // Information about version-dependent deprecation of an op
- message OpDeprecation {
- // First GraphDef version at which the op is disallowed.
- int32 version = 1;
-
- // Explanation of why it was deprecated and what to use instead.
- string explanation = 2;
- };
-
- // A collection of OpDefs
- message OpList {
- repeated OpDef op = 1;
- };
|