在Tensorflow 2.6中,tf.keras.backend.gradients()返回None



我尝试自定义损失函数,但是当我运行以下代码时:

pressure_grad_x = tf.keras.backend.gradients(out2, cur_x_input)[0]
pressure_grad_y = tf.keras.backend.gradients(out2, cur_y_input)[0]
pressure_grad_z = tf.keras.backend.gradients(out2, cur_z_input)[0]
pressure_grad = tf.convert_to_tensor([pressure_grad_x, pressure_grad_y, pressure_grad_z])

将报告错误(上述代码在自定义函数中):

<ipython-input-42-23232050871c>:34 call  *
pressure_grad = tf.convert_to_tensor([pressure_grad_x, pressure_grad_y, pressure_grad_z])
C:UsersdellAppDataRoamingPythonPython36site-packagestensorflowpythonutildispatch.py:206 wrapper  **
return target(*args, **kwargs)
C:UsersdellAppDataRoamingPythonPython36site-packagestensorflowpythonframeworkops.py:1431 convert_to_tensor_v2_with_dispatch
value, dtype=dtype, dtype_hint=dtype_hint, name=name)
C:UsersdellAppDataRoamingPythonPython36site-packagestensorflowpythonframeworkops.py:1441 convert_to_tensor_v2
as_ref=False)
C:UsersdellAppDataRoamingPythonPython36site-packagestensorflowpythonprofilertrace.py:163 wrapped
return func(*args, **kwargs)
C:UsersdellAppDataRoamingPythonPython36site-packagestensorflowpythonframeworkops.py:1566 convert_to_tensor
ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref)
C:UsersdellAppDataRoamingPythonPython36site-packagestensorflowpythonframeworkconstant_op.py:346 _constant_tensor_conversion_function
return constant(v, dtype=dtype, name=name)
C:UsersdellAppDataRoamingPythonPython36site-packagestensorflowpythonframeworkconstant_op.py:272 constant
allow_broadcast=True)
C:UsersdellAppDataRoamingPythonPython36site-packagestensorflowpythonframeworkconstant_op.py:290 _constant_impl
allow_broadcast=allow_broadcast))
C:UsersdellAppDataRoamingPythonPython36site-packagestensorflowpythonframeworktensor_util.py:553 make_tensor_proto
"supported type." % (type(values), values))
TypeError: Failed to convert object of type <class 'list'> to Tensor. Contents: [None, None, None]. Consider casting elements to a supported type.

当我试图解决它时,我发现pressure_grad_x(或pressure_grad_y, pressure_grad_z)的值为None。

我使用的模型是LSTM模型,将自定义损失函数作为模型的最后一层。

out2为LSTM模型的输出。cur_x_input, cur_y_input, cur_z_input是LSTM模型的输入。Tensorflow的版本为2.6.0。

我没有办法解决这个问题。我希望有人能帮我解决这个问题。

我认为,你需要检查你的输入形状,我觉得,你的给定输入是NONE。

通过使用tf.shape

解决