UNPKG

keras-js

Version:

Run Keras models in the browser, with GPU support using WebGL

26 lines (25 loc) 3.66 kB
"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;