train-kit / dist / tf.js
1
2
3
4
5
6
7
8
9
import { $APP, shadow$provide } from "./shared.js";
const shadow_esm_import = function(x) { return import(x) };
$APP.shadow.esm={};$APP.shadow.esm.dynamic_import=function(a){return shadow_esm_import(a)};$APP.shadow.esm.loadables={};$APP.shadow.esm.loaded={};$APP.shadow.esm.get_loaded=function(a){return $APP.shadow.esm.loaded[""+$APP.cljs.core.str.cljs$core$IFn$_invoke$arity$1(a)]};
$APP.shadow.esm.load_by_name=function(a){var b=""+$APP.cljs.core.str.cljs$core$IFn$_invoke$arity$1(a);a=$APP.shadow.esm.loadables[b];if(!$APP.cljs.core.truth_(a))throw Error("could not find loadable info for: "+$APP.cljs.core.str.cljs$core$IFn$_invoke$arity$1(b));var c=a.get;return $APP.shadow.esm.dynamic_import("./"+$APP.cljs.core.str.cljs$core$IFn$_invoke$arity$1(a.module)+".js").then(function(d){return $APP.shadow.esm.loaded[b]=c})};
$APP.shadow.esm.add_loadable=function(a,b,c){return $APP.shadow.esm.loadables[""+$APP.cljs.core.str.cljs$core$IFn$_invoke$arity$1(a)]={module:b,get:c}};$APP.ardegazu.train.tf={};$APP.ardegazu.train.tf.cached=$APP.cljs.core.volatile_BANG_(null);
$APP.ardegazu.train.tf.load_tf=function(){var a=$APP.cljs.core.deref($APP.ardegazu.train.tf.cached);return a==null?$APP.shadow.esm.dynamic_import("@tensorflow/tfjs-node").then(function(b){$APP.cljs.core.vreset_BANG_($APP.ardegazu.train.tf.cached,b);return b}).catch(function(b){throw Error("@tensorflow/tfjs-node is not installed — it is an optional peer dependency needed only for training (fitNet/loadTf): "+$APP.cljs.core.str.cljs$core$IFn$_invoke$arity$1(b.message));}):Promise.resolve(a)};
$APP.ardegazu.train.tf.net_to_tf=function(a,b,c){for(var d=a.sequential(),e=b.sizes,f=e.length,g=1;;)if(g<f)d.add(a.layers.dense({units:e[g],inputShape:g===1?[e[0]]:void 0,activation:g<f-1?"relu":"linear"})),g+=1;else break;d.compile({optimizer:a.train.adam(c),loss:"meanSquaredError"});c=[];b=b.layers;f=b.length;for(g=0;;)if(g<f){for(var h=e[g],k=e[g+1],l=b[g],m=l.w,n=new Float32Array(h*k),p=k,q=0;;)if(q<p){for(var r=h,t=0;;)if(t<r)n[t*k+q]=m[q*h+t],t+=1;else break;q+=1}else break;c.push(a.tensor2d(n,
[h,k]));c.push(a.tensor1d(Float32Array.from(l.b)));g+=1}else break;d.setWeights(c);return d};$APP.ardegazu.train.tf.tf_to_net=function(a,b,c){a=b.getWeights();b=[];for(var d=c.length-1,e=0;;)if(e<d){var f=a[e*2+1],g=a[e*2].dataSync();f=f.dataSync();for(var h=c[e],k=c[e+1],l=Array(k*h),m=k,n=0;;)if(n<m){for(var p=h,q=0;;)if(q<p)l[n*h+q]=g[q*k+n],q+=1;else break;n+=1}else break;b.push({w:l,b:Array.from(f)});e+=1}else break;return{sizes:c.slice(),layers:b}};
$APP.ardegazu.train.tf.fit_net=function(a,b,c,d){return $APP.ardegazu.train.tf.load_tf().then(function(e){var f=$APP.ardegazu.train.tf.net_to_tf(e,a,d.lr),g=e.tensor2d(b,[b.length,a.sizes[0]]),h=e.tensor2d(c,[c.length,1]),k=function(){var l=d.batchSize;return l==null?256:l}();return f.fit(g,h,{epochs:d.epochs,batchSize:k,shuffle:!0,verbose:0}).then(function(l){return $APP.ardegazu.train.tf.tf_to_net(e,f,a.sizes)}).finally(function(){g.dispose();h.dispose();return f.dispose()})})};export const loadTf=$APP.ardegazu.train.tf.load_tf;export const netToTf=$APP.ardegazu.train.tf.net_to_tf;export const tfToNet=$APP.ardegazu.train.tf.tf_to_net;export const fitNet=$APP.ardegazu.train.tf.fit_net;

static mirror of HEAD · about · clone: git clone https://git.ardegazu.ro/train-kit.git