Ramp[]
Ramp[x]
In[]:=
SeedRandom[234234];data=SortBy[RandomReal[{-1,1},{10,2}],First];
In[]:=
reluParameters[data_]:=<|"InnerBiases"->-data[[1;;-2,1]],"OuterWeights"->With[{slopes=Differences[data[[All,2]]]/Differences[data[[All,1]]]},Differences[Prepend[slopes,0]]],"OuterBias"->data[[1,2]]|>
In[]:=
reluNN[data_]:=With[{params=reluParameters[data]},NetChain[{LinearLayer[Length[data]-1,"Weights"->1,"Biases"->params[["InnerBiases"]]],ElementwiseLayer["ReLU"],LinearLayer[1,"Weights"->{params[["OuterWeights"]]},"Biases"->{params[["OuterBias"]]}]},"Input"->"Real"]]
In[]:=
NetGraphPlotRaw[reluNN[data],"AddArrows"->True,Epilog->{Style[{Text[x,{0,2+3/4}],Text[f[x],{0,-2/3}]},Gray]}]
Out[]=
In[]:=
SeedRandom[56364];Total[Table[Ramp[RandomReal[{-3,3}]+RandomReal[{-1,1},2].{x,y}],10]]
Out[]=
Ramp[2.36341-0.446129x-0.912377y]+Ramp[1.00037+0.989245x-0.870025y]+Ramp[-2.06748-0.569231x-0.737585y]+Ramp[-2.30533-0.741859x-0.264173y]+Ramp[-0.7452+0.272199x-0.223838y]+Ramp[-1.91318+0.801932x-0.156417y]+Ramp[-0.1581-0.568971x-0.0181508y]+Ramp[-0.296776-0.397478x+0.0744393y]+Ramp[-1.96326+0.789235x+0.456929y]+Ramp[-1.89036-0.99802x+0.493731y]
In[]:=
Plot3D[Evaluate[SeedRandom[56364];Total[Table[Ramp[RandomReal[{-3,3}]+RandomReal[{-1,1},2].{x,y}],10]]],{x,-4,4},{y,-4,4},PlotPoints->50,Mesh->40,MeshFunctions->{#3&},Axes->False]
Out[]=
In[]:=
ParallelEvaluate[1]
Out[]=
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}
In[]:=
With[{n=3},ParallelTable[{NetGraphPlot[#],Rasterize@ContourPlot[#[{x,y}],{x,-6,6},{y,-6,6},Contours->10,FrameTicks->None]}&[NetInitialize[NetChain[Flatten[Append[Table[{LinearLayer[n],Ramp},d],LinearLayer[1]]],"Input"->2],RandomSeeding->442525+id]],{i,3},{d,4}]]