brain.js
Version:
Neural networks in JavaScript
162 lines • 6.95 kB
TypeScript
import { ITrainingStatus } from './feed-forward';
import { INumberHash } from './lookup';
import { INeuralNetworkBinaryTestResult, INeuralNetworkState, INeuralNetworkTestResult } from './neural-network-types';
declare type NeuralNetworkFormatter = ((v: INumberHash) => Float32Array) | ((v: number[]) => Float32Array);
export declare function getTypedArrayFn(value: INeuralNetworkData, table: INumberHash | null): null | NeuralNetworkFormatter;
export declare type NeuralNetworkActivation = 'sigmoid' | 'relu' | 'leaky-relu' | 'tanh';
export interface IJSONLayer {
biases: number[];
weights: number[][];
}
export interface INeuralNetworkJSON {
type: string;
sizes: number[];
layers: IJSONLayer[];
inputLookup: INumberHash | null;
inputLookupLength: number;
outputLookup: INumberHash | null;
outputLookupLength: number;
options: INeuralNetworkOptions;
trainOpts: INeuralNetworkTrainOptionsJSON;
}
export interface INeuralNetworkOptions {
inputSize: number;
outputSize: number;
binaryThresh: number;
hiddenLayers?: number[];
}
export declare function defaults(): INeuralNetworkOptions;
export interface INeuralNetworkTrainOptionsJSON {
activation: NeuralNetworkActivation | string;
iterations: number;
errorThresh: number;
log: boolean;
logPeriod: number;
leakyReluAlpha: number;
learningRate: number;
momentum: number;
callbackPeriod: number;
timeout: number | 'Infinity';
praxis?: 'adam';
beta1: number;
beta2: number;
epsilon: number;
}
export interface INeuralNetworkPreppedTrainingData<T> {
status: ITrainingStatus;
preparedData: Array<INeuralNetworkDatumFormatted<T>>;
endTime: number;
}
export interface INeuralNetworkTrainOptions {
activation: NeuralNetworkActivation | string;
iterations: number;
errorThresh: number;
log: boolean | ((status: INeuralNetworkState) => void);
logPeriod: number;
leakyReluAlpha: number;
learningRate: number;
momentum: number;
callback?: (status: {
iterations: number;
error: number;
}) => void;
callbackPeriod: number;
timeout: number;
praxis?: 'adam';
beta1: number;
beta2: number;
epsilon: number;
}
export declare function trainDefaults(): INeuralNetworkTrainOptions;
export declare type INeuralNetworkData = number[] | Float32Array | Partial<INumberHash>;
export interface INeuralNetworkDatum<InputType, OutputType> {
input: InputType;
output: OutputType;
}
export interface INeuralNetworkDatumFormatted<T> {
input: T;
output: T;
}
export declare class NeuralNetwork<InputType extends INeuralNetworkData, OutputType extends INeuralNetworkData> {
options: INeuralNetworkOptions;
trainOpts: INeuralNetworkTrainOptions;
sizes: number[];
outputLayer: number;
biases: Float32Array[];
weights: Float32Array[][];
outputs: Float32Array[];
deltas: Float32Array[];
changes: Float32Array[][];
errors: Float32Array[];
errorCheckInterval: number;
inputLookup: INumberHash | null;
inputLookupLength: number;
outputLookup: INumberHash | null;
outputLookupLength: number;
_formatInput: NeuralNetworkFormatter | null;
_formatOutput: NeuralNetworkFormatter | null;
runInput: (input: Float32Array) => Float32Array;
calculateDeltas: (output: Float32Array) => void;
biasChangesLow: Float32Array[];
biasChangesHigh: Float32Array[];
changesLow: Float32Array[][];
changesHigh: Float32Array[][];
iterations: number;
constructor(options?: Partial<INeuralNetworkOptions & INeuralNetworkTrainOptions>);
/**
*
* Expects this.sizes to have been set
*/
initialize(): void;
setActivation(activation?: NeuralNetworkActivation): void;
get isRunnable(): boolean;
run(input: Partial<InputType>): OutputType;
_runInputSigmoid(input: Float32Array): Float32Array;
_runInputRelu(input: Float32Array): Float32Array;
_runInputLeakyRelu(input: Float32Array): Float32Array;
_runInputTanh(input: Float32Array): Float32Array;
/**
*
* Verifies network sizes are initialized
* If they are not it will initialize them based off the data set.
*/
verifyIsInitialized(preparedData: Array<INeuralNetworkDatumFormatted<Float32Array>>): void;
updateTrainingOptions(trainOpts: Partial<INeuralNetworkTrainOptions>): void;
validateTrainingOptions(options: INeuralNetworkTrainOptions): void;
/**
*
* Gets JSON of trainOpts object
* NOTE: Activation is stored directly on JSON object and not in the training options
*/
getTrainOptsJSON(): INeuralNetworkTrainOptionsJSON;
setLogMethod(log: boolean | ((state: INeuralNetworkState) => void)): void;
logTrainingStatus(status: INeuralNetworkState): void;
calculateTrainingError(data: Array<INeuralNetworkDatumFormatted<Float32Array>>): number;
trainPatterns(data: Array<INeuralNetworkDatumFormatted<Float32Array>>): void;
trainingTick(data: Array<INeuralNetworkDatumFormatted<Float32Array>>, status: INeuralNetworkState, endTime: number): boolean;
prepTraining(data: Array<INeuralNetworkDatum<InputType, OutputType>>, options?: Partial<INeuralNetworkTrainOptions>): INeuralNetworkPreppedTrainingData<Float32Array>;
train(data: Array<INeuralNetworkDatum<Partial<InputType>, Partial<OutputType>>>, options?: Partial<INeuralNetworkTrainOptions>): INeuralNetworkState;
trainAsync(data: Array<INeuralNetworkDatum<InputType, OutputType>>, options?: Partial<INeuralNetworkTrainOptions>): Promise<ITrainingStatus>;
trainPattern(value: INeuralNetworkDatumFormatted<Float32Array>, logErrorRate?: boolean): number | null;
_calculateDeltasSigmoid(target: Float32Array): void;
_calculateDeltasRelu(target: Float32Array): void;
_calculateDeltasLeakyRelu(target: Float32Array): void;
_calculateDeltasTanh(target: Float32Array): void;
/**
*
* Changes weights of networks
*/
adjustWeights(): void;
_setupAdam(): void;
_adjustWeightsAdam(): void;
validateData(data: Array<INeuralNetworkDatumFormatted<Float32Array>>): void;
validateInput(formattedInput: Float32Array): void;
formatData(data: Array<INeuralNetworkDatum<InputType, OutputType>>): Array<INeuralNetworkDatumFormatted<Float32Array>>;
addFormat(data: INeuralNetworkDatum<InputType, OutputType>): void;
test(data: Array<INeuralNetworkDatum<Partial<InputType>, Partial<OutputType>>>): INeuralNetworkTestResult | INeuralNetworkBinaryTestResult;
toJSON(): INeuralNetworkJSON;
fromJSON(json: INeuralNetworkJSON): this;
toFunction(cb?: (source: string) => string): (input: Partial<InputType>) => OutputType;
}
export {};
//# sourceMappingURL=neural-network.d.ts.map