フィルターのクリア

dlgradient throws Value to differentiate is non-scalar. It must be a traced real dlarray scalar.error

2 ビュー (過去 30 日間)
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

採用された回答

Walter Roberson
Walter Roberson 2023 年 11 月 25 日
編集済み: Walter Roberson 2023 年 11 月 25 日
[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.
  1 件のコメント
Alim
Alim 2023 年 11 月 26 日
Thank you Walter. Just spot on. Indeed my T was not a scalar rather a matrix. I summed up all its elements and put in dlgradient and it worked. Thank you again

サインインしてコメントする。

その他の回答 (0 件)

製品


リリース

R2023b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by