UNPKG

brain.js

Version:

Neural networks in JavaScript

162 lines 6.95 kB
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