首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tensorflow2新版本中tf.GradientTape.gradient设置unconnected_gradients为0是报错?

tensorflow2新版本中tf.GradientTape.gradient设置unconnected_gradients为0是报错?

提问于 2026-04-23 13:37:15
回答 0关注 0查看 22

源代码:

with tf.GradientTape(persistent=False) as tap:

# loss of boundary condtions

lb = self.loss_fn_conds(batch_data)

# 边界条件关于神经网络参数的梯度

gb = tap.gradient(lb,

[self.model_lr.trainable_variables, self.model_hr.trainable_variables, self.filter_delta],

unconnected_gradients=tf.UnconnectedGradients.ZERO)

问题:

损失函数与网络并没有关联,返回的是默认值0。我希望损失函数关于网络参数的导数也能返回0。在之前的tensorflow 2.7版本中,只需将unconnected_gradients设置成tf.UnconnectedGradients.ZERO即可满足我的要求。

但是最近将tensorflow升级到2.21,出现了错误。当unconnected_gradients设置成NONE时,可以运行,返回NONE;但设置成ZERO时,报错,并没有返回我需要的0值。报错信息如下:

File /mnt/d/HPWANG/Projects/PINNs-TF2.20-Linux-R5/pinns_2d_multiscale.py:630, in PINNs_2D_MultiScale.get_dynamic_weight(self, batch_data, weight_res)

628 print(lb)

629 # 边界条件关于神经网络参数的梯度

--> 630 gb = tap.gradient(lb,

631 [self.model_lr.trainable_variables, self.model_hr.trainable_variables, self.filter_delta],

632 unconnected_gradients=tf.UnconnectedGradients.ZERO)

634 gb0 = [tf.reshape(j, (1, -1)) for j in gb[0]]

635 gb0 = tf.concat(gb0, axis=1)

File ~/anaconda3/envs/tf-gpu/lib/python3.11/site-packages/tensorflow/python/eager/backprop.py:1066, in GradientTape.gradient(self, target, sources, output_gradients, unconnected_gradients)

1060 output_gradients = (

1061 composite_tensor_gradient.get_flat_tensors_for_gradients(

1062 output_gradients))

1063 output_gradients = [None if x is None else ops.convert_to_tensor(x)

1064 for x in output_gradients]

-> 1066 flat_grad = imperative_grad.imperative_grad(

1067 self._tape,

1068 flat_targets,

1069 flat_sources,

1070 output_gradients=output_gradients,

1071 sources_raw=flat_sources_raw,

1072 unconnected_gradients=unconnected_gradients)

1074 if not self._persistent:

1075 # Keep track of watched variables before setting tape to None

1076 self._watched_variables = self._tape.watched_variables()

File ~/anaconda3/envs/tf-gpu/lib/python3.11/site-packages/tensorflow/python/eager/imperative_grad.py:67, in imperative_grad(tape, target, sources, output_gradients, sources_raw, unconnected_gradients)

63 except ValueError:

64 raise ValueError(

65 "Unknown value for unconnected_gradients: %r" % unconnected_gradients)

---> 67 return pywrap_tfe.TFE_Py_TapeGradient(

68 tape._tape, # pylint: disable=protected-access

69 target,

70 sources,

71 output_gradients,

72 sources_raw,

73 compat.as_str(unconnected_gradients.value))

SystemError: <function BaseResourceVariable.dtype at 0x70cc34b6b060> returned a result with an exception set

回答

和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档