Hi,

Я пытаюсь создать собственный промежуточный слой, который может разделить данные. Когда я использую checkLayer для проверки функциональности, он выдает ошибку: «Неверное количество выходных аргументов для «предсказания» в слое splitDataLayer. Ожидалось, что будет 1, а вместо этого 4». хотя я установил количество выходов на 4 в конструкторе.

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

Как видно выше, как количество выходов, так и выходная матрица в функции прогнозирования были установлены правильно. Поэтому я не знаю, что может быть не так с кодом и вызвать эту ошибку.

ОТВЕЧАТЬ

Matlabsolutions.com предоставляет последнюю Помощь по домашним заданиям MatLab, Помощь по заданию MatLab для студентов, инженеров и исследователей в различных отраслях, таких как ECE, EEE, CSE, Mechanical, Civil со 100% выходом. Код Matlab для BE, B.Tech , ME, M.Tech, к.т.н. Ученые со 100% конфиденциальностью гарантированы. Получите проекты MATLAB с исходным кодом для обучения и исследований.

Пользовательские слои с несколькими входами и выходами поддерживаются начиная с R2019a. Из вашего сообщения об ошибке я подозреваю, что вы используете более старую версию.

Однако ваш слой выглядит хорошо, за исключением obj.numOutputs = 4; который должен быть obj.NumOutputs = 4;

Когда я исправляю это, все тесты checkLayer проходят в 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.