dlgradient throws Value to differentiate is non-scalar. It must be a traced real dlarray scalar.error
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hi everyone,
With dfleval I call a function with which I do a number of computations. I need to calculate few gradients within that function but it throws an error. Here is the code.
function [grads,loss] = schooling(data,Q,params)
% Trains the model
% receives the model and input parameters
l = data(2:end,1); %x coordinates
t = data(1,2:end); %time coordinates
[T,D] = NN(params,t,l); % feed forward
[Tt,Tx] = dlgradient(T,t,l); % here I have error message. % all inputs T,t,l are dlarrays. The function schooling is
% called from within dfleval
Txdx = dlgradient(D.*Tx,l);
Tgt = data(2:end,2:end); % readings
loss1 = (T-Tgt).^2;
loss2 = (Txdx+Q-Tt).^2;
loss = sum(loss1+loss2,1);
loss = sum(loss);
grads = dlgradient(loss,params);
end
0 commentaires
Réponse acceptée
Walter Roberson
le 25 Nov 2023
Modifié(e) : Walter Roberson
le 25 Nov 2023
[Tt,Tx] = arrayfun(@(Tscalar) dlgradient(Tscalar,t,l), T, 'uniform', 0);
Tt and Tx will then be cell arrays the same size of T, in which the entries are the gradients for the corresponding T values.
You will also need to adjust the code further down.
The basic issue is that your T is not a scalar dlarray object.
Plus de réponses (0)
Voir également
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!