无法计算的损失函数梯度神经网络程序gydF4y2Ba

15的观点(30天)gydF4y2Ba
博士Veerababu Dharanalakota”class=
博士Veerababu DharanalakotagydF4y2Ba 2023年4月8日gydF4y2Ba
评论道:gydF4y2Ba 博士Veerababu DharanalakotagydF4y2Ba2023年5月19日在31gydF4y2Ba
你好,gydF4y2Ba
我试图解决一个phisics-informed神经网络的问题,我构建了一个损失函数如下gydF4y2Ba
函数gydF4y2Ba(损失,梯度)= loss_fun(参数x, C,α)gydF4y2Ba
% C是复值不变gydF4y2Ba
%α是一个实值不变gydF4y2Ba
NN =模型(参数,x);gydF4y2Ba%前馈神经网络gydF4y2Ba
f = C *神经网络;gydF4y2Ba%中间函数gydF4y2Ba
g = fxx +α* f;gydF4y2Ba%目标函数gydF4y2Ba
gr =实际(g);gydF4y2Ba% g的实部gydF4y2Ba
胃肠道=图像放大(g);gydF4y2Ba% g的虚部gydF4y2Ba
zeroTarget_r = 0(大小(gr),gydF4y2Ba“喜欢”gydF4y2Ba、gr);gydF4y2Ba%零目标实部gydF4y2Ba
zeroTarget_r loss_r = l2loss (gr);gydF4y2Ba%实部损失函数gydF4y2Ba
zeroTarget_i = 0(大小(gi),gydF4y2Ba“喜欢”gydF4y2Ba,gi);gydF4y2Ba%零目标虚部gydF4y2Ba
loss_i = l2loss (gi, zeroTarget_i);gydF4y2Ba%虚部损失函数gydF4y2Ba
损失= loss_r + loss_i;gydF4y2Ba%的总损失函数(实)gydF4y2Ba
梯度= dlgradient(损失、参数);gydF4y2Ba%损失函数梯度参数gydF4y2Ba
结束gydF4y2Ba
函数的gydF4y2Ba 模型gydF4y2Ba 返回一个前馈神经网络gydF4y2Ba 。我想最小化函数gydF4y2Ba ggydF4y2Ba 关于参数(gydF4y2Ba θgydF4y2Ba )。输入变量gydF4y2Ba xgydF4y2Ba 以及参数gydF4y2Ba θgydF4y2Ba 实值的神经网络。在这里,gydF4y2Ba 这是一个二阶导数的gydF4y2Ba fgydF4y2Ba 关于gydF4y2Ba xgydF4y2Ba ,计算gydF4y2Ba 。复数的常数gydF4y2Ba CgydF4y2Ba 使目标函数gydF4y2Ba ggydF4y2Ba 复值。因此,我把它分为实部和虚部,计算个人损失函数和添加他们。gydF4y2Ba
在计算梯度我遇到以下错误gydF4y2Ba
”gydF4y2Ba 遇到复杂的值在计算梯度对fullyconnect的输入。所有输入fullyconnect转换为真实的gydF4y2Ba ”。gydF4y2Ba
我检查了记者的损失值和参数值。他们纯粹是真实的。gydF4y2Ba
我将感激你如果你能告诉可能的错误原因和解决措施。gydF4y2Ba
我用gydF4y2Ba fmincongydF4y2Ba 与gydF4y2Ba lbfgsgydF4y2Ba 黑森近似的优化。gydF4y2Ba
2的评论gydF4y2Ba
博士Veerababu Dharanalakota”class=
博士Veerababu DharanalakotagydF4y2Ba 2023年5月18日gydF4y2Ba
谢谢你,理查德。添加gydF4y2Ba lbfgsupdategydF4y2Ba 函数是一个伟大的帮助研究人员致力于physics-informed神经网络。gydF4y2Ba

登录置评。gydF4y2Ba

接受的答案gydF4y2Ba

理查德。”class=
理查德。gydF4y2Ba 2023年5月17日gydF4y2Ba
我认为这可能是由于你的复杂价值引入的输出模型,神经网络。即使你是真正后分裂成两半,梯度向后计算将通过这个后退(复杂的)C *(真正的)神经网络操作它把一个复杂的梯度在倒退。gydF4y2Ba
尝试调用NN =实际(NN)这一步之前,使复杂的实值模型计算的一部分:gydF4y2Ba
NN =模型(参数,x);gydF4y2Ba%前馈神经网络gydF4y2Ba
NN =实际(NN);gydF4y2Ba
f = C *神经网络;gydF4y2Ba%中间函数gydF4y2Ba
貌似有违常理前应用这个复杂的值创建,事实上在远期利率计算这将因为神经网络已经是真正的没有影响。但是向后传递的梯度计算流在另一个方向通过代码,和真正的向后(NN)将在C * NN的向后。它将丢弃的虚部梯度,此时没有意义,因为没有虚部的神经网络的价值。gydF4y2Ba
3评论gydF4y2Ba
博士Veerababu Dharanalakota”class=
博士Veerababu DharanalakotagydF4y2Ba 2023年5月19日在31gydF4y2Ba
谢谢你,理查德。这解决了问题。gydF4y2Ba

登录置评。gydF4y2Ba

答案(1)gydF4y2Ba

8月”class=
8月gydF4y2Ba 2023年5月17日gydF4y2Ba
你好,gydF4y2Ba
错误消息显示,是一个复杂的有价值的输入完全连接层的神经网络模型。这可能是由于这样的事实,中间的输出函数“f”包括一个复杂的不断“C”乘以神经网络输出“神经网络”。如果“C”是复杂的,那么“f”将复值,和随后的计算涉及“f”可能会引入复杂的值。gydF4y2Ba
通过你来解决这个错误并执行反向传播神经网络,您需要确保所有输入到神经网络是实值。一种方法将分离复杂的实部和虚部完全连接的输入层,并通过分别作为输入。为此,您可以使用“gydF4y2Ba 真正的“gydF4y2Ba 和“gydF4y2Ba 图像放大”gydF4y2Ba 函数来提取“f”的实部和虚部分别:gydF4y2Ba
NN =模型(参数,x);gydF4y2Ba%前馈神经网络gydF4y2Ba
f = C *神经网络;gydF4y2Ba%中间函数gydF4y2Ba
f_real =实际(f);gydF4y2Ba% f的实部gydF4y2Ba
f_imag =图像放大(f);gydF4y2Ba% f的虚部gydF4y2Ba
fc_in = [f_real;f_imag];gydF4y2Ba%连接f_real f_imaggydF4y2Ba
fc_out = fullyconnect (fc_in weights_fc bias_fc);gydF4y2Ba%完全连接层输出gydF4y2Ba
在这里,“gydF4y2Ba fc_in”gydF4y2Ba 矩阵是由连接”的实部和虚部gydF4y2Ba f”gydF4y2Ba ,然后传递到完全连接层。gydF4y2Ba
请参考以下MathWorks文档的更多信息:gydF4y2Ba
3评论gydF4y2Ba
博士Veerababu Dharanalakota”class=
博士Veerababu DharanalakotagydF4y2Ba 2023年5月19日十二点gydF4y2Ba
好吧。将实部和虚部导致一些损失函数同时进行优化。在培训期间可能造成问题。但是,我将试着送还给你。gydF4y2Ba

登录置评。gydF4y2Ba

社区寻宝gydF4y2Ba

找到宝藏在MATLAB中央,发现社区如何帮助你!gydF4y2Ba

开始狩猎!gydF4y2Ba