UNPKG

@tensorflow/tfjs-core

Version:

Hardware-accelerated JavaScript library for machine intelligence

264 lines (263 loc) 9.93 kB
/** * @license * Copyright 2017 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================================= */ import { ArrayMap, BackendValues, DataType, DataTypeMap, DataValues, NumericDataType, Rank, ShapeMap, SingleValueMap } from './types'; export interface TensorData<D extends DataType> { dataId?: DataId; values?: DataTypeMap[D]; } export interface Backend { } /** * A mutable object, similar to `tf.Tensor`, that allows users to set values * at locations before converting to an immutable `tf.Tensor`. * * See `tf.buffer` for creating a tensor buffer. * * @doc {heading: 'Tensors', subheading: 'Classes'} */ export declare class TensorBuffer<R extends Rank, D extends DataType = 'float32'> { dtype: D; size: number; shape: ShapeMap[R]; strides: number[]; values: DataTypeMap[D]; constructor(shape: ShapeMap[R], dtype: D, values?: DataTypeMap[D]); /** * Sets a value in the buffer at a given location. * * @param value The value to set. * @param locs The location indices. * * @doc {heading: 'Tensors', subheading: 'Creation'} */ set(value: SingleValueMap[D], ...locs: number[]): void; /** * Returns the value in the buffer at the provided location. * * @param locs The location indices. * * @doc {heading: 'Tensors', subheading: 'Creation'} */ get(...locs: number[]): SingleValueMap[D]; locToIndex(locs: number[]): number; indexToLoc(index: number): number[]; readonly rank: number; /** * Creates an immutable `tf.Tensor` object from the buffer. * * @doc {heading: 'Tensors', subheading: 'Creation'} */ toTensor(): Tensor<R>; } export interface TensorTracker { makeTensor(values: DataValues, shape: number[], dtype: DataType, backend?: Backend): Tensor; makeVariable(initialValue: Tensor, trainable?: boolean, name?: string, dtype?: DataType): Variable; incRef(a: Tensor, backend: Backend): void; disposeTensor(t: Tensor): void; disposeVariable(v: Variable): void; read(dataId: DataId): Promise<BackendValues>; readSync(dataId: DataId): BackendValues; } /** * The Tensor class calls into this handler to delegate chaining operations. */ export interface OpHandler { cast<T extends Tensor>(x: T, dtype: DataType): T; buffer<R extends Rank, D extends DataType>(shape: ShapeMap[R], dtype: D, values?: DataTypeMap[D]): TensorBuffer<R, D>; print<T extends Tensor>(x: T, verbose: boolean): void; clone<T extends Tensor>(x: T): T; } /** * An external consumer can register itself as the tensor tracker. This way * the Tensor class can notify the tracker for every tensor created and * disposed. */ export declare function setTensorTracker(fn: () => TensorTracker): void; /** * An external consumer can register itself as the op handler. This way the * Tensor class can have chaining methods that call into ops via the op * handler. */ export declare function setOpHandler(handler: OpHandler): void; /** * Sets the deprecation warning function to be used by this file. This way the * Tensor class can be a leaf but still use the environment. */ export declare function setDeprecationWarningFn(fn: (msg: string) => void): void; /** * We wrap data id since we use weak map to avoid memory leaks. * Since we have our own memory management, we have a reference counter * mapping a tensor to its data, so there is always a pointer (even if that * data is otherwise garbage collectable). * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/ * Global_Objects/WeakMap */ export declare type DataId = object; export declare namespace Tensor { } /** * A `tf.Tensor` object represents an immutable, multidimensional array of * numbers that has a shape and a data type. * * See `tf.tensor` for details on how to create a `tf.Tensor`. * * @doc {heading: 'Tensors', subheading: 'Classes'} */ export declare class Tensor<R extends Rank = Rank> { /** Unique id of this tensor. */ readonly id: number; /** * Id of the bucket holding the data for this tensor. Multiple arrays can * point to the same bucket (e.g. when calling array.reshape()). */ dataId: DataId; /** The shape of the tensor. */ readonly shape: ShapeMap[R]; /** Number of elements in the tensor. */ readonly size: number; /** The data type for the array. */ readonly dtype: DataType; /** The rank type for the array (see `Rank` enum). */ readonly rankType: R; /** Whether this tensor has been globally kept. */ kept: boolean; /** The id of the scope this tensor is being tracked in. */ scopeId: number; /** * Number of elements to skip in each dimension when indexing. See * https://docs.scipy.org/doc/numpy/reference/generated/\ * numpy.ndarray.strides.html */ readonly strides: number[]; constructor(shape: ShapeMap[R], dtype: DataType, dataId: DataId, id: number); readonly rank: number; /** * Returns a promise of `tf.TensorBuffer` that holds the underlying data. * * @doc {heading: 'Tensors', subheading: 'Classes'} */ buffer<D extends DataType = 'float32'>(): Promise<TensorBuffer<R, D>>; /** * Returns a `tf.TensorBuffer` that holds the underlying data. * @doc {heading: 'Tensors', subheading: 'Classes'} */ bufferSync<D extends DataType = 'float32'>(): TensorBuffer<R, D>; /** * Returns the tensor data as a nested array. The transfer of data is done * asynchronously. * * @doc {heading: 'Tensors', subheading: 'Classes'} */ array(): Promise<ArrayMap[R]>; /** * Returns the tensor data as a nested array. The transfer of data is done * synchronously. * * @doc {heading: 'Tensors', subheading: 'Classes'} */ arraySync(): ArrayMap[R]; /** * Asynchronously downloads the values from the `tf.Tensor`. Returns a * promise of `TypedArray` that resolves when the computation has finished. * * @doc {heading: 'Tensors', subheading: 'Classes'} */ data<D extends DataType = NumericDataType>(): Promise<DataTypeMap[D]>; /** * Synchronously downloads the values from the `tf.Tensor`. This blocks the * UI thread until the values are ready, which can cause performance issues. * * @doc {heading: 'Tensors', subheading: 'Classes'} */ dataSync<D extends DataType = NumericDataType>(): DataTypeMap[D]; /** Returns the underlying bytes of the tensor's data. */ bytes(): Promise<Uint8Array[] | Uint8Array>; /** * Disposes `tf.Tensor` from memory. * * @doc {heading: 'Tensors', subheading: 'Classes'} */ dispose(): void; protected isDisposedInternal: boolean; readonly isDisposed: boolean; throwIfDisposed(): void; /** * Prints the `tf.Tensor`. See `tf.print` for details. * * @param verbose Whether to print verbose information about the tensor, * including dtype and size. * * @doc {heading: 'Tensors', subheading: 'Classes'} */ print(verbose?: boolean): void; /** * Returns a copy of the tensor. See `tf.clone` for details. * @doc {heading: 'Tensors', subheading: 'Classes'} */ clone<T extends Tensor>(this: T): T; /** * Returns a human-readable description of the tensor. Useful for logging. * * @doc {heading: 'Tensors', subheading: 'Classes'} */ toString(verbose?: boolean): string; variable(trainable?: boolean, name?: string, dtype?: DataType): Variable<R>; } export declare function getGlobalTensorClass(): typeof Tensor; export interface NumericTensor<R extends Rank = Rank> extends Tensor<R> { dtype: NumericDataType; dataSync<D extends DataType = NumericDataType>(): DataTypeMap[D]; data<D extends DataType = NumericDataType>(): Promise<DataTypeMap[D]>; } export interface StringTensor<R extends Rank = Rank> extends Tensor<R> { dtype: 'string'; dataSync<D extends DataType = 'string'>(): DataTypeMap[D]; data<D extends DataType = 'string'>(): Promise<DataTypeMap[D]>; } /** @doclink Tensor */ export declare type Scalar = Tensor<Rank.R0>; /** @doclink Tensor */ export declare type Tensor1D = Tensor<Rank.R1>; /** @doclink Tensor */ export declare type Tensor2D = Tensor<Rank.R2>; /** @doclink Tensor */ export declare type Tensor3D = Tensor<Rank.R3>; /** @doclink Tensor */ export declare type Tensor4D = Tensor<Rank.R4>; /** @doclink Tensor */ export declare type Tensor5D = Tensor<Rank.R5>; /** @doclink Tensor */ export declare type Tensor6D = Tensor<Rank.R6>; /** * A mutable `tf.Tensor`, useful for persisting state, e.g. for training. * * @doc {heading: 'Tensors', subheading: 'Classes'} */ export declare class Variable<R extends Rank = Rank> extends Tensor<R> { trainable: boolean; name: string; constructor(initialValue: Tensor<R>, trainable: boolean, name: string, tensorId: number); /** * Assign a new `tf.Tensor` to this variable. The new `tf.Tensor` must have * the same shape and dtype as the old `tf.Tensor`. * * @param newValue New tensor to be assigned to this variable. * * @doc {heading: 'Tensors', subheading: 'Classes'} */ assign(newValue: Tensor<R>): void; dispose(): void; }