function cnet = init(cnet)
r = cnet.SLayer{1}.SRate;
cnet.SLayer{1}.WS{1} = ones(floor(cnet.InputHeight/r),floor(cnet.InputWidth/r));
cnet.SLayer{1}.BS{1} = zeros(floor(cnet.InputHeight/r),floor(cnet.InputWidth/r));
cnet.SLayer{1}.FMapWidth = floor(cnet.InputWidth/r);
cnet.SLayer{1}.FMapHeight = floor(cnet.InputHeight/r);
cnet.SLayer{1}.numFMaps = 1;
for k=2:(cnet.numLayers-cnet.numFLayers)
if(rem(k,2))
for l=1:cnet.CLayer{k-1}.numFMaps
r = cnet.SLayer{k}.SRate;
fmw = cnet.CLayer{k-1}.FMapWidth;
fmh = cnet.CLayer{k-1}.FMapHeight;
cnet.SLayer{k}.WS{l}= 1;
cnet.SLayer{k}.BS{l} = rand_std(1, 1, 1);
cnet.SLayer{k}.FMapWidth = floor(fmw/r);
cnet.SLayer{k}.FMapHeight = floor(fmh/r);
end
cnet.SLayer{k}.numFMaps = cnet.CLayer{k-1}.numFMaps;
cnet.SLayer{k}.dEdX=cell(1,cnet.SLayer{k}.numFMaps);
else
for l=1:cnet.CLayer{k}.numKernels
kw = cnet.CLayer{k}.KernWidth;
kh = cnet.CLayer{k}.KernHeight;
cnet.CLayer{k}.WC{l} = rand_std(kh, kw, kh*kw*cnet.CLayer{k}.numKernels);
fmw = cnet.SLayer{k-1}.FMapWidth;
fmh = cnet.SLayer{k-1}.FMapHeight;
cnet.CLayer{k}.BC{l} = rand_std(1, 1, kh*kw*cnet.CLayer{k}.numKernels);
cnet.CLayer{k}.FMapWidth = fmw-kw+1;
cnet.CLayer{k}.FMapHeight = fmh-kh+1;
end
if (~cnet.CLayer{k}.ConMap)
cnet.CLayer{k}.ConMap = ones(cnet.CLayer{k}.numKernels, cnet.SLayer{k-1}.numFMaps);
end
cnet.CLayer{k}.numFMaps = cnet.CLayer{k}.numKernels;
cnet.CLayer{k}.dEdX=cell(1,cnet.CLayer{k}.numFMaps);
end
end
for k=(cnet.numLayers-cnet.numFLayers+1):cnet.numLayers
if (k == cnet.numCLayers+cnet.numSLayers+1)
cnet.FLayer{k}.W = rand_std(cnet.CLayer{k-1}.numFMaps,cnet.FLayer{k}.numNeurons,cnet.CLayer{k-1}.numFMaps+1);
cnet.FLayer{k}.B = rand_std(1,cnet.FLayer{k}.numNeurons,cnet.CLayer{k-1}.numFMaps+1);
else
cnet.FLayer{k}.W = rand_std(cnet.FLayer{k-1}.numNeurons,cnet.FLayer{k}.numNeurons,cnet.FLayer{k-1}.numNeurons+1);
cnet.FLayer{k}.B = rand_std(1,cnet.FLayer{k}.numNeurons,cnet.FLayer{k-1}.numNeurons+1);
end
end