#include <tensor.h>
Represents an n-dimensional array of values.
Constructors and Destructors | |
---|---|
Tensor() Creates a 1-dimensional, 0-element float tensor. | |
Tensor(DataType type, const TensorShape & shape) | |
Tensor(Allocator *a, DataType type, const TensorShape & shape) Creates a tensor with the input type and shape , using the allocator a to allocate the underlying buffer. | |
Tensor(Allocator *a, DataType type, const TensorShape & shape, const AllocationAttributes & allocation_attr) Creates a tensor with the input type and shape , using the allocator a and the specified "allocation_attr" to allocate the underlying buffer. | |
Tensor(DataType type) Creates an empty Tensor of the given data type. | |
Tensor(const Tensor & other) | |
Tensor(Tensor && other) Copy constructor. | |
~Tensor() |
Public functions | |
---|---|
AsProtoField(TensorProto *proto) const | void Fills in proto with *this tensor's content. |
AsProtoTensorContent(TensorProto *proto) const | void |
CopyFrom(const Tensor & other, const TensorShape & shape) TF_MUST_USE_RESULT | bool Copy the other tensor into this tensor and reshape it. |
DebugString() const | string A human-readable summary of the tensor suitable for debugging. |
FillDescription(TensorDescription *description) const | void Fill in the TensorDescription proto with metadata about the tensor that is useful for monitoring and debugging. |
FromProto(const TensorProto & other) TF_MUST_USE_RESULT | bool Parse other and construct the tensor. |
FromProto(Allocator *a, const TensorProto & other) TF_MUST_USE_RESULT | bool |
IsAligned() const | bool Returns true iff this tensor is aligned. |
IsInitialized() const | bool If necessary, has this Tensor been initialized? |
IsSameSize(const Tensor & b) const | bool |
NumElements() const | int64 Convenience accessor for the tensor shape. |
SharesBufferWith(const Tensor & b) const | bool |
Slice(int64 dim0_start, int64 dim0_limit) const | Slice this tensor along the 1st dimension. |
SummarizeValue(int64 max_entries) const | string Render the first max_entries values in *this into a string. |
TotalBytes() const | size_t Returns the estimated memory usage of this tensor. |
UnsafeCopyFromInternal(const Tensor &, DataType dtype, const TensorShape &) | void Copy the other tensor into this tensor and reshape it and reinterpret the buffer's datatype. |
bit_casted_shaped(gtl::ArraySlice< int64 > new_sizes) | TTypes< T, NDIMS >::Tensor Return the tensor data to an Eigen::Tensor with the new shape specified in new_sizes and cast to a new dtype T . |
bit_casted_shaped(gtl::ArraySlice< int64 > new_sizes) const | TTypes< T, NDIMS >::ConstTensor Return the tensor data to an Eigen::Tensor with the new shape specified in new_sizes and cast to a new dtype T . |
bit_casted_tensor() | TTypes< T, NDIMS >::Tensor Return the tensor data to an Eigen::Tensor with the same size but a bitwise cast to the specified dtype T . |
bit_casted_tensor() const | TTypes< T, NDIMS >::ConstTensor Return the tensor data to an Eigen::Tensor with the same size but a bitwise cast to the specified dtype T . |
dim_size(int d) const | int64 Convenience accessor for the tensor shape. |
dims() const | int Convenience accessor for the tensor shape. |
dtype() const | DataType Returns the data type. |
flat() | TTypes< T >::Flat Return the tensor data as an Eigen::Tensor of the data type and a specified shape. |
flat() const | TTypes< T >::ConstFlat |
flat_inner_dims() | TTypes< T, NDIMS >::Tensor Returns the data as an Eigen::Tensor with NDIMS dimensions, collapsing all Tensor dimensions but the last NDIMS-1 into the first dimension of the result. |
flat_inner_dims() const | TTypes< T, NDIMS >::ConstTensor |
flat_outer_dims() | TTypes< T, NDIMS >::Tensor Returns the data as an Eigen::Tensor with NDIMS dimensions, collapsing all Tensor dimensions but the first NDIMS-1 into the last dimension of the result. |
flat_outer_dims() const | TTypes< T, NDIMS >::ConstTensor |
matrix() | TTypes< T >::Matrix |
matrix() const | TTypes< T >::ConstMatrix |
operator=(const Tensor & other) | Tensor & Assign operator. This tensor shares other's underlying storage. |
operator=(Tensor && other) | Tensor & Move operator. See move constructor for details. |
scalar() | TTypes< T >::Scalar |
scalar() const | TTypes< T >::ConstScalar |
shape() const | const TensorShape & Returns the shape of the tensor. |
shaped(gtl::ArraySlice< int64 > new_sizes) | TTypes< T, NDIMS >::Tensor |
shaped(gtl::ArraySlice< int64 > new_sizes) const | TTypes< T, NDIMS >::ConstTensor |
tensor() | TTypes< T, NDIMS >::Tensor |
tensor() const | TTypes< T, NDIMS >::ConstTensor |
tensor_data() const | StringPiece Returns a StringPiece mapping the current tensor's buffer. |
unaligned_flat() | TTypes< T >::UnalignedFlat |
unaligned_flat() const | TTypes< T >::UnalignedConstFlat |
unaligned_shaped(gtl::ArraySlice< int64 > new_sizes) | TTypes< T, NDIMS >::UnalignedTensor |
unaligned_shaped(gtl::ArraySlice< int64 > new_sizes) const | TTypes< T, NDIMS >::UnalignedConstTensor |
vec() | TTypes< T >::Vec Return the tensor data as an Eigen::Tensor with the type and sizes of this Tensor . |
vec() const | TTypes< T >::ConstVec Const versions of all the methods above. |
void AsProtoField( TensorProto *proto ) const
Fills in proto
with *this
tensor's content.
AsProtoField()
fills in the repeated field for proto.dtype()
, while AsProtoTensorContent()
encodes the content in proto.tensor_content()
in a compact form.
void AsProtoTensorContent( TensorProto *proto ) const
bool CopyFrom( const Tensor & other, const TensorShape & shape ) TF_MUST_USE_RESULT
Copy the other tensor into this tensor and reshape it.
This tensor shares other's underlying storage. Returns true
iff other.shape()
has the same number of elements of the given shape
.
string DebugString() const
A human-readable summary of the tensor suitable for debugging.
void FillDescription( TensorDescription *description ) const
Fill in the TensorDescription
proto with metadata about the tensor that is useful for monitoring and debugging.
bool FromProto( const TensorProto & other ) TF_MUST_USE_RESULT
Parse other
and construct the tensor.
Returns true
iff the parsing succeeds. If the parsing fails, the state of *this
is unchanged.
bool FromProto( Allocator *a, const TensorProto & other ) TF_MUST_USE_RESULT
bool IsAligned() const
Returns true iff this tensor is aligned.
bool IsInitialized() const
If necessary, has this Tensor been initialized?
Zero-element Tensors are always considered initialized, even if they have never been assigned to and do not have any memory allocated.
bool IsSameSize( const Tensor & b ) const
int64 NumElements() const
Convenience accessor for the tensor shape.
bool SharesBufferWith( const Tensor & b ) const
Tensor Slice( int64 dim0_start, int64 dim0_limit ) const
Slice this tensor along the 1st dimension.
I.e., the returned tensor satisfies returned[i, ...] == this[dim0_start + i, ...]. The returned tensor shares the underlying tensor buffer with this tensor.
NOTE: The returned tensor may not satisfies the same alignment requirement as this tensor depending on the shape. The caller must check the returned tensor's alignment before calling certain methods that have alignment requirement (e.g., flat()
, tensor()
).
REQUIRES: dims()
>= 1 REQUIRES: 0 <= dim0_start <= dim0_limit <= dim_size(0)
string SummarizeValue( int64 max_entries ) const
Render the first max_entries
values in *this
into a string.
Tensor()
Creates a 1-dimensional, 0-element float tensor.
The returned Tensor is not a scalar (shape {}), but is instead an empty one-dimensional Tensor (shape {0}, NumElements() == 0). Since it has no elements, it does not need to be assigned a value and is initialized by default (IsInitialized() is true). If this is undesirable, consider creating a one-element scalar which does require initialization:
```c++
Tensor(DT_FLOAT, TensorShape({}))
```
Tensor( DataType type, const TensorShape & shape )
Creates a Tensor of the given type
and shape
.
If LogMemory::IsEnabled() the allocation is logged as coming from an unknown kernel and step. Calling the Tensor constructor directly from within an Op is deprecated: use the OpKernelConstruction/OpKernelContext allocate_* methods to allocate a new tensor, which record the kernel and step.
The underlying buffer is allocated using a CPUAllocator
.
Tensor( Allocator *a, DataType type, const TensorShape & shape )
Creates a tensor with the input type
and shape
, using the allocator a
to allocate the underlying buffer.
If LogMemory::IsEnabled() the allocation is logged as coming from an unknown kernel and step. Calling the Tensor constructor directly from within an Op is deprecated: use the OpKernelConstruction/OpKernelContext allocate_* methods to allocate a new tensor, which record the kernel and step.
a
must outlive the lifetime of this Tensor.
Tensor( Allocator *a, DataType type, const TensorShape & shape, const AllocationAttributes & allocation_attr )
Creates a tensor with the input type
and shape
, using the allocator a
and the specified "allocation_attr" to allocate the underlying buffer.
If the kernel and step are known allocation_attr.allocation_will_be_logged should be set to true and LogMemory::RecordTensorAllocation should be called after the tensor is constructed. Calling the Tensor constructor directly from within an Op is deprecated: use the OpKernelConstruction/OpKernelContext allocate_* methods to allocate a new tensor, which record the kernel and step.
a
must outlive the lifetime of this Tensor.
Tensor( DataType type )
Creates an empty Tensor of the given data type.
Like Tensor(), returns a 1-dimensional, 0-element Tensor with IsInitialized() returning True. See the Tensor() documentation for details.
Tensor( const Tensor & other )
Tensor( Tensor && other )
Copy constructor.
size_t TotalBytes() const
Returns the estimated memory usage of this tensor.
void UnsafeCopyFromInternal( const Tensor &, DataType dtype, const TensorShape & )
Copy the other tensor into this tensor and reshape it and reinterpret the buffer's datatype.
This tensor shares other's underlying storage.
TTypes< T, NDIMS >::Tensor bit_casted_shaped( gtl::ArraySlice< int64 > new_sizes )
Return the tensor data to an Eigen::Tensor
with the new shape specified in new_sizes
and cast to a new dtype T
.
Using a bitcast is useful for move and copy operations. The allowed bitcast is the only difference from shaped()
.
TTypes< T, NDIMS >::ConstTensor bit_casted_shaped( gtl::ArraySlice< int64 > new_sizes ) const
Return the tensor data to an Eigen::Tensor
with the new shape specified in new_sizes
and cast to a new dtype T
.
Using a bitcast is useful for move and copy operations. The allowed bitcast is the only difference from shaped()
.
TTypes< T, NDIMS >::Tensor bit_casted_tensor()
Return the tensor data to an Eigen::Tensor
with the same size but a bitwise cast to the specified dtype T
.
Using a bitcast is useful for move and copy operations. NOTE: this is the same as tensor()
except a bitcast is allowed.
TTypes< T, NDIMS >::ConstTensor bit_casted_tensor() const
Return the tensor data to an Eigen::Tensor
with the same size but a bitwise cast to the specified dtype T
.
Using a bitcast is useful for move and copy operations. NOTE: this is the same as tensor()
except a bitcast is allowed.
int64 dim_size( int d ) const
Convenience accessor for the tensor shape.
int dims() const
Convenience accessor for the tensor shape.
For all shape accessors, see comments for relevant methods of TensorShape
in tensor_shape.h
.
DataType dtype() const
Returns the data type.
TTypes< T >::Flat flat()
Return the tensor data as an Eigen::Tensor
of the data type and a specified shape.
These methods allow you to access the data with the dimensions and sizes of your choice. You do not need to know the number of dimensions of the Tensor to call them. However, they CHECK
that the type matches and the dimensions requested creates an Eigen::Tensor
with the same number of elements as the tensor.
Example:
```c++
typedef float T; Tensor my_ten(...built with Shape{planes: 4, rows: 3, cols: 5}...); // 1D Eigen::Tensor, size 60: auto flat = my_ten.flat(); // 2D Eigen::Tensor 12 x 5: auto inner = my_ten.flat_inner_dims(); // 2D Eigen::Tensor 4 x 15: auto outer = my_ten.shaped({4, 15}); // CHECK fails, bad num elements: auto outer = my_ten.shaped({4, 8}); // 3D Eigen::Tensor 6 x 5 x 2: auto weird = my_ten.shaped({6, 5, 2}); // CHECK fails, type mismatch: auto bad = my_ten.flat();
```
TTypes< T >::ConstFlat flat() const
TTypes< T, NDIMS >::Tensor flat_inner_dims()
TTypes< T, NDIMS >::ConstTensor flat_inner_dims() const
TTypes< T, NDIMS >::Tensor flat_outer_dims()
TTypes< T, NDIMS >::ConstTensor flat_outer_dims() const
TTypes< T >::Matrix matrix()
TTypes< T >::ConstMatrix matrix() const
Tensor & operator=( const Tensor & other )
Assign operator. This tensor shares other's underlying storage.
Tensor & operator=( Tensor && other )
Move operator. See move constructor for details.
TTypes< T >::Scalar scalar()
TTypes< T >::ConstScalar scalar() const
const TensorShape & shape() const
Returns the shape of the tensor.
TTypes< T, NDIMS >::Tensor shaped( gtl::ArraySlice< int64 > new_sizes )
TTypes< T, NDIMS >::ConstTensor shaped( gtl::ArraySlice< int64 > new_sizes ) const
TTypes< T, NDIMS >::Tensor tensor()
TTypes< T, NDIMS >::ConstTensor tensor() const
StringPiece tensor_data() const
Returns a StringPiece
mapping the current tensor's buffer.
The returned StringPiece
may point to memory location on devices that the CPU cannot address directly.
NOTE: The underlying tensor buffer is refcounted, so the lifetime of the contents mapped by the StringPiece
matches the lifetime of the buffer; callers should arrange to make sure the buffer does not get destroyed while the StringPiece
is still used.
REQUIRES: DataTypeCanUseMemcpy(dtype())
.
TTypes< T >::UnalignedFlat unaligned_flat()
TTypes< T >::UnalignedConstFlat unaligned_flat() const
TTypes< T, NDIMS >::UnalignedTensor unaligned_shaped( gtl::ArraySlice< int64 > new_sizes )
TTypes< T, NDIMS >::UnalignedConstTensor unaligned_shaped( gtl::ArraySlice< int64 > new_sizes ) const
TTypes< T >::Vec vec()
Return the tensor data as an Eigen::Tensor
with the type and sizes of this Tensor
.
Use these methods when you know the data type and the number of dimensions of the Tensor and you want an Eigen::Tensor
automatically sized to the Tensor
sizes. The implementation check fails if either type or sizes mismatch.
Example:
```c++
typedef float T; Tensor my_mat(...built with Shape{rows: 3, cols: 5}...); auto mat = my_mat.matrix(); // 2D Eigen::Tensor, 3 x 5. auto mat = my_mat.tensor(); // 2D Eigen::Tensor, 3 x 5. auto vec = my_mat.vec(); // CHECK fails as my_mat is 2D. auto vec = my_mat.tensor(); // CHECK fails as my_mat is 2D. auto mat = my_mat.matrix();// CHECK fails as type mismatch.
```
TTypes< T >::ConstVec vec() const
Const versions of all the methods above.
~Tensor()
© 2017 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/api_docs/cc/class/tensorflow/tensor.html