JSFiddle - React, Tailwind, and code Playground
HTML
<script src="https://cdn.rawgit.com/wagenaartje/neataptic/cd0d9e68/dist/neataptic.js"></script>
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<div class="container">
<h3>Sequence prediction w/ <a href="https://github.com/wagenaartje/neataptic">Neataptic</a></h3>
<p>Make a choice: </p>
<div class="btn-group">
<button class="btn btn-primary heads">Heads</button>
<button class="btn btn-default tails">Tails</button>
</div>
<p>Current sequence:</p>
<div class="btn-group sequence">
</div>
<p>Prediction:</p>
<div class="prediction">
<button class="btn btn-default prediction" disabled>None</button>
</div>
JavaScript
/** Rename vars */
var network = new neataptic.Architect.LSTM(1,12,1);;
var previous = null;
var trainingData = [];
function predict(){
// Iterate over previous sets to get into the 'flow'
for(var i in trainingData){
var input = trainingData[i].input;
var output = Math.round(network.activate([input]));
}
// Activate network with previous output
var input = output;
var output = Math.round(network.activate([input]))
if(output){
$('.prediction').html('<button class="btn btn-primary">Heads</button>');
} else {
$('.prediction').html('<button class="btn btn-default">Tails</button>');
}
}
function train(){
// Train the network, setting clue to true is the key to the solution
network.train(trainingData, {
log: 500,
iterations: 5000,
error: 0.03,
clear: true,
rate: 0.05,
});
}
function addSet(side){
if(side){
$('.sequence').append('<button class="btn btn-primary">Heads</button>');
} else {
$('.sequence').append('<button class="btn btn-default">Tails</button>');
}
if(previous != null){
trainingData.push({ input: [previous], output: [side] });
train();
predict();
}
previous = side;
}
$( document ).ready(function() {
$('.heads').click(function(){
addSet(1);
});
$('.tails').click(function(){
addSet(0);
});
});