A node train stream for brain.js
Streams are a very powerful tool in node for massive data spread across processes and are provided via the brain.js api in the following way:
import { NeuralNetwork } from 'brain.js'; import { TrainStream } from 'train-stream'; const net = new NeuralNetwork(); const trainStream = new TrainStream({ neuralNetwork: net, floodCallback: () => { readInputs(trainStream, data); }, doneTrainingCallback: (stats) => { // network is done training! What next? }, }); // kick it off readInputs(trainStream, data); function readInputs(stream, data) { for (let i = 0; i < data.length; i++) { stream.write(data[i]); } // let it know we've reached the end of the inputs stream.endInputs(); }
import { recurrent, utilities } from 'brain.js'; import { TrainStream } from 'train-stream'; const { LSTM } = recurrent; const neuralNetwork = new LSTM({ hiddenLayers: [10], dataFormatter: new utilities.DataFormatter(), // You'll need to setup a dataformatter }); const trainStream = new TrainStream({ neuralNetwork, floodCallback: () => { trainStream.write(myData); trainStream.endInputs(); }, doneTrainingCallback: (stats) => { // network is done training! What next? }, });
An example of using train stream can be found in examples/stream-example.ts
The network now has a WriteStream. You can train the network by using pipe()
to send the training data to the network.
To train the network using a stream you must first initialize the stream new TrainStream({ neuralNetwork, floodCallback, doneTrainingCallback })
which takes the following options:
neuralNetwork
- the instance of neural network from brain.js used with the stream. Examples areNeuralNetwork
,LSTMTimeStep
, orLSTM
.floodCallback
- the callback function to re-populate the stream. This gets called on every training iteration.doneTrainingCallback(info: { error: number, iterations: number})
- the callback function to execute when the network is done training. Theinfo
param will contain a hash of information about how the training went.
Use a Transform to coerce the data into the correct format. You might also use a Transform stream to normalize your data on the fly.