keras-js
Version:
Run Keras models in the browser, with GPU support using WebGL
26 lines (25 loc) • 3.66 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.linear = exports.hard_sigmoid = exports.sigmoid = exports.tanh = exports.relu = exports.softsign = exports.softplus = exports.selu = exports.elu = exports.softmax = void 0;
const softmaxProgramSource = "#version 300 es\nprecision highp float;\n\nin vec2 outTex;\nuniform sampler2D x;\nout vec4 outColor;\n\nvoid main() {\n ivec2 size = textureSize(x, 0);\n int out_x = int(float(size[0]) * outTex.x);\n int out_y = int(float(size[1]) * outTex.y);\n\n float maxval = 0.0;\n for (int i = 0; i < int(size[0]); ++i) {\n float val = texelFetch(x, ivec2(i, out_y), 0).r;\n if (i == 0 || val > maxval) {\n maxval = val;\n }\n }\n\n float sum = 0.0;\n for (int i = 0; i < int(size[0]); ++i) {\n float val = texelFetch(x, ivec2(i, out_y), 0).r;\n sum += exp(val - maxval);\n }\n\n outColor = exp(texture(x, vec2(outTex.x, outTex.y)) - maxval) / sum;\n}\n";
exports.softmax = softmaxProgramSource;
const eluProgramSource = "#version 300 es\nprecision highp float;\n\nin vec2 outTex;\nuniform sampler2D x;\nout vec4 outColor;\n\nvoid main() {\n float alpha = 1.0;\n vec4 v = texture(x, vec2(outTex.x, outTex.y));\n outColor = max(v, 0.0) + alpha * (exp(min(v, 0.0)) - 1.0);\n}\n";
exports.elu = eluProgramSource;
const seluProgramSource = "#version 300 es\nprecision highp float;\n\nin vec2 outTex;\nuniform sampler2D x;\nout vec4 outColor;\n\nvoid main() {\n float alpha = 1.6732632423543772848170429916717;\n float scale = 1.0507009873554804934193349852946;\n vec4 v = texture(x, vec2(outTex.x, outTex.y));\n outColor = scale * (max(v, 0.0) + alpha * (exp(min(v, 0.0)) - 1.0));\n}\n";
exports.selu = seluProgramSource;
const softplusProgramSource = "#version 300 es\nprecision highp float;\n\nin vec2 outTex;\nuniform sampler2D x;\nout vec4 outColor;\n\nvoid main() {\n outColor = log(1.0 + exp(texture(x, vec2(outTex.x, outTex.y))));\n}\n";
exports.softplus = softplusProgramSource;
const softsignProgramSource = "#version 300 es\nprecision highp float;\n\nin vec2 outTex;\nuniform sampler2D x;\nout vec4 outColor;\n\nvoid main() {\n vec4 v = texture(x, vec2(outTex.x, outTex.y));\n v /= 1.0 + abs(v);\n outColor = v;\n}\n";
exports.softsign = softsignProgramSource;
const reluProgramSource = "#version 300 es\nprecision highp float;\n\nin vec2 outTex;\nuniform sampler2D x;\nout vec4 outColor;\n\nvoid main() {\n vec4 v = texture(x, vec2(outTex.x, outTex.y));\n outColor = max(v, 0.0);\n}\n";
exports.relu = reluProgramSource;
const tanhProgramSource = "#version 300 es\nprecision highp float;\n\nin vec2 outTex;\nuniform sampler2D x;\nout vec4 outColor;\n\nvoid main() {\n vec4 v = texture(x, vec2(outTex.x, outTex.y));\n outColor = tanh(v);\n}\n";
exports.tanh = tanhProgramSource;
const sigmoidProgramSource = "#version 300 es\nprecision highp float;\n\nin vec2 outTex;\nuniform sampler2D x;\nout vec4 outColor;\n\nvoid main() {\n outColor = 1.0 / (1.0 + exp(-1.0 * texture(x, vec2(outTex.x, outTex.y))));\n}\n";
exports.sigmoid = sigmoidProgramSource;
const hardSigmoidProgramSource = "#version 300 es\nprecision highp float;\n\nin vec2 outTex;\nuniform sampler2D x;\nout vec4 outColor;\n\nvoid main() {\n vec4 v = texture(x, vec2(outTex.x, outTex.y));\n v = v * 0.2 + 0.5;\n v = max(v, 0.0);\n v = min(v, 1.0);\n outColor = v;\n}\n";
exports.hard_sigmoid = hardSigmoidProgramSource;
const linearProgramSource = "#version 300 es\nprecision highp float;\n\nin vec2 outTex;\nuniform sampler2D x;\nout vec4 outColor;\n\nvoid main() {\n outColor = texture(x, vec2(outTex.x, outTex.y));\n}\n";
exports.linear = linearProgramSource;