{"group":{"id":1,"name":"Community","lockable":false,"created_at":"2012-01-18T18:02:15.000Z","updated_at":"2025-12-14T01:33:56.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":"2025-12-14T00: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":2,"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":"2025-12-09T23:45:29.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\"}]}"}],"problem_search":{"errors":[],"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":2,"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":"2025-12-09T23:45:29.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\"}]}"}],"term":"tag:\"convolutional neural network\"","current_player_id":null,"fields":[{"name":"page","type":"integer","callback":null,"default":1,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"per_page","type":"integer","callback":null,"default":50,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"sort","type":"string","callback":null,"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"body","type":"text","callback":null,"default":"*:*","directive":null,"facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":false},{"name":"group","type":"string","callback":null,"default":null,"directive":"group","facet":true,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"difficulty_rating_bin","type":"string","callback":null,"default":null,"directive":"difficulty_rating_bin","facet":true,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"id","type":"integer","callback":null,"default":null,"directive":"id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"tag","type":"string","callback":null,"default":null,"directive":"tag","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"product","type":"string","callback":null,"default":null,"directive":"product","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"created_at","type":"timeframe","callback":{},"default":null,"directive":"created_at","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"profile_id","type":"integer","callback":null,"default":null,"directive":"author_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"created_by","type":"string","callback":null,"default":null,"directive":"author","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"player_id","type":"integer","callback":null,"default":null,"directive":"solver_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"player","type":"string","callback":null,"default":null,"directive":"solver","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"solvers_count","type":"integer","callback":null,"default":null,"directive":"solvers_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"comments_count","type":"integer","callback":null,"default":null,"directive":"comments_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"likes_count","type":"integer","callback":null,"default":null,"directive":"likes_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"leader_id","type":"integer","callback":null,"default":null,"directive":"leader_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"leading_solution","type":"integer","callback":null,"default":null,"directive":"leading_solution","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true}],"filters":[{"name":"asset_type","type":"string","callback":null,"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":"\"cody:problem\"","prepend":true},{"name":"profile_id","type":"integer","callback":{},"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":"author_id","static":null,"prepend":true}],"query":{"params":{"per_page":50,"term":"tag:\"convolutional neural network\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"convolutional neural network\"","","\"","convolutional neural network","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f7707eb5d40\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f7707eb5ca0\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f7707eb53e0\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f7707eb5fc0\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f7707eb5f20\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f7707eb5e80\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f7707eb5de0\u003e":"tag:\"convolutional neural network\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f7707eb5de0\u003e":"tag:\"convolutional neural network\""},"queried_facets":{}},"query_backend":{"connection":{"configuration":{"index_url":"http://index-op-v2/solr/","query_url":"http://search-op-v2/solr/","direct_access_index_urls":["http://index-op-v2/solr/"],"direct_access_query_urls":["http://search-op-v2/solr/"],"timeout":10,"vhost":"search","exchange":"search.topic","heartbeat":30,"pre_index_mode":false,"host":"rabbitmq-eks","port":5672,"username":"search","password":"J3bGPZzQ7asjJcCk","virtual_host":"search","indexer":"amqp","http_logging":"true","core":"cody"},"query_connection":{"uri":"http://search-op-v2/solr/cody/","proxy":null,"connection":{"parallel_manager":null,"headers":{"User-Agent":"Faraday v1.0.1"},"params":{},"options":{"params_encoder":"Faraday::FlatParamsEncoder","proxy":null,"bind":null,"timeout":null,"open_timeout":null,"read_timeout":null,"write_timeout":null,"boundary":null,"oauth":null,"context":null,"on_data":null},"ssl":{"verify":true,"ca_file":null,"ca_path":null,"verify_mode":null,"cert_store":null,"client_cert":null,"client_key":null,"certificate":null,"private_key":null,"verify_depth":null,"version":null,"min_version":null,"max_version":null},"default_parallel_manager":null,"builder":{"adapter":{"name":"Faraday::Adapter::NetHttp","args":[],"block":null},"handlers":[{"name":"Faraday::Response::RaiseError","args":[],"block":null}],"app":{"app":{"ssl_cert_store":{"verify_callback":null,"error":null,"error_string":null,"chain":null,"time":null},"app":{},"connection_options":{},"config_block":null}}},"url_prefix":"http://search-op-v2/solr/cody/","manual_proxy":false,"proxy":null},"update_format":"RSolr::JSON::Generator","update_path":"update","options":{"url":"http://search-op-v2/solr/cody"}}},"query":{"params":{"per_page":50,"term":"tag:\"convolutional neural network\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"convolutional neural network\"","","\"","convolutional neural network","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f7707eb5d40\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f7707eb5ca0\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f7707eb53e0\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f7707eb5fc0\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f7707eb5f20\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f7707eb5e80\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f7707eb5de0\u003e":"tag:\"convolutional neural network\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f7707eb5de0\u003e":"tag:\"convolutional neural network\""},"queried_facets":{}},"options":{"fields":["id","difficulty_rating"]},"join":" "},"results":[{"id":58877,"difficulty_rating":"easy"}]}}