In[]:=
net=CloudGet@CloudObject[
https://www.wolframcloud.com/obj/nikm/CAPrediction.wlnet
]
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[]=