An error occurred while Defining Custom Classification Output Layer:Error using 'backwardLoss' in Layer sseClassificationLayer. The function threw an error and could not be executed.
3 views (last 30 days)
Show older comments
Here is my code:
classdef sseClassificationLayer < nnet.layer.ClassificationLayer
% Example custom classification layer with sum of squares error loss.
methods
function layer = sseClassificationLayer(name)
% layer = sseClassificationLayer(name) creates a sum of squares
% error classification layer and specifies the layer name.
% Set layer name.
layer.Name = name;
% Set layer description.
layer.Description = 'Sum of squares error';
end
function loss = forwardLoss(~, Y, T)
% loss = forwardLoss(layer, Y, T) returns the SSE loss between
% the predictions Y and the training targets T.
% Calculate sum of squares.
sumSquares = sum((Y-T).^2);
% Take mean over mini-batch.
N = size(Y,4);
loss = sum(sumSquares)/N;
end
function dLdY = backwardLoss(~, ~, ~)
% (Optional) Backward propagate the derivative of the loss
% function.
%
% Inputs:
% layer - Output layer
% Y – Predictions made by network
% T – Training targets
%
% Output:
% dLdY - Derivative of the loss with respect to the
% predictions Y
% Layer backward loss function goes here.
N = size(Y,4);
dLdY = 2*(Y-T)/N;
end
end
end
0 Comments
Answers (1)
Ayush Aniket
on 15 May 2024
The error occurs due to missing input parameters of the 'backwardLoss' method in your custom classification layer. The 'backwardLoss' method should accept the same input arguments as 'forwardLoss', specifically the layer itself, the predictions 'Y', and the training targets 'T'. However, in your definition of backwardLoss, you've omitted 'Y' and 'T' from the parameter list.
The correct definition would be as shown below:
function dLdY = backwardLoss(~, Y, T)
% Backward propagate the derivative of the loss function.
%
% Inputs:
% Y – Predictions made by network
% T – Training targets
%
% Output:
% dLdY - Derivative of the loss with respect to the
% predictions Y
% Calculate the number of observations (assuming the last dimension of Y is the batch size)
N = size(Y, 4);
% Compute the gradient of the loss function
dLdY = 2 * (Y - T) / N;
end
0 Comments
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!