Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save robertleeplummerjr/e416bcb64c2c81bd5fc4f23e70a7a3e9 to your computer and use it in GitHub Desktop.
Save robertleeplummerjr/e416bcb64c2c81bd5fc4f23e70a7a3e9 to your computer and use it in GitHub Desktop.
a mostly pseudo script of the gpu version of sigmoid runInput
//existing neural net
class NeuralNetwork {
runInput(input) {
this.outputs[0] = input; // set output state of input layer
let output = null;
for (let layer = 1; layer <= this.outputLayer; layer++) {
for (let node = 0; node < this.sizes[layer]; node++) {
let weights = this.weights[layer][node];
let sum = this.biases[layer][node];
for (let k = 0; k < weights.length; k++) {
sum += weights[k] * input[k];
}
this.outputs[layer][node] = 1 / (1 + Math.exp(-sum));
}
output = input = this.outputs[layer];
}
return output;
}
}
//with gpu.js
class NeuralNetwork {
makeLayers() {
const layers = this.layers;
const kernels = this.kernels;
for (let i = 0; i < layers.length; i++) {
const layer = layers[i];
const kernel = gpu.createKernel(`function(input, weights, biases) {
var sum = biases[this.thread.x];
for (var i = 0; i < ${ weights.length }; i++) {
sum += weights[i] * input[i];
}
return 1 / (1 + Math.exp(-sum));
}`, {
dimensions: [layer.length - 1]
});
kernel.build(new Array(this.size[i]), layer.weights, layer.biases);
kernels.push(kernel);
}
}
runInput(input) {
this.outputs[0] = input; // set output state of input layer
let output = null;
for (let layer = 1; layer <= this.outputLayer; layer++) {
this.outputs[layer] = this.kernels[layer](input, this.weights[layer], this.biases[layer]);
output = input = this.outputs[layer];
}
return output;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment