Error when using convolution2dLayer between connected

A
admin_offer · May 26, 2021 · 2.3K views
Question
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);
Expert Answer
Profile picture of John Williams
John Williams PhD Expert
Answered Aug 20, 2026
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);
% define connections
lgraph = connectLayers(lgraph, 'MAXPOOL/indices', 'UNPOOL/indices');
lgraph = connectLayers(lgraph, 'MAXPOOL/size', 'UNPOOL/size');
% plot and check
analyzeNetwork(lgraph);

 

100% Run Guarantee 3-Hour Fast-Track Delivery

Need a Custom Version or Complete Simulation for This Problem?

Our 500+ PhD engineers build, debug, and optimize working MATLAB scripts and Simulink (.slx) models tailored to your exact assignment rubrics with zero plagiarism.

Tested on MATLAB R2024b / R2026a
Turnitin 0% Plagiarism Report
Free 7-Day Revisions Guarantee
Have a different question? Ask here

Get a Free Consultation or a Sample Assignment Review!