{"group":{"id":1,"name":"Community","lockable":false,"created_at":"2012-01-18T18:02:15.000Z","updated_at":"2026-05-26T00:16:20.000Z","description":"Problems submitted by members of the MATLAB Central community.","is_default":true,"created_by":161519,"badge_id":null,"featured":false,"trending":false,"solution_count_in_trending_period":0,"trending_last_calculated":"2026-05-26T00:00:00.000Z","image_id":null,"published":true,"community_created":false,"status_id":2,"is_default_group_for_player":false,"deleted_by":null,"deleted_at":null,"restored_by":null,"restored_at":null,"description_opc":null,"description_html":null,"published_at":null},"problems":[{"id":58877,"title":"Neural Net Image Convolution: Return only Valid portion of conv2","description":"This challenge is to return only the Valid portion of a 2-D convolution. Valid is deemed to be where all elements of the kernel are applied against the image. The (1,1) point with a ones(3) kernel would be invalid while point (2,2) would return a Valid convolution value. The images will be even-square,m, and the kernels will be odd-square,K.The m=ones(6) and K=ones(3) would return a 4x4 matrix of 9s.\r\nmValidConv2=create_ValidConv2(m,K)\r\nIn neural net processing of the Mnist database of digits(0-9) one Convolutional Neural Network method uses 9x9 kernels on the 28x28 images to return the Valid 20x20 central core for the next processing step. The third image includes a black border of four around Valid to maintain scale.\r\n  \r\nThe entire Matlab code from Convolutional Neural Networks in Matlab by Nuruzzaman Faruqui , a Matlab Neural Net Tutorial for Mnist processing, is included in the function template. Loading the Mnist Train/Test Images/Labels from posted MAT files or THE MNIST DATABASE of handwritten digits are provided. The Neural Net tutorial explains Neural Net processing for Digit Recognition. The neural net training method uses 784 input nodes,  20 convolutions(9x9), ReLU, Pooling, batch sampling, single hidden layer of 100 nodes, updating parameters via backwards propagation, and updating convolution kernels. The digit prediction accuracy is \u003e94% after 50s of training. The final feature kernels are very amorphous and unexpected.","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.4333px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 545.5px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 272.75px; transform-origin: 407px 272.75px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 84px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 42px; text-align: left; transform-origin: 384px 42px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 369.5px 8px; transform-origin: 369.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge is to return only the Valid portion of a 2-D convolution. Valid is deemed to be where all elements of the kernel are applied against the image. The (1,1) point with a ones(3) kernel would be invalid while point (2,2) would return a Valid convolution value. The images will be even-square,m, and the kernels will be odd-square,K.The m=ones(6) and K=ones(3) would return a 4x4 matrix of 9s.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 121.5px 8px; transform-origin: 121.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003emValidConv2=create_ValidConv2(m,K)\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 63px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 31.5px; text-align: left; transform-origin: 384px 31.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 379px 8px; transform-origin: 379px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eIn neural net processing of the Mnist database of digits(0-9) one Convolutional Neural Network method uses 9x9 kernels on the 28x28 images to return the Valid 20x20 central core for the next processing step. The third image includes a black border of four around Valid to maintain scale.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 194.5px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 97.25px; text-align: left; transform-origin: 384px 97.25px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline;width: 252px;height: 189px\" src=\"data:image/png;base64,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\" data-image-state=\"image-loaded\" width=\"252\" height=\"189\"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 2px 8px; transform-origin: 2px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline;width: 252px;height: 189px\" src=\"data:image/png;base64,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JMnSpUtT3FNQULB8+fKWlpaFCxfu2rVr8uTJqb+P6bvmbd+Z8frrr99www3z5s2bOHFi2luSJEmam5vfeOONK664ovuwsLDw008/TXHPoEGDWltba2pqkiTZunVrXV3diSeemOIvaWxpaVm7du3UqVO7D/fv35/uNffJJ5/89cO+ffumteTr6urqUn8zZI8dO3aUlZX1/M0MGTLko48+SnHPl19+uXv37kceeaT7cMaMGanfqP/Opf2uiuhWrVoV4V12W7ZsOeecc1auXLn/fxw8eDDdSY2NjeXl5R988EFXV1dra+u4ceP+9re/pTupx89//vPU32X3z3/+s+ctW9u2bRs3btzq1atT3LN///4xY8asXLmyq6vr888/Hz9+/BtvvJHinm5jx45dtWpV2iv+ZdOmTWeddVb3p/TOnTsvuuiiZ555JsU9W7duLS8v37ZtW1dX17p160aPHr1z584U9xwGrpCyoaamZvfu3dddd13Pn1RVVd15550pTiopKbn99tunTJkycuTIdevWzZgx48ILL0xxTzRlZWWzZ8+urKw866yzNm7cOHPmzHRftz/mmGMefvjhm266adGiRU1NTVdffXXq3xvb2dnZ3t4e5NXQJEnKy8tvu+22adOmDR8+/N133506deqUKVNS3FNUVHTzzTdPmjSpvLx869atDz30UOrfWP1d842x5KSzs7Otre3kk08Ocgsoms7Ozr179x533HFx3iPz1VdfHXvssf69vk33P1l+fn6Qv6KOjo59+/YFebvvd02QAAghyv+1AXCUEyQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABC+G8Tb/bPfPYYhwAAAABJRU5ErkJggg==\" data-image-state=\"image-loaded\" width=\"252\" height=\"189\"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 2px 8px; transform-origin: 2px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline;width: 252px;height: 189px\" src=\"data:image/png;base64,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PcuyxsbGQ4cONTY2Zlk2f/785ubmjo6OSu8RgAnJQZAuXbq0devW3bt3b9myZeyZ3t7ekydPlhY8fPiwpiYHJwLAj6n0Ldp/8a9//eu11147e/bsw//16NGja9euvfLKK93d3aOjo/39/atXr75w4cKTf9ZbdgAl8d+yi/57SMeOHfvuu++2bdtWeqalpeXTTz9tbW3dtGnTihUrLl++vGPHDr+EBJB3efopu1RNTU1+uA5gTKFQCP5Tdj56ASAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEHKjUKhUOktPCNT5EynyGlmU+ZMp8hplpUgARCCIAEQwrTR0dFK76FcmpqaKr0FgEC6uroqvYUfU81BAiBHvGUHQAiCBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAIz1V6A/x3g4OD169fLz0sFAqzZ8+u4H7K5OLFi2vWrCk97Ovru3bt2ssvv1x9Eze+f6ZVeXF7enp6e3sbGhpef/310pNVeUGfPNOqvKDPjCDlwKlTp/bv319bWzv28ODBg9//xl0dDh8+fPz48YsXL449PH36dFtb2+rVqzs6Ot5///0PP/ywstubRD840+q7uHv27Dl37tzKlSu7urrq6uqOHj1aW1tblRf0qWdafRf0mRolvI8++uiLL76o9C7KZWho6OOPP37ttdfeeuutsWcePXr02muvdXd3j46O3rlz55e//OU///nPiu5xcjx5pqNVd3GvXLny6quvDg0NjT1ct27dl19+WZUX9KlnOlp1F/QZ8xlSDly9enXJkiWDg4PDw8OV3svkO3DgQENDw2effVZ65sKFC/X19cuWLcuyrKGhYe3ate3t7ZXb4KR58kyzqru49fX1R44cmTNnztjDxYsX37p1qyov6FPPNKu6C/qMecsuupGRkRs3buzZs2doaKhYLG7cuHHv3r2V3tRk2rVrV01Nzfnz50vPFIvF5cuXlx7OmjUr+IjicXryTKvv4i5atGjRokVjX/f29p49e3bbtm1dXV3Vd0GfeqbVd0GfMXdI0fX39zc3Nx85cuTrr7/+6quvLly4cPz48UpvajLV1PzwL+HIyMi0adNKD6dPnz5aFTPpnzzTKr64AwMDH3zwwfbt21955ZVqvaBjvn+mVXxBnw1Biq6xsfHQoUONjY1Zls2fP7+5ubmjo6PSmyqvGTNmPH78uPRwZGRk+vTpFdxP+VTrxf3mm282bNiwefPm7du3Z1V9QX9wptV6QZ8ZQYqut7f35MmTpYcPHz588h/aVeaFF17o7OwsPSwWiytXrqzgfsqnKi/upUuXtm7dunv37i1btow9U60X9MkzrcoL+ix5saJ78ODBrl27enp6siwbGBg4e/bs+vXrK72p8nrjjTeyLBv7rKWnp6e9vX3VqlWV3lRZVN/F7evr27Fjx+eff/7OO+8MDw8PDw+PjIxU5QV96plW3wV9xvxQQ3RNTU2tra2bNm1asWLF5cuXd+zYUfW/1lBTU7Nv376dO3cuXbq0s7Ozra1t3rx5ld5UWVTfxT127Nh33323bdu20jMtLS2ffvpp9V3Q/+tMq+yCPmP+F+b58Pjx4/v378+cOXNKvQPw73//eyqc8tS5uC4oP06QAAhBwAEIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAI4X8AiB24LVwZWacAAAAASUVORK5CYII=\" data-image-state=\"image-loaded\" width=\"252\" height=\"189\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 147px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 73.5px; text-align: left; transform-origin: 384px 73.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 91px 8px; transform-origin: 91px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe entire Matlab code from \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.youtube.com/watch?v=ZOXOwYUVCqw\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eConvolutional Neural Networks in Matlab by Nuruzzaman Faruqui\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 70px 8px; transform-origin: 70px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e , a Matlab Neural Net Tutorial for Mnist processing, is included in the function template. Loading the Mnist Train/Test Images/Labels from posted MAT files or \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"/#null\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eTHE MNIST DATABASE of handwritten digits\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 181.5px 8px; transform-origin: 181.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e are provided. The Neural Net tutorial explains Neural Net processing for Digit Recognition. The neural net training method uses 784 input nodes,  20 convolutions(9x9), ReLU, Pooling, batch sampling, single hidden layer of 100 nodes, updating parameters via backwards propagation, and updating convolution kernels. The digit prediction accuracy is \u0026gt;94% after 50s of training. The final feature kernels are very amorphous and unexpected.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function mValidConv2=create_ValidConv2(m,K)\r\n  mValidConv2=conv2(m,K,'same');\r\nend\r\n\r\n% Code from Convolutional Neural Network in Matlab by Nuruzzaman Faruqui\r\n% Youtube:  https://www.youtube.com/watch?v=ZOXOwYUVCqw\r\n% I have made comments noted by raz and a couple speed enhancements\r\n% I also provide alternate direct source for MNIST files as .mat files\r\n%{\r\nfunction MNIST_Process\r\n%Based upon https://www.youtube.com/watch?v=ZOXOwYUVCqw\r\n%784 input nodes;20 conv 9x9 filters,ReLU;2x2 submatrix Pooling layer,single hidden layer 100 nodes\r\n\r\n%Matlab Convolutional Neural Network in Matlab\r\n%Processing MNIST digits using conv, contents, \r\n%MNIST files  http://yann.lecun.com/exdb/mnist/\r\n%Create filters\r\n%File Exchange NN https://www.mathworks.com/matlabcentral/fileexchange/59223-convolution-neural-network-simple-code-simple-to-use?s_tid=ta_fx_results\r\n%\r\n%use Test_images.mat if avail, use MNIST ubyte files if avail, load Test_images.mat\r\ndir_struct=dir;\r\nfilenames={dir_struct.name};\r\nfn='Test_images.mat';\r\nptr=find(ismember(filenames,fn));\r\nif ~isempty(ptr) % Test images/labels mat files exist\r\n tic;\r\n load('Test_images'); % images [28,28,10000] uint8\r\n load('Test_labels'); % labels [10000,1] uint8 values 0:9\r\n fprintf('Images:%i  Time:%.2f\\n',size(images,3),toc);\r\n Images=double(images)/255; %raz values must be 0:1 or bad things happen\r\n Labels=double(labels);\r\n Labels(Labels==0)=10; % 0 remapped to 10\r\n\r\nelse % Check for Mnist file\r\n %MNIST files source  http://yann.lecun.com/exdb/mnist/\r\n fn='t10k-images.idx3-ubyte'; %NMIST gzip expanded file for Test Images 10K\r\n filenames={dir_struct.name};\r\n ptr=find(ismember(filenames,fn));\r\n if ~isempty(ptr)\r\n  tic\r\n  Images=loadMNISTImages(fn);\r\n  fprintf('MNIST Images Process Time: %.2f\\n',toc); %raz\r\n  Images=reshape(Images,28,28,[]); % Un-vectorize the images\r\n  %Images already scaled by 1/255 in loadMNISTImages\r\n \r\n  Labels=loadMNISTLabels('t10k-labels.idx1-ubyte');\r\n  Labels(Labels==0)=10; % 0 to 10\r\nelse % download Test_images.mat, Test_labels.mat and load\r\n fnameTestI='Test_images.mat'; %load('Test_images.mat') creates images(28,28,10000) 1.6MB\r\n fnameTrainI='Train_images.mat'; %load('Train_images.mat') creates images(28,28,60000)  9.9MB\r\n fnameTestL='Test_labels.mat'; %load('Test_images.mat') creates labels(10000,1) 5KB\r\n fnameTrainL='Train_labels.mat'; %load('Train_images.mat') creates labels(60000,1) 30KB\r\n \r\n %Google Drive Dowloads need to come from shared files\r\n% Tweak link: file/d/ to uc?export=download\u0026id=   while removing /view?usp=sharing\r\n% https://drive.google.com/file/d/1v3GsGgP3p905wzdvUqypL_-djYmxiyzK/view?usp=sharing\r\n% https://drive.google.com/uc?export=download\u0026id=1v3GsGgP3p905wzdvUqypL_-djYmxiyzK\r\n \r\n\r\n  urlTeI='https://drive.google.com/uc?export=download\u0026id=10ReGWlfSvr9p6uq6FQlqw6vw3UXgWo57';\r\n  urlTeL='https://drive.google.com/uc?export=download\u0026id=105zTcVgItZ2JjFiUkJulU33R7lXNl29-';\r\n  urlTrI='https://drive.google.com/uc?export=download\u0026id=1HJZssH6_9OcQ8mXwS_DtvsS_Kk86BDFY';\r\n  urlTrL='https://drive.google.com/uc?export=download\u0026id=1KNTn2eNXbQkQJNe6xhO1LMmvkDRP-XLq';\r\n \r\n  tic\r\n  urlwrite(urlTeI,fnameTestI); %Writing GoogleDrive MNIST_Test_images.pdf  Test_images.mat \r\n  fprintf('Download 1.6MB Time: %.1f  sec\\n\\n',toc); %1.6MB download Time, about 1.1 sec\r\n \r\n  tic\r\n  urlwrite(urlTeL,fnameTestL); %Writing GoogleDrive MNIST_Test_labels.pdf  Test_labels.mat\r\n  fprintf('Download 5KB Time: %.1f  sec\\n\\n',toc); %5KB download Time, about 0.5 sec\r\n \r\n  tic\r\n  urlwrite(urlTrI,fnameTrainI); %Writing GoogleDrive MNIST_Train_images.pdf  Train_images.mat\r\n  fprintf('Download 9.9MB Time: %.1f  sec\\n\\n',toc); %9.9MB download Time, about 4.1 sec\r\n \r\n  tic\r\n  urlwrite(urlTrL,fnameTrainL); %Writing GoogleDrive MNIST_Train_labels.pdf  Train_labels.mat\r\n  fprintf('Download 30KB Time: %.1f  sec\\n\\n',toc); %30KB download Time, about 0.6 sec\r\n\r\n  tic\r\n  load('Test_images'); % images [28,28,10000] uint8\r\n  load('Test_labels'); % labels [10000,1] uint8 values 0:9\r\n  fprintf('Images:%i  Time:%.2f\\n',size(images,3),toc); %.05s\r\n  Images=double(images)/255; %raz values must be 0:1 or bad things happen\r\n  Labels=double(labels);\r\n  Labels(Labels==0)=10; % 0 to 10\r\n end % if MNIST ubyte files\r\n\r\nend % if Test_images.mat\r\n\r\n\r\nrng(1); %raz not liked by curretn matlab\r\n\r\nW1=.01*randn([9 9 20]); %Conv Kernels   base .01\r\nW5=(2*rand(100,2000)-1)*sqrt(6)/sqrt(360+2000); %Hidden layer coeff of 100 pooled\r\nWo=(2*rand(10, 100)-1)*sqrt(6)/sqrt( 10+ 100); %Output coeff to find 0:9 best match\r\n\r\nX=Images(:,:,1:8000);\r\nD=Labels(1:8000);\r\nztic=tic;\r\nfor epoch=1:3  %Repeat cycles of all Training data\r\n fprintf('epoch:%i  Time:%.2f\\n',epoch,toc(ztic));\r\n [W1, W5, Wo]=MnistConv(W1,W5,Wo,X,D);\r\nend %epoch\r\n\r\n%save('MnistConv.mat'); % Used for Post analysis, see video\r\n\r\nX=Images(:,:,8001:10000);\r\nD=Labels(8001:10000);\r\nacc=0;\r\nN=length(D);\r\n\r\nfor k=1:N\r\n x=X(:,:,k);\r\n y1=Conv(x,W1); %Neural Net Processing  W1 kernels on image-x\r\n y2=ReLU(y1);   %Rectification process\r\n y3=Pool(y2);   %Take 20x20 conv images into 100 values\r\n y4=reshape(y3,[],1);\r\n v5=W5*y4;      %Hidden layer weights\r\n y5=ReLU(v5);   %Rectification process\r\n v=Wo*y5;       %Wo Output weight processing\r\n y=Softmax(v);  %create vector length 10 of expected probability, uses exp(x) smoothing\r\n                %Needed in training but not sure why in evaluation\r\n \r\n [~,i]=max(y);\r\n if i==D(k)\r\n  acc=acc+1;\r\n end\r\nend %k\r\n\r\n acc=acc/N;\r\n fprintf('Accuracy is %.2f%%  Time:%.2f\\n',100*acc,toc(ztic));  %raz output/time\r\n\r\nend% MNIST_Process\r\n\r\nfunction [W1, W5,Wo]=MnistConv(W1, W5,Wo,X,D)\r\n alpha=.01;\r\n beta=0.95;\r\n z=reshape(1:100,10,10); % raz\r\n kmap=kron(z,ones(2)); % raz\r\n \r\n momentum1=zeros(size(W1));\r\n momentum5=zeros(size(W5));\r\n momentumo=zeros(size(Wo));\r\n \r\n N=length(D);\r\n \r\n bsize=100;\r\n blist=1:bsize:(N-bsize+1);\r\n \r\n for batch=1:length(blist) % Batch/Updates, each Batch creates updates to Params\r\n  dW1=zeros(size(W1));\r\n  dW5=zeros(size(W5));\r\n  dWo=zeros(size(Wo));\r\n  \r\n  begin=blist(batch);\r\n  for k=begin:begin+bsize-1  %Subset Group of Training samples for param adjust\r\n   x=X(:,:,k);\r\n   y1=Conv(x,W1); %8K/5.8s  3.5s\r\n   y2=ReLU(y1);\r\n   y3=Pool(y2);\r\n   y4=reshape(y3,[],1);\r\n   v5=W5*y4;\r\n   y5=ReLU(v5);\r\n   v=Wo*y5;\r\n   y=Softmax(v); %10 Probability Bins for [1-9 0] \r\n   \r\n   d=zeros(10,1);\r\n   d(sub2ind(size(d),D(k),1))=1;\r\n   \r\n    e=d-y; % raz should this be (e-y)^2*sign(e-y)?\r\n    delta=e;\r\n    e5=Wo'*delta;\r\n    delta5=(y5\u003e0).*e5;\r\n    e4=W5'*delta5;\r\n    e3=reshape(e4,size(y3));\r\n    e2=zeros(size(y2));\r\n    W3=ones(size(y2))/(2*2);\r\n    \r\n    for c=1:20\r\n     %e2(:,:,c)=kron(e3(:,:,c),ones([2 2])).*W3(:,:,c); %160K/4.5s\r\n     e3c=e3(:,:,c); %160K/.27 raz\r\n     e2(:,:,c)=e3c(kmap).*W3(:,:,c);  %160K/.8s  raz\r\n    end %c\r\n    \r\n    delta2=(y2\u003e0).*e2;\r\n    delta1_x=zeros(size(W1)); \r\n    \r\n    for c=1:20\r\n     delta1_x(:,:,c)=conv2(x(:,:),rot90(delta2(:,:,c),2),'valid'); %160K/5.3s\r\n    end %c\r\n    \r\n    dW1=dW1+delta1_x; %error per kernel plane\r\n    dW5=dW5+delta5*y4'; %8K/4.2s  100x2000\r\n    dWo=dWo+delta*y5';\r\n  end %k\r\n  dW1=dW1/bsize;\r\n  dW5=dW5/bsize;\r\n  dWo=dWo/bsize;\r\n  \r\n  momentum1=alpha*dW1+beta*momentum1;\r\n  W1       = W1+momentum1;\r\n  \r\n  momentum5=alpha*dW5+beta*momentum5;\r\n  W5       = W5+momentum5;\r\n  \r\n  momentumo=alpha*dWo+beta*momentumo;\r\n  Wo       = Wo+momentumo;\r\n  \r\n end % batch\r\n \r\nend %MnistConv\r\n\r\nfunction rng(x)\r\n randn('seed',x);\r\n rand('seed',x);\r\nend % rng\r\n\r\nfunction y=Pool(x)\r\n [xrow,xcol,numFilters]=size(x);\r\n y=zeros(xrow/2,xcol/2,numFilters);\r\n for k=1:numFilters\r\n  filter=ones(2)/(2*2);\r\n  image=conv2(x(:,:,k),filter,'valid');\r\n  y(:,:,k)=image(1:2:end,1:2:end);\r\n end\r\n\r\nend %Pool\r\n\r\nfunction y=Conv(x,W)\r\n [wrow,wcol,numFilters]=size(W);\r\n [xrow,xcol,~         ]=size(x);\r\n \r\n yrow=xrow-wrow+1;\r\n ycol=xcol-wcol+1;\r\n \r\n y=zeros(yrow,ycol,numFilters);\r\n \r\n for k=1:numFilters\r\n  filter=W(:,:,k);\r\n  filter=rot90(squeeze(filter),2); %200K/2.5s  raz remove test/92.15%\r\n  y(:,:,k)=conv2(x,filter,'valid'); %200K/3.7s  3.5s\r\n end\r\nend %Conv\r\n\r\nfunction y=Softmax(x)\r\n ex=exp(x);\r\n y=ex/sum(ex);\r\nend %Softmax\r\n\r\nfunction y=ReLU(x)\r\n y=max(0,x);\r\nend %ReLU\r\n\r\n\r\n\r\nfunction images=loadMNISTImages(filename)\r\n%\r\nfp=fopen(filename,'rb');\r\nassert(fp~=-1,['Could not open', filename,'']);\r\nmagic=fread(fp,1,'int32',0,'ieee-be');\r\nassert(magic==2051,['Bad magic number in', filename, '']); %2051 Images\r\nnumImages=fread(fp,1,'int32',0,'ieee-be');\r\nnumRows=fread(fp,1,'int32',0,'ieee-be');\r\nnumCols=fread(fp,1,'int32',0,'ieee-be');\r\nimages=fread(fp,inf,'unsigned char=\u003eunsigned char');\r\nfclose(fp);\r\nfprintf('Images:%i  rows:%i  cols:%i\\n',numImages,numRows,numCols); %raz\r\n\r\nimages=reshape(images,numCols,numRows,numImages);\r\nimages=permute(images,[2 1 3]); \r\n\r\nimages=reshape(images,size(images,1)*size(images,2),size(images,3)); %raz Will be reverted\r\nimages=double(images)/255;\r\n \r\nend %loadMNISTImages\r\n\r\nfunction labels=loadMNISTLabels(filename)\r\n%\r\nfp=fopen(filename,'rb');\r\nassert(fp~=-1,['Could not open', filename,'']);\r\nmagic=fread(fp,1,'int32',0,'ieee-be');\r\nassert(magic==2049,['Bad magic number in ', filename,'']);\r\nnumLabels=fread(fp,1,'int32',0,'ieee-be');\r\nlabels=fread(fp,inf,'unsigned char');\r\nassert(size(labels,1)==numLabels,'Mismatch in label count');\r\nfclose(fp);\r\nfprintf('Labels:%i\\n',numLabels); %raz\r\n\r\n\r\nend %loadMNISTLabels\r\n%}","test_suite":"%%\r\n%Google Drive Dowloads need to come from shared files\r\n% Tweak link: file/d/ to uc?export=download\u0026id=   while removing /view?usp=sharing\r\n% https://drive.google.com/file/d/1v3GsGgP3p905wzdvUqypL_-djYmxiyzK/view?usp=sharing\r\n% https://drive.google.com/uc?export=download\u0026id=1v3GsGgP3p905wzdvUqypL_-djYmxiyzK\r\n fnameTestI='Test_images.mat'; %load('Test_images.mat') creates images(28,28,10000) 1.6MB\r\n fnameTrainI='Train_images.mat'; %load('Train_images.mat') creates images(28,28,60000)  9.9MB\r\n fnameTestL='Test_labels.mat'; %load('Test_images.mat') creates labels(10000,1) 5KB\r\n fnameTrainL='Train_labels.mat'; %load('Train_images.mat') creates labels(60000,1) 30KB\r\n \r\n urlTeI='https://drive.google.com/uc?export=download\u0026id=10ReGWlfSvr9p6uq6FQlqw6vw3UXgWo57';\r\n urlTeL='https://drive.google.com/uc?export=download\u0026id=105zTcVgItZ2JjFiUkJulU33R7lXNl29-';\r\n urlTrI='https://drive.google.com/uc?export=download\u0026id=1HJZssH6_9OcQ8mXwS_DtvsS_Kk86BDFY';\r\n urlTrL='https://drive.google.com/uc?export=download\u0026id=1KNTn2eNXbQkQJNe6xhO1LMmvkDRP-XLq';\r\n \r\n % fn.mat  https://drive.google.com/file/d/10GsOZTIjzMIuO7xAYIqLT1zIq9Cyubl-/view?usp=drive_link\r\n % Google Gives warning thus aborts urlwrite\r\n %\r\n %fname='Mnist_Test_images.pdf'\r\n %Fake name of .pdf on GoogleDrive,  write as a mat\r\n \r\n %url='https://drive.google.com/file/d/1mgxzsmVQNXgqHEdd61QR2r0STm3N9lgG/view?usp=drive_link';\r\n %ptr=strfind(url,'/view'); % Tweaking the url\r\n %url(ptr:end)=[];\r\n %url=strrep(url,'file/d/','uc?export=download\u0026id=');\r\n \r\n tic\r\n urlwrite(urlTeI,fnameTestI); %Writing GoogleDrive MNIST_Test_images.pdf  Test_images.mat\r\n fprintf('Download 1.6MB Time: %.1f  sec\\n',toc); %1.6MB download Time, about 1.5 sec\r\n \r\n tic\r\n urlwrite(urlTeL,fnameTestL); %Writing GoogleDrive MNIST_Test_labels.pdf  Test_labels.mat\r\n fprintf('Download 5KB Time: %.1f  sec\\n',toc); %5KB download Time, about .5 sec\r\n \r\n global labels images \r\n \r\n load('Test_images'); % images [28,28,10000] uint8\r\n load('Test_labels'); % labels [10000,1] uint8 values 0:9\r\n \r\n %Showing a Label and an image from Mnist\r\n ptr=randi(10000);\r\n fprintf('Label:%i\\n',labels(ptr));\r\n figure(1);imagesc(images(:,:,ptr)); colormap gray;\r\n \r\n \r\nvalid=1;\r\nassert(valid)\r\n%%\r\n%Showing a Label and an image from Mnist\r\n global labels images\r\n valid=1;\r\n ptr=randi(10000);\r\n fprintf('Label:%i\\n',labels(ptr));\r\n m=double(images(:,:,ptr))/255;\r\n figure(2);imagesc(m); colormap gray;\r\n \r\n K=repmat([0 0 .5 1 1 1 .5 0 0],9,1); % Vert Bar\r\n mValidConv2=create_ValidConv2(m,K);\r\n figure(3);imagesc(mValidConv2); colormap gray;\r\n mc=conv2(m,K,'same');\r\n if ~isequal(mc(5:end-4,5:end-4),mValidConv2)\r\n  valid=0;\r\n end\r\n \r\nassert(valid)\r\n\r\n%%\r\n%Showing a Label and an image from Mnist\r\n global labels images\r\n valid=1;\r\n ptr=randi(10000);\r\n fprintf('Label:%i\\n',labels(ptr));\r\n m=double(images(:,:,ptr))/255;\r\n figure(2);imagesc(m); colormap gray;\r\n \r\n K=repmat([0 0 .5 1 1 1 .5 0 0]',1,9); %Horiz Bar\r\n mValidConv2=create_ValidConv2(m,K);\r\n figure(3);imagesc(mValidConv2); colormap gray;\r\n mc=conv2(m,K,'same');\r\n if ~isequal(mc(5:end-4,5:end-4),mValidConv2)\r\n  valid=0;\r\n end\r\n \r\nassert(valid)\r\n\r\n%%\r\n%Showing a Label and an image from Mnist\r\n global labels images\r\n valid=1;\r\n m=rand(24);\r\n K=repmat([0 .5 1 1 1 .5 0]',1,7); %Horiz Bar\r\n mValidConv2=create_ValidConv2(m,K)\r\n mc=conv2(m,K,'same');\r\n if ~isequal(mc(4:end-3,4:end-3),mValidConv2)\r\n  valid=0;\r\n end\r\n \r\nassert(valid)\r\n\r\n%%\r\n%Showing a Label and an image from Mnist\r\n global labels images\r\n valid=1;\r\n m=rand(8);\r\n K=ones(3)/9;\r\n mValidConv2=create_ValidConv2(m,K)\r\n mc=conv2(m,K,'same');\r\n if ~isequal(mc(2:end-1,2:end-1),mValidConv2)\r\n  valid=0;\r\n end\r\n \r\nassert(valid)\r\n\r\n","published":true,"deleted":false,"likes_count":3,"comments_count":0,"created_by":3097,"edited_by":3097,"edited_at":"2023-08-17T19:33:19.000Z","deleted_by":null,"deleted_at":null,"solvers_count":13,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2023-08-17T14:03:38.000Z","updated_at":"2026-04-15T07:58:37.000Z","published_at":"2023-08-17T19:33:20.000Z","restored_at":null,"restored_by":null,"spam":null,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis challenge is to return only the Valid portion of a 2-D convolution. Valid is deemed to be where all elements of the kernel are applied against the image. The (1,1) point with a ones(3) kernel would be invalid while point (2,2) would return a Valid convolution value. The images will be even-square,m, and the kernels will be odd-square,K.The m=ones(6) and K=ones(3) would return a 4x4 matrix of 9s.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003emValidConv2=create_ValidConv2(m,K)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn neural net processing of the Mnist database of digits(0-9) one Convolutional Neural Network method uses 9x9 kernels on the 28x28 images to return the Valid 20x20 central core for the next processing step. The third image includes a black border of four around Valid to maintain scale.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"189\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"252\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"baseline\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"189\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"252\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"baseline\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId2\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"189\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"252\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"baseline\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId3\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe entire Matlab code from \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.youtube.com/watch?v=ZOXOwYUVCqw\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eConvolutional Neural Networks in Matlab by Nuruzzaman Faruqui\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e , a Matlab Neural Net Tutorial for Mnist processing, is included in the function template. Loading the Mnist Train/Test Images/Labels from posted MAT files or \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eTHE MNIST DATABASE of handwritten digits\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e are provided. The Neural Net tutorial explains Neural Net processing for Digit Recognition. The neural net training method uses 784 input nodes,  20 convolutions(9x9), ReLU, Pooling, batch sampling, single hidden layer of 100 nodes, updating parameters via backwards propagation, and updating convolution kernels. The digit prediction accuracy is \u0026gt;94% after 50s of training. The final feature kernels are very amorphous and unexpected.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image1.png\",\"relationshipId\":\"rId1\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image2.png\",\"relationshipId\":\"rId2\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image3.png\",\"relationshipId\":\"rId3\"}]},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\",\"relationship\":null},{\"partUri\":\"/media/image2.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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JMnSpUtT3FNQULB8+fKWlpaFCxfu2rVr8uTJqb+P6bvmbd+Z8frrr99www3z5s2bOHFi2luSJEmam5vfeOONK664ovuwsLDw008/TXHPoEGDWltba2pqkiTZunVrXV3diSeemOIvaWxpaVm7du3UqVO7D/fv35/uNffJJ5/89cO+ffumteTr6urqUn8zZI8dO3aUlZX1/M0MGTLko48+SnHPl19+uXv37kceeaT7cMaMGanfqP/Opf2uiuhWrVoV4V12W7ZsOeecc1auXLn/fxw8eDDdSY2NjeXl5R988EFXV1dra+u4ceP+9re/pTupx89//vPU32X3z3/+s+ctW9u2bRs3btzq1atT3LN///4xY8asXLmyq6vr888/Hz9+/BtvvJHinm5jx45dtWpV2iv+ZdOmTWeddVb3p/TOnTsvuuiiZ555JsU9W7duLS8v37ZtW1dX17p160aPHr1z584U9xwGrpCyoaamZvfu3dddd13Pn1RVVd15550pTiopKbn99tunTJkycuTIdevWzZgx48ILL0xxTzRlZWWzZ8+urKw866yzNm7cOHPmzHRftz/mmGMefvjhm266adGiRU1NTVdffXXq3xvb2dnZ3t4e5NXQJEnKy8tvu+22adOmDR8+/N133506deqUKVNS3FNUVHTzzTdPmjSpvLx869atDz30UOrfWP1d842x5KSzs7Otre3kk08Ocgsoms7Ozr179x533HFx3iPz1VdfHXvssf69vk33P1l+fn6Qv6KOjo59+/YFebvvd02QAAghyv+1AXCUEyQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABC+G8Tb/bPfPYYhwAAAABJRU5ErkJggg==\",\"relationship\":null},{\"partUri\":\"/media/image3.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjAAAAGkCAIAAACgjIjwAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH5wgRDiMCRXnB5gAAACR0RVh0U29mdHdhcmUATUFUTEFCLCBUaGUgTWF0aFdvcmtzLCBJbmMuPFjdGAAAACJ0RVh0Q3JlYXRpb24gVGltZQAxNy1BdWctMjAyMyAwNzozNTowMo1RZFYAABZ6SURBVHic7d1PbFTnucDhg0kxFQ4yMoQ/TqJSYIySoipBigIKpErkHSRUqKKVxSKwoYgqkVgk8iIgQRYOC/5IZcGGTSiiQUKiOypBgJqsvAmmYLsqpkZgS9iMFNICxvgurDuKAjf1d+1h3jN+npVn8nH0nTnIP86M/Wba6OhoBgCVVlPpDQBAlgkSAEEIEgAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhPFfpDZRRU1NTpbcAEEhXV1elt/CjRqtXoVCo9Ks7marsdH7EFDnTKXKa2ZQ50/inWSgUKv1d+b/wlh0AIQgSACFMGx0drfQeyqWpqam7u7vSuwAIoVAoBP8MyR0SACEIEgAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhPFfpDfAUb731VvkOfufOnfKtLxaLSQd/9OhR0vqpYObMmUnrFyxYMP7FS5cuTTr4nDlzxr94eHg46eA3b94c/+Le3t6kg6f+PScCd0gAhJDXO6TBwcHr16+XHhYKhdmzZ1dwPwBMUF6DdOrUqf3799fW1o49PHjw4Jo1ayq7JQAmIq9BunLlSmtra0tLS6U3AsDkyOtnSFevXl2yZMng4GDq56gAxJTLO6SRkZEbN27s2bNnaGioWCxu3Lhx7969T11ZKBTGvuju7n6GGwSIovRtML5cBqm/v7+5ufnjjz9ubGwcGBj4zW9+c/z48d/97ndPrtQhYIorfRuMX6ZcvmXX2Nh46NChxsbGLMvmz5/f3Nzc0dFR6U3B5Lh//36ltwCVkcsg9fb2njx5svTw4cOHNTW5PBEASnL5ffzBgwe7du3q6enJsmxgYODs2bPr16+v9KYAmJBcfobU1NTU2tq6adOmFStWXL58eceOHX4JCSDvchmkLMtaWlqq+JeQFi5cmLT+uecSrmPqqLSkcXOps+nu3btXvoPnV9IFra+vH//iefPmJe0kaVBe6qdfSVc/9e9t0ms4df5qBZfLt+wAqD6CBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAIggRACHkdrlrdksZlZllWV1c3/sWpQyqTJmamDqks68HzK2kwaNLVnzt3btJOkoarJg1LzbLs9u3b41+c9JqQU+6QAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIwXioiJKmk2WJA8rKOssudZpZ0vrUWXb5nX2X01l2xWIx6eBz5swZ/2Kz7KYCd0gAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhCBIAIRgPFREqePm6uvry7Q4S5wId/fu3aSDJ82ySx2UV9ZZdkmj1VIvaNLEuYULF45/8Ysvvpi0k5deemn8i3/6058mHfwf//jH+BenvobkkTskAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCMMsuorLOsksdOJY0Ee7OnTtJB09aXywWkw6eJGk2XZZldXV1ZVqcJU6cS1qcNPguS5yqlzps0Hg6fsAdEgAh5ClIFy9e/P7Dvr6+v/71r11dXZXaDwCTKDdBOnz4cGtra+nh6dOnf/vb3545c+b3v//9wYMHK7gxACZFDj5Dunv3bltb25kzZ2bNmjX2zMjIyO7du0+cOLFs2bLBwcF33333vffeW7x4cWX3CcBE5OAO6cCBAw0NDZ999lnpmQsXLtTX1y9btizLsoaGhrVr17a3t1dugwBMghzcIe3ataumpub8+fOlZ4rF4vLly0sPZ82a9X99klQoFMa+6O7uLusmAWIqfRuMLwdBqqn54W3cyMjItGnTSg+nT58+Ojr61D+rQ+TOz372s0pvgapS+jYYv0w5eMvuSTNmzHj8+HHp4cjIyPTp0yu4HwAmLpdBeuGFFzo7O0sPi8XiypUrK7gfACYul0F64403siwb+1Spp6envb191apVld4UABOSg8+QnlRTU7Nv376dO3cuXbq0s7Ozra1t3rx5ld4UABOSmyC9/fbb35/U8Oabb/pRb4Bqkpsg8SOS5qUmTWLNyjxcNXUcZ/kOHme4auqveC9YsGD8i5OGpWZlniGbNFw1dRJr0gVN+ktO+eTyMyQAqo8gARCCIAEQgiABEIIgARCCIAEQgiABEIIgARCCIAEQgiABEIIgARCCWXYRFYvFpPX/+c9/xr84dZpZ0vrU/9vp/fv3k9Yn+fbbb8e/OHWW3fPPPz/+xUlD3l588cWknbz00kvjX1zWWXZlHTeXeoHII3dIAIQgSACEIEgAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhCBIAIQgSACEYDxURHfu3ElanzT7Lmn0WZZl9fX141+8cOHCpIOXdZbdvXv3xr84dVRa0ty2pMULFixI2knSBUodN5c0y66s4+ZSD272XR65QwIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIATjniK6fft20vqk2Xep4+Pmzp07/sWpc9gePXpUpsVZ4suSevCkUWlxhrzF2cn/Yz1Vzx0SACEIEgAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhmCUVUdIQtizL+vv7x7+4WCwmHTxpPN3MmTOTDl5XV1e+gxuVNnFlHZQXZwofQbhDAiAEQQIghDzdBV+8eHHNmjVjXw8ODl6/fr30nwqFwuzZsyu0LwAmQW6CdPjw4ePHj1+8eHHs4alTp/bv319bWzv28ODBg6VWAZBHOQjS3bt329razpw5M2vWrNKTV65caW1tbWlpqeDGAJhEOfgM6cCBAw0NDZ999tn3n7x69eqSJUsGBweHh4d/5M8W/leZ9wgQVI6+DebgDmnXrl01NTXnz58vPTMyMnLjxo09e/YMDQ0Vi8WNGzfu3bv3qX+2u7v7WW0TIKLSt8H4TcrBHVJNzQ832d/f39zcfOTIka+//vqrr766cOHC8ePHK7I3ACZLDoL0pMbGxkOHDjU2NmZZNn/+/Obm5o6OjkpvCoAJyWWQent7T548WXr48OHDJ++iAMiXXH4ff/Dgwa5du3p6erIsGxgYOHv27Pr16yu9KQAmJAc/1PCkpqam1tbWTZs2rVix4vLlyzt27PBLSAB5l5sgvf3226Xfis2yrKWlpYp/CSl1/unt27fHv7ivry/p4PX19eNfnDQsNcuy+/fvJ62fCso6RTT14D/5yU/Kd/CkablG604FuXzLDoDqI0gAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhGDcU0T37t1LWn/nzp3xL75582bSwZNm2c2bNy/p4Emz7B49epR08Jwq62mW9eCpkwyT1j///PNJB0+dfUcE7pAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAjBLLuIkia8ZVlWLBbHv7i/vz/p4Emz7Moq1JC38m0m6WpmiZMMFyxYkHTwpKv/3HNp30+SxtOVdVBe6s6nyFjFZ88dEgAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhCBIAIZhlF1FZZ9ndvn076eBlnWY2c+bM8S9OfVmS1t+7dy/p4Enrk0afpZ5m0muYOpmwrBPhkjYzd+7c8h086TXM0v+2ME7ukAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAjBcNWIkmZxZomjHpMmsWZZ1tfXN/7FqTsv63DVpJfl22+/Ld/Bk16W1PmnSSNNUw+etD5pEmuW+LKkTm5NWp96cMrEHRIAIeTj3wU9PT29vb0NDQ2vv/566cm+vr5r1669/PLLTU1NFdwbAJMiB0Has2fPuXPnVq5c2dXVVVdXd/To0dra2tOnT7e1ta1evbqjo+P999//8MMPK71NACYkepD+/ve/nzhx4uLFi3PmzMmybP369X/5y19+/etf7969+8SJE8uWLRscHHz33Xffe++9xYsXV3qzAPz/RQ9SfX39kSNHxmqUZdnixYtv3bp14cKF+vr6ZcuWZVnW0NCwdu3a9vb2pwapUCiMfdHd3f3M9gwQR+nbYHzRg7Ro0aJFixaNfd3b23v27Nlt27Z1dXUtX768tGbWrFldXV1P/eM6BExxpW+D8cuUm5+yGxgY+OCDD7Zv3/7KK6+MjIxMmzat9J+mT58+Ojpawb0BMHH5CNI333yzYcOGzZs3b9++PcuyGTNmPH78uPRfR0ZGpk+fXrndATAJchCkS5cubd26dffu3Vu2bBl75oUXXujs7CwtKBaLK1eurNDuAJgc0YPU19e3Y8eOzz///J133hkeHh4eHh4ZGXnjjTeyLDt//nyWZT09Pe3t7atWrar0TgGYkOg/1HDs2LHvvvtu27ZtpWdaWlo+/fTTffv27dy5c+nSpZ2dnW1tbfPmzavgJgGYuOhB+uSTTz755JMnn3/zzTfb29uf/X5iSpoJljrLLmncXOosu6QZYmWdZZe0OHV9fmfZJf1TL/Xgd+/eHf/i1KtPHkV/yw6AKUKQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAgh+iw7xiNpVFrq0Lb+/v7yHTxJqFl25Rutlnrkurq68S9OuppZlvX19Y1/ceprmDRWMfVlSR2rSATukAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACMEsu2pQvrlqqQdPmk6WJQ4cS51OVtaXpXxSTzNpgtzt27eTDj537tzxLy7rsMGcXk2SuEMCIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBMNVpxxDKoMr64jSO3fuJB385s2b41+cuvOkMbJJp5l68NSBtpSJOyQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIwyw5iSZ0I19vbW6bFWZb97W9/S1oPE+EOCYAQ8nGH1NPT09vb29DQ8Prrr489Mzg4eP369dKCQqEwe/bsCu0OgEmQgyDt2bPn3LlzK1eu7OrqqqurO3r0aG1t7alTp/bv319bWzu25uDBg2vWrKnsPgGYkNHYrly58uqrrw4NDY09XLdu3Zdffjk6OvrRRx998cUXP/5nC4VCpV9dgCgKhULZv2VPTPTPkOrr648cOTJnzpyxh4sXL75161aWZVevXl2yZMng4ODw8HBFNwjA5Jg2Ojpa6T2MV29v77p16/785z83NTX94he/+PnPfz40NFQsFjdu3Lh3794n1zc1NZW+7u7ufoY7BYji++8VdXV1VXAn/12lb9HGq7+//1e/+tUf//jH0dHRmzdv/uEPf7h58+bY82vWrPnTn/705B/xlh1AibfsJsc333yzYcOGzZs3b9++PcuyxsbGQ4cONTY2Zlk2f/785ubmjo6OSu8RgAnJQZAuXbq0devW3bt3b9myZeyZ3t7ekydPlhY8fPiwpiYHJwLAj6n0Ldp/8a9//eu11147e/bsw//16NGja9euvfLKK93d3aOjo/39/atXr75w4cKTf9ZbdgAl8d+yi/57SMeOHfvuu++2bdtWeqalpeXTTz9tbW3dtGnTihUrLl++vGPHDr+EBJB3efopu1RNTU1+uA5gTKFQCP5Tdj56ASAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEHKjUKhUOktPCNT5EynyGlmU+ZMp8hplpUgARCCIAEQwrTR0dFK76FcmpqaKr0FgEC6uroqvYUfU81BAiBHvGUHQAiCBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAIz1V6A/x3g4OD169fLz0sFAqzZ8+u4H7K5OLFi2vWrCk97Ovru3bt2ssvv1x9Eze+f6ZVeXF7enp6e3sbGhpef/310pNVeUGfPNOqvKDPjCDlwKlTp/bv319bWzv28ODBg9//xl0dDh8+fPz48YsXL449PH36dFtb2+rVqzs6Ot5///0PP/ywstubRD840+q7uHv27Dl37tzKlSu7urrq6uqOHj1aW1tblRf0qWdafRf0mRolvI8++uiLL76o9C7KZWho6OOPP37ttdfeeuutsWcePXr02muvdXd3j46O3rlz55e//OU///nPiu5xcjx5pqNVd3GvXLny6quvDg0NjT1ct27dl19+WZUX9KlnOlp1F/QZ8xlSDly9enXJkiWDg4PDw8OV3svkO3DgQENDw2effVZ65sKFC/X19cuWLcuyrKGhYe3ate3t7ZXb4KR58kyzqru49fX1R44cmTNnztjDxYsX37p1qyov6FPPNKu6C/qMecsuupGRkRs3buzZs2doaKhYLG7cuHHv3r2V3tRk2rVrV01Nzfnz50vPFIvF5cuXlx7OmjUr+IjicXryTKvv4i5atGjRokVjX/f29p49e3bbtm1dXV3Vd0GfeqbVd0GfMXdI0fX39zc3Nx85cuTrr7/+6quvLly4cPz48UpvajLV1PzwL+HIyMi0adNKD6dPnz5aFTPpnzzTKr64AwMDH3zwwfbt21955ZVqvaBjvn+mVXxBnw1Biq6xsfHQoUONjY1Zls2fP7+5ubmjo6PSmyqvGTNmPH78uPRwZGRk+vTpFdxP+VTrxf3mm282bNiwefPm7du3Z1V9QX9wptV6QZ8ZQYqut7f35MmTpYcPHz588h/aVeaFF17o7OwsPSwWiytXrqzgfsqnKi/upUuXtm7dunv37i1btow9U60X9MkzrcoL+ix5saJ78ODBrl27enp6siwbGBg4e/bs+vXrK72p8nrjjTeyLBv7rKWnp6e9vX3VqlWV3lRZVN/F7evr27Fjx+eff/7OO+8MDw8PDw+PjIxU5QV96plW3wV9xvxQQ3RNTU2tra2bNm1asWLF5cuXd+zYUfW/1lBTU7Nv376dO3cuXbq0s7Ozra1t3rx5ld5UWVTfxT127Nh33323bdu20jMtLS2ffvpp9V3Q/+tMq+yCPmP+F+b58Pjx4/v378+cOXNKvQPw73//eyqc8tS5uC4oP06QAAhBwAEIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAI4X8AiB24LVwZWacAAAAASUVORK5CYII=\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"}],"problem_search":{"problems":[{"id":58877,"title":"Neural Net Image Convolution: Return only Valid portion of conv2","description":"This challenge is to return only the Valid portion of a 2-D convolution. Valid is deemed to be where all elements of the kernel are applied against the image. The (1,1) point with a ones(3) kernel would be invalid while point (2,2) would return a Valid convolution value. The images will be even-square,m, and the kernels will be odd-square,K.The m=ones(6) and K=ones(3) would return a 4x4 matrix of 9s.\r\nmValidConv2=create_ValidConv2(m,K)\r\nIn neural net processing of the Mnist database of digits(0-9) one Convolutional Neural Network method uses 9x9 kernels on the 28x28 images to return the Valid 20x20 central core for the next processing step. The third image includes a black border of four around Valid to maintain scale.\r\n  \r\nThe entire Matlab code from Convolutional Neural Networks in Matlab by Nuruzzaman Faruqui , a Matlab Neural Net Tutorial for Mnist processing, is included in the function template. Loading the Mnist Train/Test Images/Labels from posted MAT files or THE MNIST DATABASE of handwritten digits are provided. The Neural Net tutorial explains Neural Net processing for Digit Recognition. The neural net training method uses 784 input nodes,  20 convolutions(9x9), ReLU, Pooling, batch sampling, single hidden layer of 100 nodes, updating parameters via backwards propagation, and updating convolution kernels. The digit prediction accuracy is \u003e94% after 50s of training. The final feature kernels are very amorphous and unexpected.","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.4333px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 545.5px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 272.75px; transform-origin: 407px 272.75px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 84px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 42px; text-align: left; transform-origin: 384px 42px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 369.5px 8px; transform-origin: 369.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge is to return only the Valid portion of a 2-D convolution. Valid is deemed to be where all elements of the kernel are applied against the image. The (1,1) point with a ones(3) kernel would be invalid while point (2,2) would return a Valid convolution value. The images will be even-square,m, and the kernels will be odd-square,K.The m=ones(6) and K=ones(3) would return a 4x4 matrix of 9s.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 121.5px 8px; transform-origin: 121.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003emValidConv2=create_ValidConv2(m,K)\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 63px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 31.5px; text-align: left; transform-origin: 384px 31.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 379px 8px; transform-origin: 379px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eIn neural net processing of the Mnist database of digits(0-9) one Convolutional Neural Network method uses 9x9 kernels on the 28x28 images to return the Valid 20x20 central core for the next processing step. The third image includes a black border of four around Valid to maintain scale.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 194.5px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 97.25px; text-align: left; transform-origin: 384px 97.25px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline;width: 252px;height: 189px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjAAAAGkCAIAAACgjIjwAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH5wgRDhgSZHw+ugAAACR0RVh0U29mdHdhcmUATUFUTEFCLCBUaGUgTWF0aFdvcmtzLCBJbmMuPFjdGAAAACJ0RVh0Q3JlYXRpb24gVGltZQAxNy1BdWctMjAyMyAwNzoyNDoxN2H8700AABUwSURBVHic7d1/aNT3/cDxMylmQyeRoK5mK3XqRexkVYdUmW5ryaCg1iHipvhHlVErGXaTUZY/jDNKSf3DHzAHGVQYdcEpCDr2hwOtZtrBGjY0TpPIjFMksia9P+pQ43nfP/L9HqU6d/dNLve6y+PxVz7nOx9eHz/tPf3cXT4Zl8lkEgBQbBXFHgAAEglBAiAIQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIghGeKPUAB1dXVFXsEgEC6urqKPcJTZcpXMpks9t/uSCqzw3mKMXKkY+QwE2PmSOMfZjKZLPaz8n/hJTsAQhAkAEIYl8lkij1DodTV1XV3dxd7CoAQkslk8PeQXCEBEIIgARCCIAEQgiABEIIgARCCIAEQgiABEIIgARCCIAEQgiABEIIgARCCIAEQgiABEIIgARCCIAEQgiABEIIgARCCIAEQgiABEIIgARCCIAEQgiABEIIgARCCIAEQgiABEIIgARCCIAEQgiABEIIgARCCIAEQgiABEIIgARCCIAEQgiABEIIgARCCIAEQgiABEIIgARCCIAEQgiABEIIgARCCIAEQgiABEIIgARDCM8UeABg9s2bNymt9a2tr7ovXrVuX1877+vryWk/Zc4UEQAileoXU399//fr17GYymZw0aVIR5wFgmEo1SMePH9+7d29VVdXQ5v79+5cuXVrckQAYjlIN0uXLlxsbG9evX1/sQQAYGaX6HtKVK1dmzpzZ398/ODhY7FkAGAEleYWUTqdv3LjR3Nw8MDCQSqVWr169a9euJ65MJpNDX3R3d4/igABRZJ8G4yvJIPX19dXX17/99tu1tbV37txZs2ZNW1vbD3/4w8dX6hAwxmWfBuOXqSRfsqutrT1w4EBtbW0ikZg2bVp9fX1HR0exhwJgWEoySL29vceOHctuPnjwoKKiJA8EgKySfB6/f/9+U1NTT09PIpG4c+fO6dOnV6xYUeyhABiWknwPqa6urrGxce3atfPmzbt06VJDQ4MfQgIodSUZpEQisX79+tL6IaSJEycWaHEikUilUrkvvnfvXl47p5zk+1rCd7/73dwX/+hHP8pr5++8807uix8+fJjXzilFJfmSHQDlR5AACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAihVG+uWnJ+/vOf5764sbExr53/9Kc/zX3x3r1789o55eQvf/lL4Xa+c+fOvNa3tbXlvvjatWt5jkPpcYUEQAiCBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAI7mVXDn7xi1/kvrinpyevnf/+97/PcxzievbZZ4s9AvxHrpAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAjBvezKwZe+9KXcF//mN7/Ja+ff+973cl/80Ucf5bVzhm/ixIm5L/7JT35SuEnytWbNmtwXv/POO4WbhCBcIQEQgiABEIIgARCCIAEQgiABEIIgARCCIAEQgiABEIIgARCCIAEQgiABEIJ72Y2Sa9euFXuE/zV58uS81u/cuTP3xevWrctr56lUKq/1PG7WrFm5L168eHHhJoFhcoUEQAilFKT29vbPbt68efOPf/xjV1dXseYBYASVTJAOHjzY2NiY3Txx4sQPfvCDU6dOvfnmm/v37y/iYACMiBJ4D+mTTz5paWk5derUhAkThh5Jp9M7duw4cuTI7Nmz+/v7X3nllZUrV86YMaO4cwIwHCVwhbRv376amprdu3dnHzl37lx1dfXs2bMTiURNTc2yZcvOnz9fvAEBGAElcIXU1NRUUVFx9uzZ7COpVGrOnDnZzQkTJvynd5KSyeTQF93d3QUdEiCm7NNgfCUQpIqKz1/GpdPpcePGZTcrKyszmcwTv1eHgDEu+zQYv0wl8JLd48aPH//o0aPsZjqdrqysLOI8AAxfSQZp6tSpnZ2d2c1UKrVw4cIizgPA8JVkkBYtWpRIJIbeVerp6Tl//ryfPwcodSXwHtLjKioq9uzZs23btlmzZnV2dra0tEyZMqXYQwEwLCUTpG9/+9ufvVPDSy+95KPeAOWkZIJU6g4dOpT74q985St57Tyv+5/m69VXX8198Zo1a/La+a9//es8x+Hz+vr6cl/c09OT186HftqvQI4ePVq4nVOKSvI9JADKjyABEIIgARCCIAEQgiABEIIgARCCIAEQgiABEIIgARCCIAEQgiABEIJ72UW0d+/evNZv2LAh98UFvTvZm2++mdf6vO5mlkql8hxnTPjyl7+c++KCnn0YJldIAIQgSACEIEgAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhCBIAIQgSACE4F52EX366ad5rW9vb899cUHvZjZ//vy81j///PO5L/7b3/6W3zSF9Mwzefy/k+8t/vKyZs2awu0cRpMrJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQnAvu3Lw5z//OffFGzduLNwk+Vq8eHHui/O9l91LL72U++KlS5fmtfOJEyfmvnj79u157bxEXblyJa/1H3/8cYEmoUS5QgIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIIRxmUym2DMUSl1dXXd3d7GnCOfw4cN5rV+3bl2BJmGMy+u2iocOHSrcJGNEMpns6uoq9hRP4woJgBAECYAQSunXT7S3t2d/R0B/f//169ezf5RMJidNmlSkuQAYASUTpIMHD7a1tbW3tw9tHj9+fO/evVVVVUOb+/fvz/f32QAQSgkE6ZNPPmlpaTl16tSECROyD16+fLmxsXH9+vVFHAyAEVQC7yHt27evpqZm9+7dn33wypUrM2fO7O/vHxwcfMr3Jv9PgWcECKqEngZL4AqpqampoqLi7Nmz2UfS6fSNGzeam5sHBgZSqdTq1at37dr1xO/1sW9gjMs+DcZvUglcIVVUfH7Ivr6++vr61tbWDz/88IMPPjh37lxbW1tRZgNgpJRAkB5XW1t74MCB2traRCIxbdq0+vr6jo6OYg8FwLCUZJB6e3uPHTuW3Xzw4MHjV1EAlJaSfB6/f/9+U1NTT09PIpG4c+fO6dOnV6xYUeyhABiWEvhQw+Pq6uoaGxvXrl07b968S5cuNTQ0+CEkgFLn5qpjzosvvpjX+r/+9a8FmoQxrrW1NffFb7zxRuEmGSPcXBUAciJIAIQgSACEIEgAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhCBIAIRQkjdXhaIbutl8IZw8eTKv9alUKvfFO3fuzHMcGD2ukAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACMG97CgZ//rXv/Jaf+vWrdwX79mzJ6+dt7W15bW+cF588cXcF7uXHZG5QgIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIAT3shtzrl27ltf69957L/fFs2fPzmvnly5dyn3xr371q7x23tnZmdd6Rtmrr76a++Lq6uq8dp5KpfIch+JzhQRACIIEQAiCBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAIbq465nz66ad5rd+0aVOBJmGM++pXv5r74mee8WRV/lwhARBCafyjo6enp7e3t6amZsGCBdkHb968efXq1eeee66urq6IswEwIkogSM3NzWfOnFm4cGFXV9fEiRMPHTpUVVV14sSJlpaWJUuWdHR0vPbaa1u3bi32mAAMS/Qg/f3vfz9y5Eh7e/vkyZMTicSKFStOnjz5/e9/f8eOHUeOHJk9e3Z/f/8rr7yycuXKGTNmFHtYAP7/ogepurq6tbV1qEaJRGLGjBm3b98+d+5cdXX10C8nrampWbZs2fnz558YpGQyOfRFd3f3qM0MEEf2aTC+6EGaPn369OnTh77u7e09ffr05s2bu7q65syZk10zYcKErq6uJ367DgFjXPZpMH6ZSuZTdnfu3Hn99de3bNkyd+7cdDo9bty47B9VVlZmMpkizgbA8JVGkC5evLhq1aoNGzZs2bIlkUiMHz/+0aNH2T9Np9OVlZXFmw6AEVACQbpw4cKmTZt27NixcePGoUemTp3a2dmZXZBKpRYuXFik6QAYGdGDdPPmzYaGhnfffffll18eHBwcHBxMp9OLFi1KJBJnz55NJBI9PT3nz59fvHhxsScFYFiif6jh8OHDd+/e3bx5c/aR9evXb9++fc+ePdu2bZs1a1ZnZ2dLS8uUKVOKOCQAwzeujD8OUFdX51N2lL3nn38+98UXLlzIa+fPPvtsftMUzHvvvZfX+jfeeCP3xQ8fPsxznJKUTCb/0weSg4j+kh0AY4QgARCCIAEQgiABEIIgARCCIAEQgiABEIIgARCCIAEQgiABEIIgARCCe9nBGPLNb34zr/UnTpzIfXGcG98lEokvfvGLuS++d+9e4SaJw73sACAnggRACIIEQAiCBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAIggRACM8UewBg9Hz00Ud5rV+5cmXui//whz/ktfMpU6bktT4ved21709/+lPhJiF3rpAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIwc1Vgf8or5uxbt26Na+d/+xnP8t98cmTJ/Paeb63kSUCV0gAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhCBIAIQwLpPJFHuGQqmrq+vu7i72FAAhJJPJrq6uYk/xNK6QAAihNO723dPT09vbW1NTs2DBgqFH+vv7r1+/nl2QTCYnTZpUpOkAGAElEKTm5uYzZ84sXLiwq6tr4sSJhw4dqqqqOn78+N69e6uqqobW7N+/f+nSpcWdE4BhycR2+fLlF154YWBgYGhz+fLlR48ezWQyb7311vvvv//0700mk8X+2wWIIplMFvwpe3iiv4dUXV3d2to6efLkoc0ZM2bcvn07kUhcuXJl5syZ/f39g4ODRR0QgJFRSp+y6+3tXb58+e9+97u6urqvf/3rX/va1wYGBlKp1OrVq3ft2vX4+rq6uuzXPm4HjE2ffa0o+Kfsor9kl9XX1/ed73znl7/8ZSaTuXXr1o9//ONbt24NPb506dLf/va3j3+Ll+wAsrxkNzIuXry4atWqDRs2bNmyJZFI1NbWHjhwoLa2NpFITJs2rb6+vqOjo9gzAjAsJRCkCxcubNq0aceOHRs3bhx6pLe399ixY9kFDx48qKgogQMB4GmKfYn2X/zzn/+cP3/+6dOnH/yfhw8fXr16de7cud3d3ZlMpq+vb8mSJefOnXv8e71kB5AV/yW76D+HdPjw4bt3727evDn7yPr167dv397Y2Lh27dp58+ZdunSpoaHBDyEBlLpS+pRdvtzLDiDLvewAICeCBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAIglQykslksUcYJWPkSMfIYSbGzJGOkcMsKEECIARBAiCEcZlMptgzFEpdXV2xRwAIpKurq9gjPE05BwmAEuIlOwBCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQnim2APw3/X391+/fj27mUwmJ02aVMR5CqS9vX3p0qXZzZs3b169evW5554rvztufPZIy/Lk9vT09Pb21tTULFiwIPtgWZ7Qx4+0LE/oqBGkEnD8+PG9e/dWVVUNbe7fv/+zT9zl4eDBg21tbe3t7UObJ06caGlpWbJkSUdHx2uvvbZ169bijjeCPnek5Xdym5ubz5w5s3Dhwq6urokTJx46dKiqqqosT+gTj7T8TuioyhDeW2+99f777xd7ikIZGBh4++2358+f/61vfWvokYcPH86fP7+7uzuTyXz88cff+MY3/vGPfxR1xpHx+JFmyu7kXr58+YUXXhgYGBjaXL58+dGjR8vyhD7xSDNld0JHmfeQSsCVK1dmzpzZ398/ODhY7FlG3r59+2pqanbv3p195Ny5c9XV1bNnz04kEjU1NcuWLTt//nzxBhwxjx9pouxObnV1dWtr6+TJk4c2Z8yYcfv27bI8oU880kTZndBR5iW76NLp9I0bN5qbmwcGBlKp1OrVq3ft2lXsoUZSU1NTRUXF2bNns4+kUqk5c+ZkNydMmBD8FsU5evxIy+/kTp8+ffr06UNf9/b2nj59evPmzV1dXeV3Qp94pOV3QkeZK6To+vr66uvrW1tbP/zwww8++ODcuXNtbW3FHmokVVR8/j/CdDo9bty47GZlZWWmLO5J//iRlvHJvXPnzuuvv75ly5a5c+eW6wkd8tkjLeMTOjoEKbra2toDBw7U1tYmEolp06bV19d3dHQUe6jCGj9+/KNHj7Kb6XS6srKyiPMUTrme3IsXL65atWrDhg1btmxJlPUJ/dyRlusJHTWCFF1vb++xY8eymw8ePHj8H9plZurUqZ2dndnNVCq1cOHCIs5TOGV5ci9cuLBp06YdO3Zs3Lhx6JFyPaGPH2lZntDR5C8ruvv37zc1NfX09CQSiTt37pw+fXrFihXFHqqwFi1alEgkht5r6enpOX/+/OLFi4s9VEGU38m9efNmQ0PDu++++/LLLw8ODg4ODqbT6bI8oU880vI7oaPMhxqiq6ura2xsXLt27bx58y5dutTQ0FD2P9ZQUVGxZ8+ebdu2zZo1q7Ozs6WlZcqUKcUeqiDK7+QePnz47t27mzdvzj6yfv367du3l98J/U9HWmYndJT5Feal4dGjR/fu3fvCF74wpl4B+Pe//z0WDnnsnFwnlKcTJABCEHAAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQvgfe9DMsFBc+9sAAAAASUVORK5CYII=\" data-image-state=\"image-loaded\" width=\"252\" height=\"189\"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 2px 8px; transform-origin: 2px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline;width: 252px;height: 189px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjAAAAGkCAIAAACgjIjwAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH5wgRDhozGiNMZgAAACR0RVh0U29mdHdhcmUATUFUTEFCLCBUaGUgTWF0aFdvcmtzLCBJbmMuPFjdGAAAACJ0RVh0Q3JlYXRpb24gVGltZQAxNy1BdWctMjAyMyAwNzoyNjo1MUb6R/cAABckSURBVHic7d19bFaF3f/xQ0Er8yFUJE3aICPYVisyBRIYim63NASVxAWkcdURo3NS2TRZVMQHdOCWSfABHxZAJIoNMTO6ZVFjN5FSn3DIEETX1oaKolBtBQzIU9v7j+7uz9/90+0Xrsr5Hni9/roOudJ8hPa8Pee62vbp6upKACBteWkPAIAkESQAghAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAELol/aA71BZWVnaEwACaWhoSHvCv3MkBylJksbGxtw/SGlpaa98nN7SW3vuvvvu3D9IkiQ1NTVVVVW98qHuvPPO3D9IWVlZtK+6aJN6a89vfvOb3D9I0qufQnPmzMn9gxypX/KlpaW5f5DvlFt2AIQgSACEIEj/WaiL9yTent662dJbQt0c6xZtUrQ90T6Fon2JRdvz3REkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAELIfJDq6+vTngBAL8h2kB599NHZs2envQKAXpDV34f0xRdf/P73v6+trT3++OPT3gJAL8jqFdIDDzwwcODAe+65J+0hAPSOrF4hzZkzJy8vr66u7t8/rec3JB49P78d4Ovi/6LYHlkNUl7e/9e1nQ4BR7me02D8MmX1lh0ARxhBAiAEQQIgBEECIIRsB+mCCy7wkxoAjgzZDhIARwxBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIghH5pDzh0TU1NLS0tAwcOHDlyZNpbAMhVVoM0d+7cV155ZdSoUQ0NDSeccMKyZcvy8/PTHgXAoctkkN57772nn366vr6+oKAgSZLJkyf/5S9/mTp1atq7ADh0mXwNacCAAYsXL+6uUZIkQ4cO/eSTT9KdBECOMnmFVFRUVFRU1P24paVl5cqV11133Tc+s7S0tPtBY2PjYRoHEEnPaTC+TAapx/bt26+66qrq6ury8vJvfIIOAUe5ntNg/DJl8pZdtw0bNlx66aVXXnlldXV12lsAyFVWr5Bef/31G264Yd68eRMnTkx7CwC9IJNB+uijj2bOnLlgwYLzzjvvwIEDSZLk5eX17ds37V0AHLpMBqmmpmb37t1ffyNDVVXVnXfemeIkAHKUySDNmjVr1qxZaa8AoDdl+E0NABxJBAmAEAQJgBAECYAQBAmAEAQJgBAECYAQBAmAEAQJgBAECYAQBAmAEAQJgBAECYAQBAmAEAQJgBAECYAQBAmAEAQJgBAECYAQBAmAEAQJgBAECYAQBAmAEAQJgBAECYAQBAmAEAQJgBD6pT3g0DU0NGzZsuW0004bOnRo2lsAyFVWr5Duu+++mTNnvvzyy9dcc82iRYvSngNArjJ5hdTU1PT444/X19cXFBR89tln559//tSpUwcOHJj2LgAOXSavkIYNG/bcc88VFBQkSdKvX7/Ozs6DBw+mPQqAnGTyCikvL6+kpKSjo+OZZ56pqam5/vrrCwsLv/GZpaWl3Q8aGxsP40CAKHpOg/FlMkjd2tvb9+7dW1hY+Oqrr1555ZXdF0z/iw4BR7me02D8MmXyll23QYMGTZ8+fcmSJf3793/yySfTngNATjIZpObm5qeeeqrnsLCw8NNPP01xDwC5y2SQOjs7f/e73zU3NydJ8tlnn7322msVFRVpjwIgJ5l8DamkpOT222+fMmXKyJEj161bN2PGjAsvvDDtUQDkJJNBSpLk8ssvv/zyy9NeAUCvyeQtOwCOPIIEQAiCBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAImQ/S+vXrP/vss7RXAJCrbAepqanpiiuuWL9+fdpDAMhVhoN04MCBX//614MGDUp7CAC9IMNBWrBgwYQJE0pKStIeAkAv6Jf2gEO0Zs2at95669lnn7322mv/zdNKS0u7HzQ2Nh6WXQCx9JwG48tkkHbt2jVnzpw//OEP//GZOgQc5XpOg/HLlMkg3XvvvWecccaWLVu2bNnS3t7+3nvvnXrqqWVlZWnvAuDQZTJIgwYNam1trampSZJk69atdXV1J554oiABZFomg3TDDTf0PL722msvu+yyioqKFPcAkLsMv8sOgCNJJq+Qvm7x4sVpTwCgF7hCAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIIR+aQ84RG1tbZs3b+45LC0tPemkk1LcA0COshqk55577v7778/Pz+8+fPDBB8ePH5/uJABykdUgbdq0afbs2VVVVWkPAaB3ZPU1pPfff3/YsGFtbW0HDhxIewsAvSCTV0gdHR0ffvjh3Llz29vbd+zYMWXKlHnz5n3jM0tLS7sfNDY2HsaBAFH0nAbjy2SQtm3bVlFRccsttxQXF2/fvv2yyy5bsWLF5Zdf/v8+U4eAo1zPaTB+mTJ5y664uHjhwoXFxcVJkhQWFlZUVLz99ttpjwIgJ5kMUktLyzPPPNNzuH///ry8TP6HANAjk+fxffv2zZkzp6mpKUmS7du3r1y5cvLkyWmPAiAnmXwNqaysbPbs2ZWVlWedddbGjRtnzpzpm5AAsi6TQUqSpKqqyjchARxJMnnLDoAjjyABEIIgARCCIAEQgiABEIIgARCCIAEQgiABEIIgARCCIAEQgiABEIIgARCCIAEQgiABEIIgARCCIAEQgiABEIIgARCCIAEQgiABEIIgARCCIAEQgiABEIIgARCCIAEQgiABEIIgARCCIAEQQr+0Bxy6tra29evXH3/88WPHjk17CwC5ymqQ6urqZs2ade6557a0tOTn5y9fvjwvz9UeQIZlMkgdHR2zZs164IEHxowZkyTJxRdf/NJLL02aNCntXQAcukwGadWqVcXFxd01SpLk+eef/7ZnlpaWdj9obGw8HMsAguk5DcaXySDt2LFj8ODBd9xxx5///Od+/fpVV1dfc8013/hMHQKOcj2nwfhlyuTrLk1NTbW1tcOHD9+wYcOKFSsWLVpUX1+f9igAcpLJIA0ZMuTUU0+trKxMkqSsrGzChAkvvPBC2qMAyEkmb9mdfPLJXz/s27dvWksA6C2ZvEL6r//6ry+++OKVV15JkqStrW316tWXXHJJ2qMAyEkmr5COOeaYhx9++Kabblq0aFFTU9PVV1/te2MBsi6TQUqSZPTo0d1XSAAcGTJ5yw6AI48gARCCIAEQgiABEIIgARCCIAEQgiABEIIgARCCIAEQgiABEIIgARCCIAEQgiABEIIgARCCIAEQgiABEIIgARCCIAEQgiABEIIgARCCIAEQgiABEIIgARCCIAEQgiABEIIgARCCIAEQQr+0BxyKtra2zZs3f/1PBg4cOHTo0LT2AJC7TAZp7dq1t956a8/hV199NW3atLvvvjvFSQDkKJNBmjhx4sSJE7sf19fX33bbbTfeeGO6kwDIUSaD1GPPnj2zZ8/+7W9/W1BQ8I1PKC0t7X7Q2Nh4GHcBRNFzGowv20FasmTJ6aefPn78+G97gg4BR7me02D8MmU4SPv27Vu2bNmTTz6Z9hAAekGG3/b94osvDh48eMSIEWkPAaAXZDhIdXV1FRUVaa8AoHdkOEhvvvnmD37wg7RXANA7shqkzs7O9vb28vLytIcA0Duy+qaGvLy8hoaGtFcA0GuyeoUEwBFGkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACKFf2gMO3ebNmz/44IPi4uLy8vK0twCQq6wG6fHHH1+6dOm4ceM2btw4evToefPmpb0IgJxkMkidnZ0LFiz405/+VFJSsmvXrh/+8Ic//elPXScBZFomg5QkSWdn53HHHZckSf/+/fv06bN///5vfFppaWn3g8bGxsM3DiCMntNgfJkMUl5e3l133VVdXT1hwoTXXnutsrLy7LPP/sZn6hBwlOs5DcYvU1bfZbd27dr+/fufcsopAwYMaG5u3rNnT9qLAMhJJoP08ssvr1u3bsWKFVVVVYsXL06SZOnSpWmPAiAnmQzSjh07ysrK+vbt2304ZMiQjz76KN1JAOQok0E644wzXn311ebm5iRJdu3atXbt2jFjxqQ9CoCcZPJNDeXl5bfddtu0adOGDx/+7rvvTp06dcqUKWmPAiAnmQxSkiSVlZWVlZVprwCg12Tylh0ARx5BAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIghAwHqamp6a9//WtLS0vaQwDoBVkN0vz583/2s5/V1tZed911Dz30UNpzAMhVv7QHHIoNGzY88cQTtbW1RUVF+/btmzRp0gUXXDBixIi0dwFw6DIZpObm5vPPP7+oqChJkvz8/FGjRtXW1n5jkEpLS7sfNDY2HtaJADH0nAbjy2SQjj322I8//rjncOfOnX369PnGZ+oQcJTrOQ3GL1MmX0MaN25ca2vr/Pnz16xZ88QTT2zatKmrqyvtUQDkJJNBKigoWL58eUtLy8KFC3ft2jV58uT8/Py0RwGQk0zesvvyyy937979yCOPdB/OmDFjwoQJ6U4CIEeZvEL68ssvq6qqtm/fniTJP/7xj7Vr11ZUVKQ9CoCcZPIKqaio6Oabb540aVJ5efnWrVsfeuihk046Ke1RAOQkk0FKkmT69OnTp09PewUAvSaTt+wAOPIIEgAhCBIAIQgSACEIEgAhCBIAIQgSACEIEgAhCNJ/Fu1ntkfbU1NTk/aE/0tZWVnaE/63aJOi7Yn2KRTtSyzanu+OIAEQgiABEEKfI/hX20W7LwGQroaGhrQn/DtHcpAAyBC37AAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACKFf2gMyoL6+fvz48WmvSJIkaWpqamlpGThw4MiRI9Pe8i8NDQ1btmw57bTThg4dmvaW/2P9+vXFxcWDBg1Kd0ZbW9vmzZt7DktLS0866aQU9yRJ0tbWtn79+uOPP37s2LGpL/n6X06SJAMHDozwWbR58+YPPviguLi4vLw87S1J8j9f9SUlJd///vfT3vKd85Ma/oNHH310xYoV9fX1aQ9J5s6d+8orr4waNaqhoeGEE05YtmxZfn5+upPuu+++F198cdSoUX//+9+nTZv2i1/8It093Zqamn7yk5/cf//9FRUV6S557LHH7r///p5/pgcffDDd/7Opq6ubNWvWueee29LSkp+fv3z58ry81O6RvPTSS7feemvP4VdffTVt2rS77747rT3dHn/88aVLl44bN27jxo2jR4+eN29eunvmz5//7LPPnnfeeRs3brz44ot/+ctfprvnO9fFt2hvb7/lllvOOeec8847L+0tXZs2bTrzzDPb29u7Dy+55JI//vGP6U5qbGzsmdTa2nr66ad//vnn6U7q6urav3//5MmTf/SjH9XW1qa9pevGG2986qmn0l7xLwcPHhw7duybb77ZfXjRRRe98MIL6U7qsXr16vHjx/d8eqelo6OjvLy8sbGxq6tr586d5eXlmzZtSnHPO++8c+aZZ27durWrq2vv3r0//vGP33nnnRT3HAZeQ/pWDzzwwMCBA++55560hyRJkgwYMGDx4sUFBQXdh0OHDv3kk0/SnTRs2LDnnnuue1K/fv06OzsPHjyY7qQkSRYsWDBhwoSSkpK0hyRJkrz//vvDhg1ra2s7cOBA2luSVatWFRcXjxkzpvvw+eefnzRpUrqTuu3Zs2f27Nn33HNPz6d3ijo7O4877rgkSfr379+nT5/9+/enOKa5ufn8888vKipKkiQ/P3/UqFG1tbUp7jkMBOlbzZkz56abbvre976X9pAkSZKioqJx48Z1P25paVm5cuWECRPSnZSXl1dSUtLR0fH0009Pnz79+uuvLywsTHfSmjVr3nrrrV/96lfpzujW0dHx4Ycfzp0795JLLhkxYsTtt9+e7p4dO3YMHjz4jjvuGDFixMiRIx977LF09/RYsmTJ6aefHuFl2ry8vLvuuqu6uvrBBx+sqqqqrKw8++yzU9xz7LHHfvzxxz2HO3fubG1tTXHPYSBI3yrF2+v/xvbt26+66qrq6uogr7i2t7fv3bu3sLDw1Vdf/eKLL1JcsmvXrjlz5ixYsCDFDV+3bdu2ioqKxYsXv/HGG6tWrVq9evWKFStS3NPU1FRbWzt8+PANGzasWLFi0aJFEV4Z3bdv37Jly+K8NLJ27dr+/fufcsopAwYMaG5u3rNnT4pjxo0b19raOn/+/DVr1jzxxBPd9w9T3HMYRDzn8m02bNhw6aWXXnnlldXV1Wlv+ZdBgwZNnz59yZIl/fv3f/LJJ1Nccu+9955xxhlbtmypq6trb29/77330v3VL8XFxQsXLiwuLk6SpLCwsKKi4u23305xz5AhQ0499dTKysokScrKyiZMmPDCCy+kuKfbiy++OHjw4BEjRqQ9JEmS5OWXX163bt2KFSuqqqoWL16cJMnSpUtT3FNQULB8+fKWlpaFCxfu2rVr8uTJqb+P6bvmbd+Z8frrr99www3z5s2bOHFi2luSJEmam5vfeOONK664ovuwsLDw008/TXHPoEGDWltba2pqkiTZunVrXV3diSeemOIvaWxpaVm7du3UqVO7D/fv35/uNffJJ5/89cO+ffumteTr6urqUn8zZI8dO3aUlZX1/M0MGTLko48+SnHPl19+uXv37kceeaT7cMaMGanfqP/Opf2uiuhWrVoV4V12W7ZsOeecc1auXLn/fxw8eDDdSY2NjeXl5R988EFXV1dra+u4ceP+9re/pTupx89//vPU32X3z3/+s+ctW9u2bRs3btzq1atT3LN///4xY8asXLmyq6vr888/Hz9+/BtvvJHinm5jx45dtWpV2iv+ZdOmTWeddVb3p/TOnTsvuuiiZ555JsU9W7duLS8v37ZtW1dX17p160aPHr1z584U9xwGrpCyoaamZvfu3dddd13Pn1RVVd15550pTiopKbn99tunTJkycuTIdevWzZgx48ILL0xxTzRlZWWzZ8+urKw866yzNm7cOHPmzHRftz/mmGMefvjhm266adGiRU1NTVdffXXq3xvb2dnZ3t4e5NXQJEnKy8tvu+22adOmDR8+/N133506deqUKVNS3FNUVHTzzTdPmjSpvLx869atDz30UOrfWP1d842x5KSzs7Otre3kk08Ocgsoms7Ozr179x533HFx3iPz1VdfHXvssf69vk33P1l+fn6Qv6KOjo59+/YFebvvd02QAAghyv+1AXCUEyQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABC+G8Tb/bPfPYYhwAAAABJRU5ErkJggg==\" data-image-state=\"image-loaded\" width=\"252\" height=\"189\"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 2px 8px; transform-origin: 2px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline;width: 252px;height: 189px\" src=\"data:image/png;base64,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PcuyxsbGQ4cONTY2Zlk2f/785ubmjo6OSu8RgAnJQZAuXbq0devW3bt3b9myZeyZ3t7ekydPlhY8fPiwpiYHJwLAj6n0Ldp/8a9//eu11147e/bsw//16NGja9euvfLKK93d3aOjo/39/atXr75w4cKTf9ZbdgAl8d+yi/57SMeOHfvuu++2bdtWeqalpeXTTz9tbW3dtGnTihUrLl++vGPHDr+EBJB3efopu1RNTU1+uA5gTKFQCP5Tdj56ASAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEHKjUKhUOktPCNT5EynyGlmU+ZMp8hplpUgARCCIAEQwrTR0dFK76FcmpqaKr0FgEC6uroqvYUfU81BAiBHvGUHQAiCBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAIz1V6A/x3g4OD169fLz0sFAqzZ8+u4H7K5OLFi2vWrCk97Ovru3bt2ssvv1x9Eze+f6ZVeXF7enp6e3sbGhpef/310pNVeUGfPNOqvKDPjCDlwKlTp/bv319bWzv28ODBg9//xl0dDh8+fPz48YsXL449PH36dFtb2+rVqzs6Ot5///0PP/ywstubRD840+q7uHv27Dl37tzKlSu7urrq6uqOHj1aW1tblRf0qWdafRf0mRolvI8++uiLL76o9C7KZWho6OOPP37ttdfeeuutsWcePXr02muvdXd3j46O3rlz55e//OU///nPiu5xcjx5pqNVd3GvXLny6quvDg0NjT1ct27dl19+WZUX9KlnOlp1F/QZ8xlSDly9enXJkiWDg4PDw8OV3svkO3DgQENDw2effVZ65sKFC/X19cuWLcuyrKGhYe3ate3t7ZXb4KR58kyzqru49fX1R44cmTNnztjDxYsX37p1qyov6FPPNKu6C/qMecsuupGRkRs3buzZs2doaKhYLG7cuHHv3r2V3tRk2rVrV01Nzfnz50vPFIvF5cuXlx7OmjUr+IjicXryTKvv4i5atGjRokVjX/f29p49e3bbtm1dXV3Vd0GfeqbVd0GfMXdI0fX39zc3Nx85cuTrr7/+6quvLly4cPz48UpvajLV1PzwL+HIyMi0adNKD6dPnz5aFTPpnzzTKr64AwMDH3zwwfbt21955ZVqvaBjvn+mVXxBnw1Biq6xsfHQoUONjY1Zls2fP7+5ubmjo6PSmyqvGTNmPH78uPRwZGRk+vTpFdxP+VTrxf3mm282bNiwefPm7du3Z1V9QX9wptV6QZ8ZQYqut7f35MmTpYcPHz588h/aVeaFF17o7OwsPSwWiytXrqzgfsqnKi/upUuXtm7dunv37i1btow9U60X9MkzrcoL+ix5saJ78ODBrl27enp6siwbGBg4e/bs+vXrK72p8nrjjTeyLBv7rKWnp6e9vX3VqlWV3lRZVN/F7evr27Fjx+eff/7OO+8MDw8PDw+PjIxU5QV96plW3wV9xvxQQ3RNTU2tra2bNm1asWLF5cuXd+zYUfW/1lBTU7Nv376dO3cuXbq0s7Ozra1t3rx5ld5UWVTfxT127Nh33323bdu20jMtLS2ffvpp9V3Q/+tMq+yCPmP+F+b58Pjx4/v378+cOXNKvQPw73//eyqc8tS5uC4oP06QAAhBwAEIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAI4X8AiB24LVwZWacAAAAASUVORK5CYII=\" data-image-state=\"image-loaded\" width=\"252\" height=\"189\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 147px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 73.5px; text-align: left; transform-origin: 384px 73.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 91px 8px; transform-origin: 91px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe entire Matlab code from \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.youtube.com/watch?v=ZOXOwYUVCqw\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eConvolutional Neural Networks in Matlab by Nuruzzaman Faruqui\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 70px 8px; transform-origin: 70px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e , a Matlab Neural Net Tutorial for Mnist processing, is included in the function template. Loading the Mnist Train/Test Images/Labels from posted MAT files or \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"/#null\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eTHE MNIST DATABASE of handwritten digits\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 181.5px 8px; transform-origin: 181.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e are provided. The Neural Net tutorial explains Neural Net processing for Digit Recognition. The neural net training method uses 784 input nodes,  20 convolutions(9x9), ReLU, Pooling, batch sampling, single hidden layer of 100 nodes, updating parameters via backwards propagation, and updating convolution kernels. The digit prediction accuracy is \u0026gt;94% after 50s of training. The final feature kernels are very amorphous and unexpected.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function mValidConv2=create_ValidConv2(m,K)\r\n  mValidConv2=conv2(m,K,'same');\r\nend\r\n\r\n% Code from Convolutional Neural Network in Matlab by Nuruzzaman Faruqui\r\n% Youtube:  https://www.youtube.com/watch?v=ZOXOwYUVCqw\r\n% I have made comments noted by raz and a couple speed enhancements\r\n% I also provide alternate direct source for MNIST files as .mat files\r\n%{\r\nfunction MNIST_Process\r\n%Based upon https://www.youtube.com/watch?v=ZOXOwYUVCqw\r\n%784 input nodes;20 conv 9x9 filters,ReLU;2x2 submatrix Pooling layer,single hidden layer 100 nodes\r\n\r\n%Matlab Convolutional Neural Network in Matlab\r\n%Processing MNIST digits using conv, contents, \r\n%MNIST files  http://yann.lecun.com/exdb/mnist/\r\n%Create filters\r\n%File Exchange NN https://www.mathworks.com/matlabcentral/fileexchange/59223-convolution-neural-network-simple-code-simple-to-use?s_tid=ta_fx_results\r\n%\r\n%use Test_images.mat if avail, use MNIST ubyte files if avail, load Test_images.mat\r\ndir_struct=dir;\r\nfilenames={dir_struct.name};\r\nfn='Test_images.mat';\r\nptr=find(ismember(filenames,fn));\r\nif ~isempty(ptr) % Test images/labels mat files exist\r\n tic;\r\n load('Test_images'); % images [28,28,10000] uint8\r\n load('Test_labels'); % labels [10000,1] uint8 values 0:9\r\n fprintf('Images:%i  Time:%.2f\\n',size(images,3),toc);\r\n Images=double(images)/255; %raz values must be 0:1 or bad things happen\r\n Labels=double(labels);\r\n Labels(Labels==0)=10; % 0 remapped to 10\r\n\r\nelse % Check for Mnist file\r\n %MNIST files source  http://yann.lecun.com/exdb/mnist/\r\n fn='t10k-images.idx3-ubyte'; %NMIST gzip expanded file for Test Images 10K\r\n filenames={dir_struct.name};\r\n ptr=find(ismember(filenames,fn));\r\n if ~isempty(ptr)\r\n  tic\r\n  Images=loadMNISTImages(fn);\r\n  fprintf('MNIST Images Process Time: %.2f\\n',toc); %raz\r\n  Images=reshape(Images,28,28,[]); % Un-vectorize the images\r\n  %Images already scaled by 1/255 in loadMNISTImages\r\n \r\n  Labels=loadMNISTLabels('t10k-labels.idx1-ubyte');\r\n  Labels(Labels==0)=10; % 0 to 10\r\nelse % download Test_images.mat, Test_labels.mat and load\r\n fnameTestI='Test_images.mat'; %load('Test_images.mat') creates images(28,28,10000) 1.6MB\r\n fnameTrainI='Train_images.mat'; %load('Train_images.mat') creates images(28,28,60000)  9.9MB\r\n fnameTestL='Test_labels.mat'; %load('Test_images.mat') creates labels(10000,1) 5KB\r\n fnameTrainL='Train_labels.mat'; %load('Train_images.mat') creates labels(60000,1) 30KB\r\n \r\n %Google Drive Dowloads need to come from shared files\r\n% Tweak link: file/d/ to uc?export=download\u0026id=   while removing /view?usp=sharing\r\n% https://drive.google.com/file/d/1v3GsGgP3p905wzdvUqypL_-djYmxiyzK/view?usp=sharing\r\n% https://drive.google.com/uc?export=download\u0026id=1v3GsGgP3p905wzdvUqypL_-djYmxiyzK\r\n \r\n\r\n  urlTeI='https://drive.google.com/uc?export=download\u0026id=10ReGWlfSvr9p6uq6FQlqw6vw3UXgWo57';\r\n  urlTeL='https://drive.google.com/uc?export=download\u0026id=105zTcVgItZ2JjFiUkJulU33R7lXNl29-';\r\n  urlTrI='https://drive.google.com/uc?export=download\u0026id=1HJZssH6_9OcQ8mXwS_DtvsS_Kk86BDFY';\r\n  urlTrL='https://drive.google.com/uc?export=download\u0026id=1KNTn2eNXbQkQJNe6xhO1LMmvkDRP-XLq';\r\n \r\n  tic\r\n  urlwrite(urlTeI,fnameTestI); %Writing GoogleDrive MNIST_Test_images.pdf  Test_images.mat \r\n  fprintf('Download 1.6MB Time: %.1f  sec\\n\\n',toc); %1.6MB download Time, about 1.1 sec\r\n \r\n  tic\r\n  urlwrite(urlTeL,fnameTestL); %Writing GoogleDrive MNIST_Test_labels.pdf  Test_labels.mat\r\n  fprintf('Download 5KB Time: %.1f  sec\\n\\n',toc); %5KB download Time, about 0.5 sec\r\n \r\n  tic\r\n  urlwrite(urlTrI,fnameTrainI); %Writing GoogleDrive MNIST_Train_images.pdf  Train_images.mat\r\n  fprintf('Download 9.9MB Time: %.1f  sec\\n\\n',toc); %9.9MB download Time, about 4.1 sec\r\n \r\n  tic\r\n  urlwrite(urlTrL,fnameTrainL); %Writing GoogleDrive MNIST_Train_labels.pdf  Train_labels.mat\r\n  fprintf('Download 30KB Time: %.1f  sec\\n\\n',toc); %30KB download Time, about 0.6 sec\r\n\r\n  tic\r\n  load('Test_images'); % images [28,28,10000] uint8\r\n  load('Test_labels'); % labels [10000,1] uint8 values 0:9\r\n  fprintf('Images:%i  Time:%.2f\\n',size(images,3),toc); %.05s\r\n  Images=double(images)/255; %raz values must be 0:1 or bad things happen\r\n  Labels=double(labels);\r\n  Labels(Labels==0)=10; % 0 to 10\r\n end % if MNIST ubyte files\r\n\r\nend % if Test_images.mat\r\n\r\n\r\nrng(1); %raz not liked by curretn matlab\r\n\r\nW1=.01*randn([9 9 20]); %Conv Kernels   base .01\r\nW5=(2*rand(100,2000)-1)*sqrt(6)/sqrt(360+2000); %Hidden layer coeff of 100 pooled\r\nWo=(2*rand(10, 100)-1)*sqrt(6)/sqrt( 10+ 100); %Output coeff to find 0:9 best match\r\n\r\nX=Images(:,:,1:8000);\r\nD=Labels(1:8000);\r\nztic=tic;\r\nfor epoch=1:3  %Repeat cycles of all Training data\r\n fprintf('epoch:%i  Time:%.2f\\n',epoch,toc(ztic));\r\n [W1, W5, Wo]=MnistConv(W1,W5,Wo,X,D);\r\nend %epoch\r\n\r\n%save('MnistConv.mat'); % Used for Post analysis, see video\r\n\r\nX=Images(:,:,8001:10000);\r\nD=Labels(8001:10000);\r\nacc=0;\r\nN=length(D);\r\n\r\nfor k=1:N\r\n x=X(:,:,k);\r\n y1=Conv(x,W1); %Neural Net Processing  W1 kernels on image-x\r\n y2=ReLU(y1);   %Rectification process\r\n y3=Pool(y2);   %Take 20x20 conv images into 100 values\r\n y4=reshape(y3,[],1);\r\n v5=W5*y4;      %Hidden layer weights\r\n y5=ReLU(v5);   %Rectification process\r\n v=Wo*y5;       %Wo Output weight processing\r\n y=Softmax(v);  %create vector length 10 of expected probability, uses exp(x) smoothing\r\n                %Needed in training but not sure why in evaluation\r\n \r\n [~,i]=max(y);\r\n if i==D(k)\r\n  acc=acc+1;\r\n end\r\nend %k\r\n\r\n acc=acc/N;\r\n fprintf('Accuracy is %.2f%%  Time:%.2f\\n',100*acc,toc(ztic));  %raz output/time\r\n\r\nend% MNIST_Process\r\n\r\nfunction [W1, W5,Wo]=MnistConv(W1, W5,Wo,X,D)\r\n alpha=.01;\r\n beta=0.95;\r\n z=reshape(1:100,10,10); % raz\r\n kmap=kron(z,ones(2)); % raz\r\n \r\n momentum1=zeros(size(W1));\r\n momentum5=zeros(size(W5));\r\n momentumo=zeros(size(Wo));\r\n \r\n N=length(D);\r\n \r\n bsize=100;\r\n blist=1:bsize:(N-bsize+1);\r\n \r\n for batch=1:length(blist) % Batch/Updates, each Batch creates updates to Params\r\n  dW1=zeros(size(W1));\r\n  dW5=zeros(size(W5));\r\n  dWo=zeros(size(Wo));\r\n  \r\n  begin=blist(batch);\r\n  for k=begin:begin+bsize-1  %Subset Group of Training samples for param adjust\r\n   x=X(:,:,k);\r\n   y1=Conv(x,W1); %8K/5.8s  3.5s\r\n   y2=ReLU(y1);\r\n   y3=Pool(y2);\r\n   y4=reshape(y3,[],1);\r\n   v5=W5*y4;\r\n   y5=ReLU(v5);\r\n   v=Wo*y5;\r\n   y=Softmax(v); %10 Probability Bins for [1-9 0] \r\n   \r\n   d=zeros(10,1);\r\n   d(sub2ind(size(d),D(k),1))=1;\r\n   \r\n    e=d-y; % raz should this be (e-y)^2*sign(e-y)?\r\n    delta=e;\r\n    e5=Wo'*delta;\r\n    delta5=(y5\u003e0).*e5;\r\n    e4=W5'*delta5;\r\n    e3=reshape(e4,size(y3));\r\n    e2=zeros(size(y2));\r\n    W3=ones(size(y2))/(2*2);\r\n    \r\n    for c=1:20\r\n     %e2(:,:,c)=kron(e3(:,:,c),ones([2 2])).*W3(:,:,c); %160K/4.5s\r\n     e3c=e3(:,:,c); %160K/.27 raz\r\n     e2(:,:,c)=e3c(kmap).*W3(:,:,c);  %160K/.8s  raz\r\n    end %c\r\n    \r\n    delta2=(y2\u003e0).*e2;\r\n    delta1_x=zeros(size(W1)); \r\n    \r\n    for c=1:20\r\n     delta1_x(:,:,c)=conv2(x(:,:),rot90(delta2(:,:,c),2),'valid'); %160K/5.3s\r\n    end %c\r\n    \r\n    dW1=dW1+delta1_x; %error per kernel plane\r\n    dW5=dW5+delta5*y4'; %8K/4.2s  100x2000\r\n    dWo=dWo+delta*y5';\r\n  end %k\r\n  dW1=dW1/bsize;\r\n  dW5=dW5/bsize;\r\n  dWo=dWo/bsize;\r\n  \r\n  momentum1=alpha*dW1+beta*momentum1;\r\n  W1       = W1+momentum1;\r\n  \r\n  momentum5=alpha*dW5+beta*momentum5;\r\n  W5       = W5+momentum5;\r\n  \r\n  momentumo=alpha*dWo+beta*momentumo;\r\n  Wo       = Wo+momentumo;\r\n  \r\n end % batch\r\n \r\nend %MnistConv\r\n\r\nfunction rng(x)\r\n randn('seed',x);\r\n rand('seed',x);\r\nend % rng\r\n\r\nfunction y=Pool(x)\r\n [xrow,xcol,numFilters]=size(x);\r\n y=zeros(xrow/2,xcol/2,numFilters);\r\n for k=1:numFilters\r\n  filter=ones(2)/(2*2);\r\n  image=conv2(x(:,:,k),filter,'valid');\r\n  y(:,:,k)=image(1:2:end,1:2:end);\r\n end\r\n\r\nend %Pool\r\n\r\nfunction y=Conv(x,W)\r\n [wrow,wcol,numFilters]=size(W);\r\n [xrow,xcol,~         ]=size(x);\r\n \r\n yrow=xrow-wrow+1;\r\n ycol=xcol-wcol+1;\r\n \r\n y=zeros(yrow,ycol,numFilters);\r\n \r\n for k=1:numFilters\r\n  filter=W(:,:,k);\r\n  filter=rot90(squeeze(filter),2); %200K/2.5s  raz remove test/92.15%\r\n  y(:,:,k)=conv2(x,filter,'valid'); %200K/3.7s  3.5s\r\n end\r\nend %Conv\r\n\r\nfunction y=Softmax(x)\r\n ex=exp(x);\r\n y=ex/sum(ex);\r\nend %Softmax\r\n\r\nfunction y=ReLU(x)\r\n y=max(0,x);\r\nend %ReLU\r\n\r\n\r\n\r\nfunction images=loadMNISTImages(filename)\r\n%\r\nfp=fopen(filename,'rb');\r\nassert(fp~=-1,['Could not open', filename,'']);\r\nmagic=fread(fp,1,'int32',0,'ieee-be');\r\nassert(magic==2051,['Bad magic number in', filename, '']); %2051 Images\r\nnumImages=fread(fp,1,'int32',0,'ieee-be');\r\nnumRows=fread(fp,1,'int32',0,'ieee-be');\r\nnumCols=fread(fp,1,'int32',0,'ieee-be');\r\nimages=fread(fp,inf,'unsigned char=\u003eunsigned char');\r\nfclose(fp);\r\nfprintf('Images:%i  rows:%i  cols:%i\\n',numImages,numRows,numCols); %raz\r\n\r\nimages=reshape(images,numCols,numRows,numImages);\r\nimages=permute(images,[2 1 3]); \r\n\r\nimages=reshape(images,size(images,1)*size(images,2),size(images,3)); %raz Will be reverted\r\nimages=double(images)/255;\r\n \r\nend %loadMNISTImages\r\n\r\nfunction labels=loadMNISTLabels(filename)\r\n%\r\nfp=fopen(filename,'rb');\r\nassert(fp~=-1,['Could not open', filename,'']);\r\nmagic=fread(fp,1,'int32',0,'ieee-be');\r\nassert(magic==2049,['Bad magic number in ', filename,'']);\r\nnumLabels=fread(fp,1,'int32',0,'ieee-be');\r\nlabels=fread(fp,inf,'unsigned char');\r\nassert(size(labels,1)==numLabels,'Mismatch in label count');\r\nfclose(fp);\r\nfprintf('Labels:%i\\n',numLabels); %raz\r\n\r\n\r\nend %loadMNISTLabels\r\n%}","test_suite":"%%\r\n%Google Drive Dowloads need to come from shared files\r\n% Tweak link: file/d/ to uc?export=download\u0026id=   while removing /view?usp=sharing\r\n% https://drive.google.com/file/d/1v3GsGgP3p905wzdvUqypL_-djYmxiyzK/view?usp=sharing\r\n% https://drive.google.com/uc?export=download\u0026id=1v3GsGgP3p905wzdvUqypL_-djYmxiyzK\r\n fnameTestI='Test_images.mat'; %load('Test_images.mat') creates images(28,28,10000) 1.6MB\r\n fnameTrainI='Train_images.mat'; %load('Train_images.mat') creates images(28,28,60000)  9.9MB\r\n fnameTestL='Test_labels.mat'; %load('Test_images.mat') creates labels(10000,1) 5KB\r\n fnameTrainL='Train_labels.mat'; %load('Train_images.mat') creates labels(60000,1) 30KB\r\n \r\n urlTeI='https://drive.google.com/uc?export=download\u0026id=10ReGWlfSvr9p6uq6FQlqw6vw3UXgWo57';\r\n urlTeL='https://drive.google.com/uc?export=download\u0026id=105zTcVgItZ2JjFiUkJulU33R7lXNl29-';\r\n urlTrI='https://drive.google.com/uc?export=download\u0026id=1HJZssH6_9OcQ8mXwS_DtvsS_Kk86BDFY';\r\n urlTrL='https://drive.google.com/uc?export=download\u0026id=1KNTn2eNXbQkQJNe6xhO1LMmvkDRP-XLq';\r\n \r\n % fn.mat  https://drive.google.com/file/d/10GsOZTIjzMIuO7xAYIqLT1zIq9Cyubl-/view?usp=drive_link\r\n % Google Gives warning thus aborts urlwrite\r\n %\r\n %fname='Mnist_Test_images.pdf'\r\n %Fake name of .pdf on GoogleDrive,  write as a mat\r\n \r\n %url='https://drive.google.com/file/d/1mgxzsmVQNXgqHEdd61QR2r0STm3N9lgG/view?usp=drive_link';\r\n %ptr=strfind(url,'/view'); % Tweaking the url\r\n %url(ptr:end)=[];\r\n %url=strrep(url,'file/d/','uc?export=download\u0026id=');\r\n \r\n tic\r\n urlwrite(urlTeI,fnameTestI); %Writing GoogleDrive MNIST_Test_images.pdf  Test_images.mat\r\n fprintf('Download 1.6MB Time: %.1f  sec\\n',toc); %1.6MB download Time, about 1.5 sec\r\n \r\n tic\r\n urlwrite(urlTeL,fnameTestL); %Writing GoogleDrive MNIST_Test_labels.pdf  Test_labels.mat\r\n fprintf('Download 5KB Time: %.1f  sec\\n',toc); %5KB download Time, about .5 sec\r\n \r\n global labels images \r\n \r\n load('Test_images'); % images [28,28,10000] uint8\r\n load('Test_labels'); % labels [10000,1] uint8 values 0:9\r\n \r\n %Showing a Label and an image from Mnist\r\n ptr=randi(10000);\r\n fprintf('Label:%i\\n',labels(ptr));\r\n figure(1);imagesc(images(:,:,ptr)); colormap gray;\r\n \r\n \r\nvalid=1;\r\nassert(valid)\r\n%%\r\n%Showing a Label and an image from Mnist\r\n global labels images\r\n valid=1;\r\n ptr=randi(10000);\r\n fprintf('Label:%i\\n',labels(ptr));\r\n m=double(images(:,:,ptr))/255;\r\n figure(2);imagesc(m); colormap gray;\r\n \r\n K=repmat([0 0 .5 1 1 1 .5 0 0],9,1); % Vert Bar\r\n mValidConv2=create_ValidConv2(m,K);\r\n figure(3);imagesc(mValidConv2); colormap gray;\r\n mc=conv2(m,K,'same');\r\n if ~isequal(mc(5:end-4,5:end-4),mValidConv2)\r\n  valid=0;\r\n end\r\n \r\nassert(valid)\r\n\r\n%%\r\n%Showing a Label and an image from Mnist\r\n global labels images\r\n valid=1;\r\n ptr=randi(10000);\r\n fprintf('Label:%i\\n',labels(ptr));\r\n m=double(images(:,:,ptr))/255;\r\n figure(2);imagesc(m); colormap gray;\r\n \r\n K=repmat([0 0 .5 1 1 1 .5 0 0]',1,9); %Horiz Bar\r\n mValidConv2=create_ValidConv2(m,K);\r\n figure(3);imagesc(mValidConv2); colormap gray;\r\n mc=conv2(m,K,'same');\r\n if ~isequal(mc(5:end-4,5:end-4),mValidConv2)\r\n  valid=0;\r\n end\r\n \r\nassert(valid)\r\n\r\n%%\r\n%Showing a Label and an image from Mnist\r\n global labels images\r\n valid=1;\r\n m=rand(24);\r\n K=repmat([0 .5 1 1 1 .5 0]',1,7); %Horiz Bar\r\n mValidConv2=create_ValidConv2(m,K)\r\n mc=conv2(m,K,'same');\r\n if ~isequal(mc(4:end-3,4:end-3),mValidConv2)\r\n  valid=0;\r\n end\r\n \r\nassert(valid)\r\n\r\n%%\r\n%Showing a Label and an image from Mnist\r\n global labels images\r\n valid=1;\r\n m=rand(8);\r\n K=ones(3)/9;\r\n mValidConv2=create_ValidConv2(m,K)\r\n mc=conv2(m,K,'same');\r\n if ~isequal(mc(2:end-1,2:end-1),mValidConv2)\r\n  valid=0;\r\n end\r\n \r\nassert(valid)\r\n\r\n","published":true,"deleted":false,"likes_count":3,"comments_count":0,"created_by":3097,"edited_by":3097,"edited_at":"2023-08-17T19:33:19.000Z","deleted_by":null,"deleted_at":null,"solvers_count":13,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2023-08-17T14:03:38.000Z","updated_at":"2026-04-15T07:58:37.000Z","published_at":"2023-08-17T19:33:20.000Z","restored_at":null,"restored_by":null,"spam":null,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis challenge is to return only the Valid portion of a 2-D convolution. Valid is deemed to be where all elements of the kernel are applied against the image. The (1,1) point with a ones(3) kernel would be invalid while point (2,2) would return a Valid convolution value. The images will be even-square,m, and the kernels will be odd-square,K.The m=ones(6) and K=ones(3) would return a 4x4 matrix of 9s.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003emValidConv2=create_ValidConv2(m,K)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn neural net processing of the Mnist database of digits(0-9) one Convolutional Neural Network method uses 9x9 kernels on the 28x28 images to return the Valid 20x20 central core for the next processing step. The third image includes a black border of four around Valid to maintain scale.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"189\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"252\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"baseline\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"189\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"252\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"baseline\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId2\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"189\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"252\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"baseline\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId3\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe entire Matlab code from \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.youtube.com/watch?v=ZOXOwYUVCqw\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eConvolutional Neural Networks in Matlab by Nuruzzaman Faruqui\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e , a Matlab Neural Net Tutorial for Mnist processing, is included in the function template. Loading the Mnist Train/Test Images/Labels from posted MAT files or \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eTHE MNIST DATABASE of handwritten digits\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e are provided. The Neural Net tutorial explains Neural Net processing for Digit Recognition. The neural net training method uses 784 input nodes,  20 convolutions(9x9), ReLU, Pooling, batch sampling, single hidden layer of 100 nodes, updating parameters via backwards propagation, and updating convolution kernels. The digit prediction accuracy is \u0026gt;94% after 50s of training. The final feature kernels are very amorphous and unexpected.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image1.png\",\"relationshipId\":\"rId1\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image2.png\",\"relationshipId\":\"rId2\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image3.png\",\"relationshipId\":\"rId3\"}]},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\",\"relationship\":null},{\"partUri\":\"/media/image2.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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JMnSpUtT3FNQULB8+fKWlpaFCxfu2rVr8uTJqb+P6bvmbd+Z8frrr99www3z5s2bOHFi2luSJEmam5vfeOONK664ovuwsLDw008/TXHPoEGDWltba2pqkiTZunVrXV3diSeemOIvaWxpaVm7du3UqVO7D/fv35/uNffJJ5/89cO+ffumteTr6urqUn8zZI8dO3aUlZX1/M0MGTLko48+SnHPl19+uXv37kceeaT7cMaMGanfqP/Opf2uiuhWrVoV4V12W7ZsOeecc1auXLn/fxw8eDDdSY2NjeXl5R988EFXV1dra+u4ceP+9re/pTupx89//vPU32X3z3/+s+ctW9u2bRs3btzq1atT3LN///4xY8asXLmyq6vr888/Hz9+/BtvvJHinm5jx45dtWpV2iv+ZdOmTWeddVb3p/TOnTsvuuiiZ555JsU9W7duLS8v37ZtW1dX17p160aPHr1z584U9xwGrpCyoaamZvfu3dddd13Pn1RVVd15550pTiopKbn99tunTJkycuTIdevWzZgx48ILL0xxTzRlZWWzZ8+urKw866yzNm7cOHPmzHRftz/mmGMefvjhm266adGiRU1NTVdffXXq3xvb2dnZ3t4e5NXQJEnKy8tvu+22adOmDR8+/N133506deqUKVNS3FNUVHTzzTdPmjSpvLx869atDz30UOrfWP1d842x5KSzs7Otre3kk08Ocgsoms7Ozr179x533HFx3iPz1VdfHXvssf69vk33P1l+fn6Qv6KOjo59+/YFebvvd02QAAghyv+1AXCUEyQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABC+G8Tb/bPfPYYhwAAAABJRU5ErkJggg==\",\"relationship\":null},{\"partUri\":\"/media/image3.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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PcuyxsbGQ4cONTY2Zlk2f/785ubmjo6OSu8RgAnJQZAuXbq0devW3bt3b9myZeyZ3t7ekydPlhY8fPiwpiYHJwLAj6n0Ldp/8a9//eu11147e/bsw//16NGja9euvfLKK93d3aOjo/39/atXr75w4cKTf9ZbdgAl8d+yi/57SMeOHfvuu++2bdtWeqalpeXTTz9tbW3dtGnTihUrLl++vGPHDr+EBJB3efopu1RNTU1+uA5gTKFQCP5Tdj56ASAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEHKjUKhUOktPCNT5EynyGlmU+ZMp8hplpUgARCCIAEQwrTR0dFK76FcmpqaKr0FgEC6uroqvYUfU81BAiBHvGUHQAiCBEAIggRACIIEQAiCBEAIggRACIIEQAiCBEAIz1V6A/x3g4OD169fLz0sFAqzZ8+u4H7K5OLFi2vWrCk97Ovru3bt2ssvv1x9Eze+f6ZVeXF7enp6e3sbGhpef/310pNVeUGfPNOqvKDPjCDlwKlTp/bv319bWzv28ODBg9//xl0dDh8+fPz48YsXL449PH36dFtb2+rVqzs6Ot5///0PP/ywstubRD840+q7uHv27Dl37tzKlSu7urrq6uqOHj1aW1tblRf0qWdafRf0mRolvI8++uiLL76o9C7KZWho6OOPP37ttdfeeuutsWcePXr02muvdXd3j46O3rlz55e//OU///nPiu5xcjx5pqNVd3GvXLny6quvDg0NjT1ct27dl19+WZUX9KlnOlp1F/QZ8xlSDly9enXJkiWDg4PDw8OV3svkO3DgQENDw2effVZ65sKFC/X19cuWLcuyrKGhYe3ate3t7ZXb4KR58kyzqru49fX1R44cmTNnztjDxYsX37p1qyov6FPPNKu6C/qMecsuupGRkRs3buzZs2doaKhYLG7cuHHv3r2V3tRk2rVrV01Nzfnz50vPFIvF5cuXlx7OmjUr+IjicXryTKvv4i5atGjRokVjX/f29p49e3bbtm1dXV3Vd0GfeqbVd0GfMXdI0fX39zc3Nx85cuTrr7/+6quvLly4cPz48UpvajLV1PzwL+HIyMi0adNKD6dPnz5aFTPpnzzTKr64AwMDH3zwwfbt21955ZVqvaBjvn+mVXxBnw1Biq6xsfHQoUONjY1Zls2fP7+5ubmjo6PSmyqvGTNmPH78uPRwZGRk+vTpFdxP+VTrxf3mm282bNiwefPm7du3Z1V9QX9wptV6QZ8ZQYqut7f35MmTpYcPHz588h/aVeaFF17o7OwsPSwWiytXrqzgfsqnKi/upUuXtm7dunv37i1btow9U60X9MkzrcoL+ix5saJ78ODBrl27enp6siwbGBg4e/bs+vXrK72p8nrjjTeyLBv7rKWnp6e9vX3VqlWV3lRZVN/F7evr27Fjx+eff/7OO+8MDw8PDw+PjIxU5QV96plW3wV9xvxQQ3RNTU2tra2bNm1asWLF5cuXd+zYUfW/1lBTU7Nv376dO3cuXbq0s7Ozra1t3rx5ld5UWVTfxT127Nh33323bdu20jMtLS2ffvpp9V3Q/+tMq+yCPmP+F+b58Pjx4/v378+cOXNKvQPw73//eyqc8tS5uC4oP06QAAhBwAEIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAI4X8AiB24LVwZWacAAAAASUVORK5CYII=\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"}],"errors":[],"facets":[[],[{"value":"easy","count":1,"selected":false}]],"term":"tag:\"mnist\"","page":1,"per_page":50,"sort":"map(difficulty_value,0,0,999) asc"}}