Files
2019-01-02 17:04:10 -05:00

1338 lines
47 KiB
C++

// This file is MACHINE GENERATED! Do not edit.
#ifndef TENSORFLOW_CC_OPS_STATE_OPS_H_
#define TENSORFLOW_CC_OPS_STATE_OPS_H_
// This file is MACHINE GENERATED! Do not edit.
#include "tensorflow/cc/framework/ops.h"
#include "tensorflow/cc/framework/scope.h"
#include "tensorflow/core/framework/tensor.h"
#include "tensorflow/core/framework/tensor_shape.h"
#include "tensorflow/core/framework/types.h"
#include "tensorflow/core/lib/gtl/array_slice.h"
namespace tensorflow {
namespace ops {
/// @defgroup state_ops State Ops
/// @{
/// Update 'ref' by assigning 'value' to it.
///
/// This operation outputs "ref" after the assignment is done.
/// This makes it easier to chain operations that need to use the reset value.
///
/// Arguments:
/// * scope: A Scope object
/// * ref: Should be from a `Variable` node. May be uninitialized.
/// * value: The value to be assigned to the variable.
///
/// Optional attributes (see `Attrs`):
/// * validate_shape: If true, the operation will validate that the shape
/// of 'value' matches the shape of the Tensor being assigned to. If false,
/// 'ref' will take on the shape of 'value'.
/// * use_locking: If True, the assignment will be protected by a lock;
/// otherwise the behavior is undefined, but may exhibit less contention.
///
/// Returns:
/// * `Output`: = Same as "ref". Returned as a convenience for operations that want
/// to use the new value after the variable has been reset.
class Assign {
public:
/// Optional attribute setters for Assign
struct Attrs {
/// If true, the operation will validate that the shape
/// of 'value' matches the shape of the Tensor being assigned to. If false,
/// 'ref' will take on the shape of 'value'.
///
/// Defaults to true
TF_MUST_USE_RESULT Attrs ValidateShape(bool x) {
Attrs ret = *this;
ret.validate_shape_ = x;
return ret;
}
/// If True, the assignment will be protected by a lock;
/// otherwise the behavior is undefined, but may exhibit less contention.
///
/// Defaults to true
TF_MUST_USE_RESULT Attrs UseLocking(bool x) {
Attrs ret = *this;
ret.use_locking_ = x;
return ret;
}
bool validate_shape_ = true;
bool use_locking_ = true;
};
Assign(const ::tensorflow::Scope& scope, ::tensorflow::Input ref,
::tensorflow::Input value);
Assign(const ::tensorflow::Scope& scope, ::tensorflow::Input ref,
::tensorflow::Input value, const Assign::Attrs& attrs);
operator ::tensorflow::Output() const { return output_ref; }
operator ::tensorflow::Input() const { return output_ref; }
::tensorflow::Node* node() const { return output_ref.node(); }
static Attrs ValidateShape(bool x) {
return Attrs().ValidateShape(x);
}
static Attrs UseLocking(bool x) {
return Attrs().UseLocking(x);
}
Operation operation;
::tensorflow::Output output_ref;
};
/// Update 'ref' by adding 'value' to it.
///
/// This operation outputs "ref" after the update is done.
/// This makes it easier to chain operations that need to use the reset value.
///
/// Arguments:
/// * scope: A Scope object
/// * ref: Should be from a `Variable` node.
/// * value: The value to be added to the variable.
///
/// Optional attributes (see `Attrs`):
/// * use_locking: If True, the addition will be protected by a lock;
/// otherwise the behavior is undefined, but may exhibit less contention.
///
/// Returns:
/// * `Output`: = Same as "ref". Returned as a convenience for operations that want
/// to use the new value after the variable has been updated.
class AssignAdd {
public:
/// Optional attribute setters for AssignAdd
struct Attrs {
/// If True, the addition will be protected by a lock;
/// otherwise the behavior is undefined, but may exhibit less contention.
///
/// Defaults to false
TF_MUST_USE_RESULT Attrs UseLocking(bool x) {
Attrs ret = *this;
ret.use_locking_ = x;
return ret;
}
bool use_locking_ = false;
};
AssignAdd(const ::tensorflow::Scope& scope, ::tensorflow::Input ref,
::tensorflow::Input value);
AssignAdd(const ::tensorflow::Scope& scope, ::tensorflow::Input ref,
::tensorflow::Input value, const AssignAdd::Attrs& attrs);
operator ::tensorflow::Output() const { return output_ref; }
operator ::tensorflow::Input() const { return output_ref; }
::tensorflow::Node* node() const { return output_ref.node(); }
static Attrs UseLocking(bool x) {
return Attrs().UseLocking(x);
}
Operation operation;
::tensorflow::Output output_ref;
};
/// Update 'ref' by subtracting 'value' from it.
///
/// This operation outputs "ref" after the update is done.
/// This makes it easier to chain operations that need to use the reset value.
///
/// Arguments:
/// * scope: A Scope object
/// * ref: Should be from a `Variable` node.
/// * value: The value to be subtracted to the variable.
///
/// Optional attributes (see `Attrs`):
/// * use_locking: If True, the subtraction will be protected by a lock;
/// otherwise the behavior is undefined, but may exhibit less contention.
///
/// Returns:
/// * `Output`: = Same as "ref". Returned as a convenience for operations that want
/// to use the new value after the variable has been updated.
class AssignSub {
public:
/// Optional attribute setters for AssignSub
struct Attrs {
/// If True, the subtraction will be protected by a lock;
/// otherwise the behavior is undefined, but may exhibit less contention.
///
/// Defaults to false
TF_MUST_USE_RESULT Attrs UseLocking(bool x) {
Attrs ret = *this;
ret.use_locking_ = x;
return ret;
}
bool use_locking_ = false;
};
AssignSub(const ::tensorflow::Scope& scope, ::tensorflow::Input ref,
::tensorflow::Input value);
AssignSub(const ::tensorflow::Scope& scope, ::tensorflow::Input ref,
::tensorflow::Input value, const AssignSub::Attrs& attrs);
operator ::tensorflow::Output() const { return output_ref; }
operator ::tensorflow::Input() const { return output_ref; }
::tensorflow::Node* node() const { return output_ref.node(); }
static Attrs UseLocking(bool x) {
return Attrs().UseLocking(x);
}
Operation operation;
::tensorflow::Output output_ref;
};
/// Increments 'ref' until it reaches 'limit'.
///
/// Arguments:
/// * scope: A Scope object
/// * ref: Should be from a scalar `Variable` node.
/// * limit: If incrementing ref would bring it above limit, instead generates an
/// 'OutOfRange' error.
///
/// Returns:
/// * `Output`: A copy of the input before increment. If nothing else modifies the
/// input, the values produced will all be distinct.
class CountUpTo {
public:
CountUpTo(const ::tensorflow::Scope& scope, ::tensorflow::Input ref, int64
limit);
operator ::tensorflow::Output() const { return output; }
operator ::tensorflow::Input() const { return output; }
::tensorflow::Node* node() const { return output.node(); }
Operation operation;
::tensorflow::Output output;
};
/// Destroys the temporary variable and returns its final value.
///
/// Sets output to the value of the Tensor pointed to by 'ref', then destroys
/// the temporary variable called 'var_name'.
/// All other uses of 'ref' *must* have executed before this op.
/// This is typically achieved by chaining the ref through each assign op, or by
/// using control dependencies.
///
/// Outputs the final value of the tensor pointed to by 'ref'.
///
/// Arguments:
/// * scope: A Scope object
/// * ref: A reference to the temporary variable tensor.
/// * var_name: Name of the temporary variable, usually the name of the matching
/// 'TemporaryVariable' op.
///
/// Returns:
/// * `Output`: The value tensor.
class DestroyTemporaryVariable {
public:
DestroyTemporaryVariable(const ::tensorflow::Scope& scope, ::tensorflow::Input
ref, StringPiece var_name);
operator ::tensorflow::Output() const { return value; }
operator ::tensorflow::Input() const { return value; }
::tensorflow::Node* node() const { return value.node(); }
Operation operation;
::tensorflow::Output value;
};
/// Checks whether a tensor has been initialized.
///
/// Outputs boolean scalar indicating whether the tensor has been initialized.
///
/// Arguments:
/// * scope: A Scope object
/// * ref: Should be from a `Variable` node. May be uninitialized.
///
/// Returns:
/// * `Output`: The is_initialized tensor.
class IsVariableInitialized {
public:
IsVariableInitialized(const ::tensorflow::Scope& scope, ::tensorflow::Input
ref);
operator ::tensorflow::Output() const { return is_initialized; }
operator ::tensorflow::Input() const { return is_initialized; }
::tensorflow::Node* node() const { return is_initialized.node(); }
Operation operation;
::tensorflow::Output is_initialized;
};
/// Increments variable pointed to by 'resource' until it reaches 'limit'.
///
/// Arguments:
/// * scope: A Scope object
/// * resource: Should be from a scalar `Variable` node.
/// * limit: If incrementing ref would bring it above limit, instead generates an
/// 'OutOfRange' error.
///
/// Returns:
/// * `Output`: A copy of the input before increment. If nothing else modifies the
/// input, the values produced will all be distinct.
class ResourceCountUpTo {
public:
ResourceCountUpTo(const ::tensorflow::Scope& scope, ::tensorflow::Input
resource, int64 limit, DataType T);
operator ::tensorflow::Output() const { return output; }
operator ::tensorflow::Input() const { return output; }
::tensorflow::Node* node() const { return output.node(); }
Operation operation;
::tensorflow::Output output;
};
/// Adds sparse `updates` to individual values or slices within a given
///
/// variable according to `indices`.
///
/// `ref` is a `Tensor` with rank `P` and `indices` is a `Tensor` of rank `Q`.
///
/// `indices` must be integer tensor, containing indices into `ref`.
/// It must be shape `[d_0, ..., d_{Q-2}, K]` where `0 < K <= P`.
///
/// The innermost dimension of `indices` (with length `K`) corresponds to
/// indices into elements (if `K = P`) or slices (if `K < P`) along the `K`th
/// dimension of `ref`.
///
/// `updates` is `Tensor` of rank `Q-1+P-K` with shape:
///
/// ```
/// [d_0, ..., d_{Q-2}, ref.shape[K], ..., ref.shape[P-1]].
/// ```
///
/// For example, say we want to update 4 scattered elements to a rank-1 tensor to
/// 8 elements. In Python, that update would look like this:
///
/// ```python
/// ref = tf.Variable([1, 2, 3, 4, 5, 6, 7, 8], use_resource=True)
/// indices = tf.constant([[4], [3], [1] ,[7]])
/// updates = tf.constant([9, 10, 11, 12])
/// update = tf.scatter_nd_add(ref, indices, updates)
/// with tf.Session() as sess:
/// print sess.run(update)
/// ```
///
/// The resulting update to ref would look like this:
///
/// [1, 12, 3, 14, 14, 6, 7, 20]
///
/// See `tf.scatter_nd` for more details about how to make updates to
/// slices.
///
/// Arguments:
/// * scope: A Scope object
/// * ref: A resource handle. Must be from a VarHandleOp.
/// * indices: A Tensor. Must be one of the following types: int32, int64.
/// A tensor of indices into ref.
/// * updates: A Tensor. Must have the same type as ref. A tensor of
/// values to add to ref.
///
/// Optional attributes (see `Attrs`):
/// * use_locking: An optional bool. Defaults to True. If True, the assignment will
/// be protected by a lock; otherwise the behavior is undefined,
/// but may exhibit less contention.
///
/// Returns:
/// * the created `Operation`
class ResourceScatterNdAdd {
public:
/// Optional attribute setters for ResourceScatterNdAdd
struct Attrs {
/// An optional bool. Defaults to True. If True, the assignment will
/// be protected by a lock; otherwise the behavior is undefined,
/// but may exhibit less contention.
///
/// Defaults to true
TF_MUST_USE_RESULT Attrs UseLocking(bool x) {
Attrs ret = *this;
ret.use_locking_ = x;
return ret;
}
bool use_locking_ = true;
};
ResourceScatterNdAdd(const ::tensorflow::Scope& scope, ::tensorflow::Input ref,
::tensorflow::Input indices, ::tensorflow::Input updates);
ResourceScatterNdAdd(const ::tensorflow::Scope& scope, ::tensorflow::Input ref,
::tensorflow::Input indices, ::tensorflow::Input updates,
const ResourceScatterNdAdd::Attrs& attrs);
operator ::tensorflow::Operation() const { return operation; }
static Attrs UseLocking(bool x) {
return Attrs().UseLocking(x);
}
Operation operation;
};
/// Applies sparse `updates` to individual values or slices within a given
///
/// variable according to `indices`.
///
/// `ref` is a `Tensor` with rank `P` and `indices` is a `Tensor` of rank `Q`.
///
/// `indices` must be integer tensor, containing indices into `ref`.
/// It must be shape `[d_0, ..., d_{Q-2}, K]` where `0 < K <= P`.
///
/// The innermost dimension of `indices` (with length `K`) corresponds to
/// indices into elements (if `K = P`) or slices (if `K < P`) along the `K`th
/// dimension of `ref`.
///
/// `updates` is `Tensor` of rank `Q-1+P-K` with shape:
///
/// ```
/// [d_0, ..., d_{Q-2}, ref.shape[K], ..., ref.shape[P-1]].
/// ```
///
/// For example, say we want to update 4 scattered elements to a rank-1 tensor to
/// 8 elements. In Python, that update would look like this:
///
/// ```python
/// ref = tf.Variable([1, 2, 3, 4, 5, 6, 7, 8])
/// indices = tf.constant([[4], [3], [1] ,[7]])
/// updates = tf.constant([9, 10, 11, 12])
/// update = tf.scatter_nd_update(ref, indices, updates)
/// with tf.Session() as sess:
/// print sess.run(update)
/// ```
///
/// The resulting update to ref would look like this:
///
/// [1, 11, 3, 10, 9, 6, 7, 12]
///
/// See `tf.scatter_nd` for more details about how to make updates to
/// slices.
///
/// Arguments:
/// * scope: A Scope object
/// * ref: A resource handle. Must be from a VarHandleOp.
/// * indices: A Tensor. Must be one of the following types: int32, int64.
/// A tensor of indices into ref.
/// * updates: A Tensor. Must have the same type as ref. A tensor of updated
/// values to add to ref.
///
/// Optional attributes (see `Attrs`):
/// * use_locking: An optional bool. Defaults to True. If True, the assignment will
/// be protected by a lock; otherwise the behavior is undefined,
/// but may exhibit less contention.
///
/// Returns:
/// * the created `Operation`
class ResourceScatterNdUpdate {
public:
/// Optional attribute setters for ResourceScatterNdUpdate
struct Attrs {
/// An optional bool. Defaults to True. If True, the assignment will
/// be protected by a lock; otherwise the behavior is undefined,
/// but may exhibit less contention.
///
/// Defaults to true
TF_MUST_USE_RESULT Attrs UseLocking(bool x) {
Attrs ret = *this;
ret.use_locking_ = x;
return ret;
}
bool use_locking_ = true;
};
ResourceScatterNdUpdate(const ::tensorflow::Scope& scope, ::tensorflow::Input
ref, ::tensorflow::Input indices, ::tensorflow::Input
updates);
ResourceScatterNdUpdate(const ::tensorflow::Scope& scope, ::tensorflow::Input
ref, ::tensorflow::Input indices, ::tensorflow::Input
updates, const ResourceScatterNdUpdate::Attrs& attrs);
operator ::tensorflow::Operation() const { return operation; }
static Attrs UseLocking(bool x) {
return Attrs().UseLocking(x);
}
Operation operation;
};
/// Adds sparse updates to a variable reference.
///
/// This operation computes
///
/// # Scalar indices
/// ref[indices, ...] += updates[...]
///
/// # Vector indices (for each i)
/// ref[indices[i], ...] += updates[i, ...]
///
/// # High rank indices (for each i, ..., j)
/// ref[indices[i, ..., j], ...] += updates[i, ..., j, ...]
///
/// This operation outputs `ref` after the update is done.
/// This makes it easier to chain operations that need to use the reset value.
///
/// Duplicate entries are handled correctly: if multiple `indices` reference
/// the same location, their contributions add.
///
/// Requires `updates.shape = indices.shape + ref.shape[1:]` or `updates.shape = []`.
///
/// <div style="width:70%; margin:auto; margin-bottom:10px; margin-top:20px;">
/// <img style="width:100%" src="https://www.tensorflow.org/images/ScatterAdd.png" alt>
/// </div>
///
/// Arguments:
/// * scope: A Scope object
/// * ref: Should be from a `Variable` node.
/// * indices: A tensor of indices into the first dimension of `ref`.
/// * updates: A tensor of updated values to add to `ref`.
///
/// Optional attributes (see `Attrs`):
/// * use_locking: If True, the addition will be protected by a lock;
/// otherwise the behavior is undefined, but may exhibit less contention.
///
/// Returns:
/// * `Output`: = Same as `ref`. Returned as a convenience for operations that want
/// to use the updated values after the update is done.
class ScatterAdd {
public:
/// Optional attribute setters for ScatterAdd
struct Attrs {
/// If True, the addition will be protected by a lock;
/// otherwise the behavior is undefined, but may exhibit less contention.
///
/// Defaults to false
TF_MUST_USE_RESULT Attrs UseLocking(bool x) {
Attrs ret = *this;
ret.use_locking_ = x;
return ret;
}
bool use_locking_ = false;
};
ScatterAdd(const ::tensorflow::Scope& scope, ::tensorflow::Input ref,
::tensorflow::Input indices, ::tensorflow::Input updates);
ScatterAdd(const ::tensorflow::Scope& scope, ::tensorflow::Input ref,
::tensorflow::Input indices, ::tensorflow::Input updates, const
ScatterAdd::Attrs& attrs);
operator ::tensorflow::Output() const { return output_ref; }
operator ::tensorflow::Input() const { return output_ref; }
::tensorflow::Node* node() const { return output_ref.node(); }
static Attrs UseLocking(bool x) {
return Attrs().UseLocking(x);
}
Operation operation;
::tensorflow::Output output_ref;
};
/// Divides a variable reference by sparse updates.
///
/// This operation computes
///
/// ```python
/// # Scalar indices
/// ref[indices, ...] /= updates[...]
///
/// # Vector indices (for each i)
/// ref[indices[i], ...] /= updates[i, ...]
///
/// # High rank indices (for each i, ..., j)
/// ref[indices[i, ..., j], ...] /= updates[i, ..., j, ...]
/// ```
///
/// This operation outputs `ref` after the update is done.
/// This makes it easier to chain operations that need to use the reset value.
///
/// Duplicate entries are handled correctly: if multiple `indices` reference
/// the same location, their contributions divide.
///
/// Requires `updates.shape = indices.shape + ref.shape[1:]` or `updates.shape = []`.
///
/// Arguments:
/// * scope: A Scope object
/// * ref: Should be from a `Variable` node.
/// * indices: A tensor of indices into the first dimension of `ref`.
/// * updates: A tensor of values that `ref` is divided by.
///
/// Optional attributes (see `Attrs`):
/// * use_locking: If True, the operation will be protected by a lock;
/// otherwise the behavior is undefined, but may exhibit less contention.
///
/// Returns:
/// * `Output`: = Same as `ref`. Returned as a convenience for operations that want
/// to use the updated values after the update is done.
class ScatterDiv {
public:
/// Optional attribute setters for ScatterDiv
struct Attrs {
/// If True, the operation will be protected by a lock;
/// otherwise the behavior is undefined, but may exhibit less contention.
///
/// Defaults to false
TF_MUST_USE_RESULT Attrs UseLocking(bool x) {
Attrs ret = *this;
ret.use_locking_ = x;
return ret;
}
bool use_locking_ = false;
};
ScatterDiv(const ::tensorflow::Scope& scope, ::tensorflow::Input ref,
::tensorflow::Input indices, ::tensorflow::Input updates);
ScatterDiv(const ::tensorflow::Scope& scope, ::tensorflow::Input ref,
::tensorflow::Input indices, ::tensorflow::Input updates, const
ScatterDiv::Attrs& attrs);
operator ::tensorflow::Output() const { return output_ref; }
operator ::tensorflow::Input() const { return output_ref; }
::tensorflow::Node* node() const { return output_ref.node(); }
static Attrs UseLocking(bool x) {
return Attrs().UseLocking(x);
}
Operation operation;
::tensorflow::Output output_ref;
};
/// Reduces sparse updates into a variable reference using the `max` operation.
///
/// This operation computes
///
/// # Scalar indices
/// ref[indices, ...] = max(ref[indices, ...], updates[...])
///
/// # Vector indices (for each i)
/// ref[indices[i], ...] = max(ref[indices[i], ...], updates[i, ...])
///
/// # High rank indices (for each i, ..., j)
/// ref[indices[i, ..., j], ...] = max(ref[indices[i, ..., j], ...], updates[i, ..., j, ...])
///
/// This operation outputs `ref` after the update is done.
/// This makes it easier to chain operations that need to use the reset value.
///
/// Duplicate entries are handled correctly: if multiple `indices` reference
/// the same location, their contributions combine.
///
/// Requires `updates.shape = indices.shape + ref.shape[1:]` or `updates.shape = []`.
///
/// <div style="width:70%; margin:auto; margin-bottom:10px; margin-top:20px;">
/// <img style="width:100%" src="https://www.tensorflow.org/images/ScatterAdd.png" alt>
/// </div>
///
/// Arguments:
/// * scope: A Scope object
/// * ref: Should be from a `Variable` node.
/// * indices: A tensor of indices into the first dimension of `ref`.
/// * updates: A tensor of updated values to reduce into `ref`.
///
/// Optional attributes (see `Attrs`):
/// * use_locking: If True, the update will be protected by a lock;
/// otherwise the behavior is undefined, but may exhibit less contention.
///
/// Returns:
/// * `Output`: = Same as `ref`. Returned as a convenience for operations that want
/// to use the updated values after the update is done.
class ScatterMax {
public:
/// Optional attribute setters for ScatterMax
struct Attrs {
/// If True, the update will be protected by a lock;
/// otherwise the behavior is undefined, but may exhibit less contention.
///
/// Defaults to false
TF_MUST_USE_RESULT Attrs UseLocking(bool x) {
Attrs ret = *this;
ret.use_locking_ = x;
return ret;
}
bool use_locking_ = false;
};
ScatterMax(const ::tensorflow::Scope& scope, ::tensorflow::Input ref,
::tensorflow::Input indices, ::tensorflow::Input updates);
ScatterMax(const ::tensorflow::Scope& scope, ::tensorflow::Input ref,
::tensorflow::Input indices, ::tensorflow::Input updates, const
ScatterMax::Attrs& attrs);
operator ::tensorflow::Output() const { return output_ref; }
operator ::tensorflow::Input() const { return output_ref; }
::tensorflow::Node* node() const { return output_ref.node(); }
static Attrs UseLocking(bool x) {
return Attrs().UseLocking(x);
}
Operation operation;
::tensorflow::Output output_ref;
};
/// Reduces sparse updates into a variable reference using the `min` operation.
///
/// This operation computes
///
/// # Scalar indices
/// ref[indices, ...] = min(ref[indices, ...], updates[...])
///
/// # Vector indices (for each i)
/// ref[indices[i], ...] = min(ref[indices[i], ...], updates[i, ...])
///
/// # High rank indices (for each i, ..., j)
/// ref[indices[i, ..., j], ...] = min(ref[indices[i, ..., j], ...], updates[i, ..., j, ...])
///
/// This operation outputs `ref` after the update is done.
/// This makes it easier to chain operations that need to use the reset value.
///
/// Duplicate entries are handled correctly: if multiple `indices` reference
/// the same location, their contributions combine.
///
/// Requires `updates.shape = indices.shape + ref.shape[1:]` or `updates.shape = []`.
///
/// <div style="width:70%; margin:auto; margin-bottom:10px; margin-top:20px;">
/// <img style="width:100%" src="https://www.tensorflow.org/images/ScatterAdd.png" alt>
/// </div>
///
/// Arguments:
/// * scope: A Scope object
/// * ref: Should be from a `Variable` node.
/// * indices: A tensor of indices into the first dimension of `ref`.
/// * updates: A tensor of updated values to reduce into `ref`.
///
/// Optional attributes (see `Attrs`):
/// * use_locking: If True, the update will be protected by a lock;
/// otherwise the behavior is undefined, but may exhibit less contention.
///
/// Returns:
/// * `Output`: = Same as `ref`. Returned as a convenience for operations that want
/// to use the updated values after the update is done.
class ScatterMin {
public:
/// Optional attribute setters for ScatterMin
struct Attrs {
/// If True, the update will be protected by a lock;
/// otherwise the behavior is undefined, but may exhibit less contention.
///
/// Defaults to false
TF_MUST_USE_RESULT Attrs UseLocking(bool x) {
Attrs ret = *this;
ret.use_locking_ = x;
return ret;
}
bool use_locking_ = false;
};
ScatterMin(const ::tensorflow::Scope& scope, ::tensorflow::Input ref,
::tensorflow::Input indices, ::tensorflow::Input updates);
ScatterMin(const ::tensorflow::Scope& scope, ::tensorflow::Input ref,
::tensorflow::Input indices, ::tensorflow::Input updates, const
ScatterMin::Attrs& attrs);
operator ::tensorflow::Output() const { return output_ref; }
operator ::tensorflow::Input() const { return output_ref; }
::tensorflow::Node* node() const { return output_ref.node(); }
static Attrs UseLocking(bool x) {
return Attrs().UseLocking(x);
}
Operation operation;
::tensorflow::Output output_ref;
};
/// Multiplies sparse updates into a variable reference.
///
/// This operation computes
///
/// ```python
/// # Scalar indices
/// ref[indices, ...] *= updates[...]
///
/// # Vector indices (for each i)
/// ref[indices[i], ...] *= updates[i, ...]
///
/// # High rank indices (for each i, ..., j)
/// ref[indices[i, ..., j], ...] *= updates[i, ..., j, ...]
/// ```
///
/// This operation outputs `ref` after the update is done.
/// This makes it easier to chain operations that need to use the reset value.
///
/// Duplicate entries are handled correctly: if multiple `indices` reference
/// the same location, their contributions multiply.
///
/// Requires `updates.shape = indices.shape + ref.shape[1:]` or `updates.shape = []`.
///
/// Arguments:
/// * scope: A Scope object
/// * ref: Should be from a `Variable` node.
/// * indices: A tensor of indices into the first dimension of `ref`.
/// * updates: A tensor of updated values to multiply to `ref`.
///
/// Optional attributes (see `Attrs`):
/// * use_locking: If True, the operation will be protected by a lock;
/// otherwise the behavior is undefined, but may exhibit less contention.
///
/// Returns:
/// * `Output`: = Same as `ref`. Returned as a convenience for operations that want
/// to use the updated values after the update is done.
class ScatterMul {
public:
/// Optional attribute setters for ScatterMul
struct Attrs {
/// If True, the operation will be protected by a lock;
/// otherwise the behavior is undefined, but may exhibit less contention.
///
/// Defaults to false
TF_MUST_USE_RESULT Attrs UseLocking(bool x) {
Attrs ret = *this;
ret.use_locking_ = x;
return ret;
}
bool use_locking_ = false;
};
ScatterMul(const ::tensorflow::Scope& scope, ::tensorflow::Input ref,
::tensorflow::Input indices, ::tensorflow::Input updates);
ScatterMul(const ::tensorflow::Scope& scope, ::tensorflow::Input ref,
::tensorflow::Input indices, ::tensorflow::Input updates, const
ScatterMul::Attrs& attrs);
operator ::tensorflow::Output() const { return output_ref; }
operator ::tensorflow::Input() const { return output_ref; }
::tensorflow::Node* node() const { return output_ref.node(); }
static Attrs UseLocking(bool x) {
return Attrs().UseLocking(x);
}
Operation operation;
::tensorflow::Output output_ref;
};
/// Applies sparse addition between `updates` and individual values or slices
///
/// within a given variable according to `indices`.
///
/// `ref` is a `Tensor` with rank `P` and `indices` is a `Tensor` of rank `Q`.
///
/// `indices` must be integer tensor, containing indices into `ref`.
/// It must be shape `\\([d_0, ..., d_{Q-2}, K]\\)` where `0 < K <= P`.
///
/// The innermost dimension of `indices` (with length `K`) corresponds to
/// indices into elements (if `K = P`) or slices (if `K < P`) along the `K`th
/// dimension of `ref`.
///
/// `updates` is `Tensor` of rank `Q-1+P-K` with shape:
///
/// $$[d_0, ..., d_{Q-2}, ref.shape[K], ..., ref.shape[P-1]].$$
///
/// For example, say we want to add 4 scattered elements to a rank-1 tensor to 8
/// elements. In Python, that addition would look like this:
///
/// ref = tf.Variable([1, 2, 3, 4, 5, 6, 7, 8])
/// indices = tf.constant([[4], [3], [1], [7]])
/// updates = tf.constant([9, 10, 11, 12])
/// add = tf.scatter_nd_add(ref, indices, updates)
/// with tf.Session() as sess:
/// print sess.run(add)
///
/// The resulting update to ref would look like this:
///
/// [1, 13, 3, 14, 14, 6, 7, 20]
///
/// See `tf.scatter_nd` for more details about how to make updates to
/// slices.
///
/// Arguments:
/// * scope: A Scope object
/// * ref: A mutable Tensor. Should be from a Variable node.
/// * indices: A Tensor. Must be one of the following types: int32, int64.
/// A tensor of indices into ref.
/// * updates: A Tensor. Must have the same type as ref. A tensor of updated values
/// to add to ref.
///
/// Optional attributes (see `Attrs`):
/// * use_locking: An optional bool. Defaults to True. If True, the assignment will
/// be protected by a lock; otherwise the behavior is undefined,
/// but may exhibit less contention.
///
/// Returns:
/// * `Output`: Same as ref. Returned as a convenience for operations that want
/// to use the updated values after the update is done.
class ScatterNdAdd {
public:
/// Optional attribute setters for ScatterNdAdd
struct Attrs {
/// An optional bool. Defaults to True. If True, the assignment will
/// be protected by a lock; otherwise the behavior is undefined,
/// but may exhibit less contention.
///
/// Defaults to false
TF_MUST_USE_RESULT Attrs UseLocking(bool x) {
Attrs ret = *this;
ret.use_locking_ = x;
return ret;
}
bool use_locking_ = false;
};
ScatterNdAdd(const ::tensorflow::Scope& scope, ::tensorflow::Input ref,
::tensorflow::Input indices, ::tensorflow::Input updates);
ScatterNdAdd(const ::tensorflow::Scope& scope, ::tensorflow::Input ref,
::tensorflow::Input indices, ::tensorflow::Input updates, const
ScatterNdAdd::Attrs& attrs);
operator ::tensorflow::Output() const { return output_ref; }
operator ::tensorflow::Input() const { return output_ref; }
::tensorflow::Node* node() const { return output_ref.node(); }
static Attrs UseLocking(bool x) {
return Attrs().UseLocking(x);
}
Operation operation;
::tensorflow::Output output_ref;
};
/// Applies sparse subtraction between `updates` and individual values or slices
///
/// within a given variable according to `indices`.
///
/// `ref` is a `Tensor` with rank `P` and `indices` is a `Tensor` of rank `Q`.
///
/// `indices` must be integer tensor, containing indices into `ref`.
/// It must be shape \\([d_0, ..., d_{Q-2}, K]\\) where `0 < K <= P`.
///
/// The innermost dimension of `indices` (with length `K`) corresponds to
/// indices into elements (if `K = P`) or slices (if `K < P`) along the `K`th
/// dimension of `ref`.
///
/// `updates` is `Tensor` of rank `Q-1+P-K` with shape:
///
/// $$[d_0, ..., d_{Q-2}, ref.shape[K], ..., ref.shape[P-1]].$$
///
/// For example, say we want to subtract 4 scattered elements from a rank-1 tensor
/// with 8 elements. In Python, that subtraction would look like this:
///
/// ref = tf.Variable([1, 2, 3, 4, 5, 6, 7, 8])
/// indices = tf.constant([[4], [3], [1], [7]])
/// updates = tf.constant([9, 10, 11, 12])
/// sub = tf.scatter_nd_sub(ref, indices, updates)
/// with tf.Session() as sess:
/// print sess.run(sub)
///
/// The resulting update to ref would look like this:
///
/// [1, -9, 3, -6, -4, 6, 7, -4]
///
/// See `tf.scatter_nd` for more details about how to make updates to
/// slices.
///
/// Arguments:
/// * scope: A Scope object
/// * ref: A mutable Tensor. Should be from a Variable node.
/// * indices: A Tensor. Must be one of the following types: int32, int64.
/// A tensor of indices into ref.
/// * updates: A Tensor. Must have the same type as ref. A tensor of updated values
/// to subtract from ref.
///
/// Optional attributes (see `Attrs`):
/// * use_locking: An optional bool. Defaults to True. If True, the assignment will
/// be protected by a lock; otherwise the behavior is undefined,
/// but may exhibit less contention.
///
/// Returns:
/// * `Output`: Same as ref. Returned as a convenience for operations that want
/// to use the updated values after the update is done.
class ScatterNdSub {
public:
/// Optional attribute setters for ScatterNdSub
struct Attrs {
/// An optional bool. Defaults to True. If True, the assignment will
/// be protected by a lock; otherwise the behavior is undefined,
/// but may exhibit less contention.
///
/// Defaults to false
TF_MUST_USE_RESULT Attrs UseLocking(bool x) {
Attrs ret = *this;
ret.use_locking_ = x;
return ret;
}
bool use_locking_ = false;
};
ScatterNdSub(const ::tensorflow::Scope& scope, ::tensorflow::Input ref,
::tensorflow::Input indices, ::tensorflow::Input updates);
ScatterNdSub(const ::tensorflow::Scope& scope, ::tensorflow::Input ref,
::tensorflow::Input indices, ::tensorflow::Input updates, const
ScatterNdSub::Attrs& attrs);
operator ::tensorflow::Output() const { return output_ref; }
operator ::tensorflow::Input() const { return output_ref; }
::tensorflow::Node* node() const { return output_ref.node(); }
static Attrs UseLocking(bool x) {
return Attrs().UseLocking(x);
}
Operation operation;
::tensorflow::Output output_ref;
};
/// Applies sparse `updates` to individual values or slices within a given
///
/// variable according to `indices`.
///
/// `ref` is a `Tensor` with rank `P` and `indices` is a `Tensor` of rank `Q`.
///
/// `indices` must be integer tensor, containing indices into `ref`.
/// It must be shape \\([d_0, ..., d_{Q-2}, K]\\) where `0 < K <= P`.
///
/// The innermost dimension of `indices` (with length `K`) corresponds to
/// indices into elements (if `K = P`) or slices (if `K < P`) along the `K`th
/// dimension of `ref`.
///
/// `updates` is `Tensor` of rank `Q-1+P-K` with shape:
///
/// $$[d_0, ..., d_{Q-2}, ref.shape[K], ..., ref.shape[P-1]].$$
///
/// For example, say we want to update 4 scattered elements to a rank-1 tensor to
/// 8 elements. In Python, that update would look like this:
///
/// ```python
/// ref = tf.Variable([1, 2, 3, 4, 5, 6, 7, 8])
/// indices = tf.constant([[4], [3], [1] ,[7]])
/// updates = tf.constant([9, 10, 11, 12])
/// update = tf.scatter_nd_update(ref, indices, updates)
/// with tf.Session() as sess:
/// print sess.run(update)
/// ```
///
/// The resulting update to ref would look like this:
///
/// [1, 11, 3, 10, 9, 6, 7, 12]
///
/// See `tf.scatter_nd` for more details about how to make updates to
/// slices.
///
/// See also `tf.scatter_update` and `tf.batch_scatter_update`.
///
/// Arguments:
/// * scope: A Scope object
/// * ref: A mutable Tensor. Should be from a Variable node.
/// * indices: A Tensor. Must be one of the following types: int32, int64.
/// A tensor of indices into ref.
/// * updates: A Tensor. Must have the same type as ref. A tensor of updated
/// values to add to ref.
///
/// Optional attributes (see `Attrs`):
/// * use_locking: An optional bool. Defaults to True. If True, the assignment will
/// be protected by a lock; otherwise the behavior is undefined,
/// but may exhibit less contention.
///
/// Returns:
/// * `Output`: Same as ref. Returned as a convenience for operations that want to
/// use the updated values after the update is done.
class ScatterNdUpdate {
public:
/// Optional attribute setters for ScatterNdUpdate
struct Attrs {
/// An optional bool. Defaults to True. If True, the assignment will
/// be protected by a lock; otherwise the behavior is undefined,
/// but may exhibit less contention.
///
/// Defaults to true
TF_MUST_USE_RESULT Attrs UseLocking(bool x) {
Attrs ret = *this;
ret.use_locking_ = x;
return ret;
}
bool use_locking_ = true;
};
ScatterNdUpdate(const ::tensorflow::Scope& scope, ::tensorflow::Input ref,
::tensorflow::Input indices, ::tensorflow::Input updates);
ScatterNdUpdate(const ::tensorflow::Scope& scope, ::tensorflow::Input ref,
::tensorflow::Input indices, ::tensorflow::Input updates, const
ScatterNdUpdate::Attrs& attrs);
operator ::tensorflow::Output() const { return output_ref; }
operator ::tensorflow::Input() const { return output_ref; }
::tensorflow::Node* node() const { return output_ref.node(); }
static Attrs UseLocking(bool x) {
return Attrs().UseLocking(x);
}
Operation operation;
::tensorflow::Output output_ref;
};
/// Subtracts sparse updates to a variable reference.
///
/// ```python
/// # Scalar indices
/// ref[indices, ...] -= updates[...]
///
/// # Vector indices (for each i)
/// ref[indices[i], ...] -= updates[i, ...]
///
/// # High rank indices (for each i, ..., j)
/// ref[indices[i, ..., j], ...] -= updates[i, ..., j, ...]
/// ```
///
/// This operation outputs `ref` after the update is done.
/// This makes it easier to chain operations that need to use the reset value.
///
/// Duplicate entries are handled correctly: if multiple `indices` reference
/// the same location, their (negated) contributions add.
///
/// Requires `updates.shape = indices.shape + ref.shape[1:]` or `updates.shape = []`.
///
/// <div style="width:70%; margin:auto; margin-bottom:10px; margin-top:20px;">
/// <img style="width:100%" src="https://www.tensorflow.org/images/ScatterSub.png" alt>
/// </div>
///
/// Arguments:
/// * scope: A Scope object
/// * ref: Should be from a `Variable` node.
/// * indices: A tensor of indices into the first dimension of `ref`.
/// * updates: A tensor of updated values to subtract from `ref`.
///
/// Optional attributes (see `Attrs`):
/// * use_locking: If True, the subtraction will be protected by a lock;
/// otherwise the behavior is undefined, but may exhibit less contention.
///
/// Returns:
/// * `Output`: = Same as `ref`. Returned as a convenience for operations that want
/// to use the updated values after the update is done.
class ScatterSub {
public:
/// Optional attribute setters for ScatterSub
struct Attrs {
/// If True, the subtraction will be protected by a lock;
/// otherwise the behavior is undefined, but may exhibit less contention.
///
/// Defaults to false
TF_MUST_USE_RESULT Attrs UseLocking(bool x) {
Attrs ret = *this;
ret.use_locking_ = x;
return ret;
}
bool use_locking_ = false;
};
ScatterSub(const ::tensorflow::Scope& scope, ::tensorflow::Input ref,
::tensorflow::Input indices, ::tensorflow::Input updates);
ScatterSub(const ::tensorflow::Scope& scope, ::tensorflow::Input ref,
::tensorflow::Input indices, ::tensorflow::Input updates, const
ScatterSub::Attrs& attrs);
operator ::tensorflow::Output() const { return output_ref; }
operator ::tensorflow::Input() const { return output_ref; }
::tensorflow::Node* node() const { return output_ref.node(); }
static Attrs UseLocking(bool x) {
return Attrs().UseLocking(x);
}
Operation operation;
::tensorflow::Output output_ref;
};
/// Applies sparse updates to a variable reference.
///
/// This operation computes
///
/// ```python
/// # Scalar indices
/// ref[indices, ...] = updates[...]
///
/// # Vector indices (for each i)
/// ref[indices[i], ...] = updates[i, ...]
///
/// # High rank indices (for each i, ..., j)
/// ref[indices[i, ..., j], ...] = updates[i, ..., j, ...]
/// ```
///
/// This operation outputs `ref` after the update is done.
/// This makes it easier to chain operations that need to use the reset value.
///
/// If values in `ref` is to be updated more than once, because there are
/// duplicate entries in `indices`, the order at which the updates happen
/// for each value is undefined.
///
/// Requires `updates.shape = indices.shape + ref.shape[1:]` or `updates.shape = []`.
///
/// <div style="width:70%; margin:auto; margin-bottom:10px; margin-top:20px;">
/// <img style="width:100%" src="https://www.tensorflow.org/images/ScatterUpdate.png" alt>
/// </div>
///
/// See also `tf.batch_scatter_update` and `tf.scatter_nd_update`.
///
/// Arguments:
/// * scope: A Scope object
/// * ref: Should be from a `Variable` node.
/// * indices: A tensor of indices into the first dimension of `ref`.
/// * updates: A tensor of updated values to store in `ref`.
///
/// Optional attributes (see `Attrs`):
/// * use_locking: If True, the assignment will be protected by a lock;
/// otherwise the behavior is undefined, but may exhibit less contention.
///
/// Returns:
/// * `Output`: = Same as `ref`. Returned as a convenience for operations that want
/// to use the updated values after the update is done.
class ScatterUpdate {
public:
/// Optional attribute setters for ScatterUpdate
struct Attrs {
/// If True, the assignment will be protected by a lock;
/// otherwise the behavior is undefined, but may exhibit less contention.
///
/// Defaults to true
TF_MUST_USE_RESULT Attrs UseLocking(bool x) {
Attrs ret = *this;
ret.use_locking_ = x;
return ret;
}
bool use_locking_ = true;
};
ScatterUpdate(const ::tensorflow::Scope& scope, ::tensorflow::Input ref,
::tensorflow::Input indices, ::tensorflow::Input updates);
ScatterUpdate(const ::tensorflow::Scope& scope, ::tensorflow::Input ref,
::tensorflow::Input indices, ::tensorflow::Input updates, const
ScatterUpdate::Attrs& attrs);
operator ::tensorflow::Output() const { return output_ref; }
operator ::tensorflow::Input() const { return output_ref; }
::tensorflow::Node* node() const { return output_ref.node(); }
static Attrs UseLocking(bool x) {
return Attrs().UseLocking(x);
}
Operation operation;
::tensorflow::Output output_ref;
};
/// Returns a tensor that may be mutated, but only persists within a single step.
///
/// This is an experimental op for internal use only and it is possible to use this
/// op in unsafe ways. DO NOT USE unless you fully understand the risks.
///
/// It is the caller's responsibility to ensure that 'ref' is eventually passed to a
/// matching 'DestroyTemporaryVariable' op after all other uses have completed.
///
/// Outputs a ref to the tensor state so it may be read or modified.
///
/// E.g.
/// var = state_ops._temporary_variable([1, 2], types.float_)
/// var_name = var.op.name
/// var = state_ops.assign(var, [[4.0, 5.0]])
/// var = state_ops.assign_add(var, [[6.0, 7.0]])
/// final = state_ops._destroy_temporary_variable(var, var_name=var_name)
///
/// Arguments:
/// * scope: A Scope object
/// * shape: The shape of the variable tensor.
/// * dtype: The type of elements in the variable tensor.
///
/// Optional attributes (see `Attrs`):
/// * var_name: Overrides the name used for the temporary variable resource. Default
/// value is the name of the 'TemporaryVariable' op (which is guaranteed unique).
///
/// Returns:
/// * `Output`: A reference to the variable tensor.
class TemporaryVariable {
public:
/// Optional attribute setters for TemporaryVariable
struct Attrs {
/// Overrides the name used for the temporary variable resource. Default
/// value is the name of the 'TemporaryVariable' op (which is guaranteed unique).
///
/// Defaults to ""
TF_MUST_USE_RESULT Attrs VarName(StringPiece x) {
Attrs ret = *this;
ret.var_name_ = x;
return ret;
}
StringPiece var_name_ = "";
};
TemporaryVariable(const ::tensorflow::Scope& scope, PartialTensorShape shape,
DataType dtype);
TemporaryVariable(const ::tensorflow::Scope& scope, PartialTensorShape shape,
DataType dtype, const TemporaryVariable::Attrs& attrs);
operator ::tensorflow::Output() const { return ref; }
operator ::tensorflow::Input() const { return ref; }
::tensorflow::Node* node() const { return ref.node(); }
static Attrs VarName(StringPiece x) {
return Attrs().VarName(x);
}
Operation operation;
::tensorflow::Output ref;
};
/// Holds state in the form of a tensor that persists across steps.
///
/// Outputs a ref to the tensor state so it may be read or modified.
/// TODO(zhifengc/mrry): Adds a pointer to a more detail document
/// about sharing states in tensorflow.
///
/// Arguments:
/// * scope: A Scope object
/// * shape: The shape of the variable tensor.
/// * dtype: The type of elements in the variable tensor.
///
/// Optional attributes (see `Attrs`):
/// * container: If non-empty, this variable is placed in the given container.
/// Otherwise, a default container is used.
/// * shared_name: If non-empty, this variable is named in the given bucket
/// with this shared_name. Otherwise, the node name is used instead.
///
/// Returns:
/// * `Output`: A reference to the variable tensor.
class Variable {
public:
/// Optional attribute setters for Variable
struct Attrs {
/// If non-empty, this variable is placed in the given container.
/// Otherwise, a default container is used.
///
/// Defaults to ""
TF_MUST_USE_RESULT Attrs Container(StringPiece x) {
Attrs ret = *this;
ret.container_ = x;
return ret;
}
/// If non-empty, this variable is named in the given bucket
/// with this shared_name. Otherwise, the node name is used instead.
///
/// Defaults to ""
TF_MUST_USE_RESULT Attrs SharedName(StringPiece x) {
Attrs ret = *this;
ret.shared_name_ = x;
return ret;
}
StringPiece container_ = "";
StringPiece shared_name_ = "";
};
Variable(const ::tensorflow::Scope& scope, PartialTensorShape shape, DataType
dtype);
Variable(const ::tensorflow::Scope& scope, PartialTensorShape shape, DataType
dtype, const Variable::Attrs& attrs);
operator ::tensorflow::Output() const { return ref; }
operator ::tensorflow::Input() const { return ref; }
::tensorflow::Node* node() const { return ref.node(); }
static Attrs Container(StringPiece x) {
return Attrs().Container(x);
}
static Attrs SharedName(StringPiece x) {
return Attrs().SharedName(x);
}
Operation operation;
::tensorflow::Output ref;
};
/// @}
} // namespace ops
} // namespace tensorflow
#endif // TENSORFLOW_CC_OPS_STATE_OPS_H_