Error when using convolution2dLayer between connected

Technical Source
2 min readMay 26, 2021

--

Error when using convolution2dLayer between connected maxPooling2dLayer and maxUnpooling2dLayer

I’m trying to create a modified UNet using connected max pooling and max unpooling layers. However, if I put a convolution layer between the pooling and unpooling layers, the network isn’t valid. The error is reported for the unpooling layer:

Input size mismatch. Size of input to this layer is different from the expected input size.

The sizes for the CONV layer, MAXPOOL indices, and MAXPOOL size inputs are all different. Minimum working example below. Am I missing something obvious, or is it not possible to use other layers between maxpool and maxunpool?

% define layers
layers = [
imageInputLayer([128, 128], 'Name', 'INPUTLAYER')
maxPooling2dLayer([2 2], 'HasUnpoolingOutputs', true, 'Stride', [2 2], 'Name', 'MAXPOOL')
convolution2dLayer([3 3], 32, 'Padding', 'same', 'Stride', [1 1], 'Name', 'CONV')
maxUnpooling2dLayer('Name', 'UNPOOL')
regressionLayer('Name', 'MSE')
];
% define network
lgraph = layerGraph(layers);
% define connections
lgraph = connectLayers(lgraph, 'MAXPOOL/indices', 'UNPOOL/indices');
lgraph = connectLayers(lgraph, 'MAXPOOL/size', 'UNPOOL/size');
% plot and check
analyzeNetwork(lgraph);

ANSWER

Matlabsolutions.com provide latest MatLab Homework Help,MatLab Assignment Help for students, engineers and researchers in Multiple Branches like ECE, EEE, CSE, Mechanical, Civil with 100% output.Matlab Code for B.E, B.Tech,M.E,M.Tech, Ph.D. Scholars with 100% privacy guaranteed. Get MATLAB projects with source code for your learning and research.

You convolution layer is changing the number of channels in the output after the max pooling.

This causes the input size mismatch. You need to match the number of channels output by convolution layer to the output by maxpooling layer.

% define layers
layers = [
imageInputLayer([128, 128], 'Name', 'INPUTLAYER')
maxPooling2dLayer([2 2], 'HasUnpoolingOutputs', true, 'Stride', [2 2], 'Name', 'MAXPOOL')
convolution2dLayer([3 3], 1, 'Padding', 'same', 'Stride', [1 1], 'Name', 'CONV')
maxUnpooling2dLayer('Name', 'UNPOOL')
regressionLayer('Name', 'MSE')
];
% define network
lgraph = layerGraph(layers);

SEE COMPLETE ANSWER CLICK THE LINK

--

--

Technical Source
Technical Source

Written by Technical Source

Simple! That is me, a simple person. I am passionate about knowledge and reading. That’s why I have decided to write and share a bit of my life and thoughts to.

No responses yet