JSFiddle - React, Tailwind, and code Playground
HTML
<script src="https://code.jquery.com/jquery-3.2.1.slim.js"></script>
<script src="https://wagenaartje.github.io/neataptic/cdn/1.2.34/neataptic.js"></script>
<p class="text">
</p>
JavaScript
/** Rename vars */
var Neat = neataptic.Neat;
var Methods = neataptic.Methods;
var Config = neataptic.Config;
var Architect = neataptic.Architect;
var Network = neataptic.Network;
var Node = neataptic.Node;
/** Turn off warnings */
Config.warnings = false;
/** Text to learn */
var text = `Am I concious? Or am I not?`;
/** Unique characters */
text = text.toLowerCase();
var characters = text.split('').filter(function(item, i, ar){ return ar.indexOf(item) === i; });
/** One-hot encode them */
var onehot = {};
for(var i = 0; i < characters.length; i++){
var zeros = Array.apply(null, Array(characters.length)).map(Number.prototype.valueOf, 0);
zeros[i] = 1;
var character = characters[i];
onehot[character] = zeros;
}
/** Prepare the data-set */
var dataSet = [];
var previous = text[0];
for(var i = 1 ; i < text.length; i++){
var next = text[i];
dataSet.push({ input: onehot[previous], output: onehot[next] });
previous = next;
}
/** Create the network */
var network = new Architect.LSTM(characters.length, 10, characters.length);
function writeSentence(){
$('.text').text('');
var output = network.activate(dataSet[0].input);
$('.text').append(text[0]);
for(var i = 0; i < text.length; i++){
var max = Math.max.apply(null, output);
var index = output.indexOf(max);
var zeros = Array.apply(null, Array(characters.length)).map(Number.prototype.valueOf, 0);
zeros[index] = 1;
var character = Object.keys(onehot).find(key => onehot[key].toString() === zeros.toString());
$('.text').append(character);
output = network.activate(zeros);
}
}
$( document ).ready(function() {
console.log('Network conns', network.connections.length, 'nodes', network.nodes.length);
console.log('Dataset size:', dataSet.length);
console.log('Characters:', Object.keys(onehot).length);
network.train(dataSet, {
log: 1,
rate: 0.1,
cost: Methods.Cost.MSE,
error: 0.005,
clear: true
});
writeSentence();
});