Custom Layer- Incorrent number of outputs
    8 views (last 30 days)
  
       Show older comments
    
    Valentin Steininger
 on 9 Aug 2019
  
    
    
    
    
    Commented: Valentin Steininger
 on 9 Aug 2019
            Hi,
I'm trying to create a custom intermediate layer that can split up data. When I use checkLayer to validate the functionality it throws the error: "Incorrect number of output arguments for 'predict' in Layer splitDataLayer. Expected to have 1, but instead it has 4." although I've set the number of Outputs to 4 in the constructor. 
classdef splitDataLayer < nnet.layer.Layer
    methods
        function obj = splitDataLayer(name)
            obj.Name = name;
            obj.numOutputs = 4;
            obj.OutputNames = {'out1','out2','out3','out4'};
        end
        function [Z1, Z2, Z3, Z4] = predict(~, X)
            Z1 = X(1, :, :, :);
            Z2 = X(2, :, :, :);
            Z3 = X(3, :, :, :);
            Z4 = X(4, :, :, :);  
        end        
        function [dLdX] = backward(~,~,~,~,~,~,dLdZ1,dLdZ2,dLdZ3,dLdZ4,~)
            dLdX = cat(1, dLdZ1,...
                          dLdZ2,...
                          dLdZ3,...
                          dLdZ4);
        end
    end
end    
As can be seen above, both the number of outputs as well as the output matrix in the predict function have been set correctly. So I don't know what could be wrong about the code and cause that error. 
I would be happy for any help!
0 Comments
Accepted Answer
  Maria Duarte Rosa
    
 on 9 Aug 2019
        Hi Valentin,
Thank you for your question.
Multi-input/Multi-output custom layers are supported from R2019a. From your error message I suspect you are on a older release. 
Your layer looks good though, apart from obj.numOutputs = 4; which should be obj.NumOutputs = 4;
When I correct for that all the checkLayer tests pass in R2019a:
layer = splitDataLayer('test');
validInputSize = [4 5 20 4]; % Some arbitrary dimensions
checkLayer(layer,validInputSize,'ObservationDimension',4)
Running nnet.checklayer.TestCase
.......... .......... ....
Done nnet.checklayer.TestCase
__________
Test Summary:
	 24 Passed, 0 Failed, 0 Incomplete, 0 Skipped.
	 Time elapsed: 1.3818 seconds.
I hope this helps.
More Answers (0)
See Also
Categories
				Find more on Image Data Workflows in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
