In[]:=
In[]:=
autoEncoder[net_]:=NetGraph[{"encode"->NetExtract[net,{"vae","Net","encoder"}],"decode"->NetExtract[net,{"vae","Net","decoder"}]},{NetPort["Input"]->"encode",NetPort[{"encode","Mean"}]->"decode"->NetPort["Output"]},"Input"->NetEncoder[{"Image",{32,32},ColorSpace->"Grayscale"}],"Output"->NetDecoder["Image"]]extractPredict[net_]:=NetGraph[{"encode"->NetExtract[net,{"vae","Net","encoder"}],"predict"->NetExtract[net,{"prediction","predict"}],"decode"->NetExtract[net,{"vae","Net","decoder"}]},{NetPort["Input"]->"encode",NetPort[{"encode","Mean"}]->"predict"->"decode"->NetPort["Output"]},"Input"->NetEncoder[{"Image",{32,32},ColorSpace->"Grayscale"}],"Output"->NetDecoder["Image"]]
In[]:=
ae=autoEncoder[net];
In[]:=
predict=extractPredict[net];
In[]:=
decoder=NetChain[{NetExtract[net,{"vae","Net","decoder"}]},"Output"->NetDecoder["Image"]];
In[]:=
RandomTotalisticCAImage[rule_,colors_,size_]:=Image[255/3CellularAutomaton[{rule,{colors,1}},{RandomInteger[colors-1,size],0},{2size-1,{0,size-1}}],"Byte"]
In[]:=
GraphicsRow@Table[ImageResize[RandomTotalisticCAImage[1004600,4,512],64],16]
Out[]=
In[]:=
GraphicsRow@decoder@RandomReal[1,{16,4,4,4}]
Out[]=
In[]:=
Column@Table[Block[{img=RandomTotalisticCAImage[1004600,4,512],origX,origY},{origX,origY}=Flatten@ImagePartition[img,512];GraphicsGrid[{Style[#,Large]&/@{"Original","AutoEncoder + Prediction"},{origX,ae[origX]["Output"]},{origY,predict[origX]["Output"]}},PlotRangePadding->0,ImageSize->Large]],10]
Out[]=