【问题标题】:In Tensorflow 2.6, tf.keras.backend.gradients() return None在 TensorFlow 2.6 中,tf.keras.backend.gradients() 返回 None
【发布时间】:2021-10-26 13:59:24
【问题描述】:

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

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:\Users\dell\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\util\dispatch.py:206 wrapper  **
    return target(*args, **kwargs)
C:\Users\dell\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\framework\ops.py:1431 convert_to_tensor_v2_with_dispatch
    value, dtype=dtype, dtype_hint=dtype_hint, name=name)
C:\Users\dell\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\framework\ops.py:1441 convert_to_tensor_v2
    as_ref=False)
C:\Users\dell\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\profiler\trace.py:163 wrapped
    return func(*args, **kwargs)
C:\Users\dell\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\framework\ops.py:1566 convert_to_tensor
    ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref)
C:\Users\dell\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\framework\constant_op.py:346 _constant_tensor_conversion_function
    return constant(v, dtype=dtype, name=name)
C:\Users\dell\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\framework\constant_op.py:272 constant
    allow_broadcast=True)
C:\Users\dell\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\framework\constant_op.py:290 _constant_impl
    allow_broadcast=allow_broadcast))
C:\Users\dell\AppData\Roaming\Python\Python36\site-packages\tensorflow\python\framework\tensor_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。

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

【问题讨论】:

标签: python tensorflow keras


【解决方案1】:

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

通过使用 tf.shape 解决

【讨论】:

  • 非常感谢您的回复! out2 的形状为 (None, 4),cur_x_input( cur_y_input, cur_z_input ) 的形状为 (None,4,1)。有什么问题吗?再次感谢!
猜你喜欢
  • 2019-12-12
  • 1970-01-01
  • 2022-01-18
  • 2013-04-07
  • 2020-10-08
  • 2020-03-20
  • 2021-08-12
  • 2018-01-04
  • 2018-08-14
相关资源
最近更新 更多