"""Local fictional learning reference. No website/database/cloud connection.""" import csv,json,sqlite3,hashlib,math,re,statistics,collections from pathlib import Path def dl_arrays(): import numpy as np rng=np.random.default_rng(8);x=rng.normal(size=(40,2));y=(x[:,0]+.6*x[:,1]>0).astype(float) return x,y def dl_backprop(source,out): import numpy as np x,y=dl_arrays();x=x[:24];y=y[:24];w=np.array([.1,-.1]);b=.0 def loss(w,b): z=x@w+b;return float(np.mean(np.logaddexp(0,z)-y*z)) z=x@w+b;p=1/(1+np.exp(-z));grad=x.T@(p-y)/len(y);eps=1e-5 finite=np.array([(loss(w+np.eye(2)[i]*eps,b)-loss(w-np.eye(2)[i]*eps,b))/(2*eps) for i in range(2)]) before=loss(w,b);after=loss(w-.1*grad,b-.1*float((p-y).mean())) return {'training_rows':24,'loss_before':before,'loss_after_one_step':after,'analytic_gradient':grad.tolist(),'finite_difference_gradient':finite.tolist(),'max_gradient_error':float(np.max(np.abs(grad-finite))),'test_used':False} if __name__=='__main__': import argparse,platform parser=argparse.ArgumentParser();parser.add_argument('--source',default='.');parser.add_argument('--output',required=True);args=parser.parse_args() source=Path(args.source).resolve();out=Path(args.output).resolve() if source==out:raise ValueError('Source and output must differ') out.mkdir(parents=False,exist_ok=False) # Partial folders after an error are NOT successful; result.json is written last. result=dl_backprop(source,out) with (out/'result.json').open('x',encoding='utf-8') as handle:json.dump(result,handle,indent=2,allow_nan=False);handle.write(chr(10)) print(json.dumps(result,indent=2,allow_nan=False))