簡體   English   中英

為什么這個 Tensorflow 梯度帶返回 None?

[英]Why is this Tensorflow gradient tape returning None?

我正在使用 Tensorflow 2.0 並計算二階導數。 但是,tensorflow 為u_ttu_xx返回None u_x , u_t計算正確。 變量u,x,t之前定義並且是tf.Tensor s

import tensorflow as tf
# defining u,x,t
with tf.GradientTape(persistent=True) as tp2:
    with tf.GradientTape(persistent=True) as tp1:
        tp1.watch(t)
        tp1.watch(x)
        u_x = tp1.gradient(u, x)  # shape (1000,1)
        u_t = tp1.gradient(u, t)  # shape (1000,1)
        u_tt = tp2.gradient(u_t, t)  # None??
        u_xx = tp2.gradient(u_x, x)  # None??

知道二階導數計算有什么問題嗎?

以下解決方案有效。

with tf.GradientTape(persistent=True) as tp2:
        with tf.GradientTape(persistent=True) as tp1:
            tp1.watch(t)
            tp1.watch(x)
            u_x = tp1.gradient(u, x)
            u_t = tp1.gradient(u, t) 
            u_tt = tp1.gradient(u_t, t)
            u_xx = tp1.gradient(u_x, x) 

根據https://www.tensorflow.org/guide/advanced_autodiff了解為什么原始版本不起作用會很有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM