计算张量流中的二阶偏导数

时间:2019-02-11 05:09:52

标签: python tensorflow

我正在使用神经网络来逼近2D函数。我设法使近似值起作用,但是现在我需要计算一阶和二阶偏导数(du / dx,du / dy,du ^ 2 / dx ^ 2和du ^ 2 / dy ^ 2)我对这个特定应用程序的损失函数。我正在这样做:

def train_neural_network_batch(x_ph, predict=False):
    prediction = neural_network_model(x_ph)

    pred_dx = tf.gradients(prediction, x1_ph)
    pred_dx2 = tf.gradients(tf.gradients(prediction, x1_ph), x1_ph)

    pred_dy = tf.gradients(prediction, x2_ph)
    pred_dy2 = tf.gradients(tf.gradients(prediction, x2_ph), x2_ph)

假设有N个训练点,x_ph的形状为(N**2,2)(它是函数的2D输入),x1_phx2_ph仅包含{{ 1}}。本应计算二阶导数的行会引发错误:

x_ph

当我具有一维函数并像上面的FWIW一样计算二阶导数时,代码工作正常。我假设神经网络中的数据结构缺少一些明显的原因,导致错误。有人知道怎么了吗?以下MWE可以正常工作:

File "/usr/local/lib/python3.6/site-packages/tensorflow/python/ops/gradients_impl.py", line 630, in gradients
    gate_gradients, aggregation_method, stop_gradients)
  File "/usr/local/lib/python3.6/site-packages/tensorflow/python/ops/gradients_impl.py", line 683, in _GradientsHelper
    gradient_uid)
  File "/usr/local/lib/python3.6/site-packages/tensorflow/python/ops/gradients_impl.py", line 239, in _DefaultGradYs
    with _maybe_colocate_with(y.op, gradient_uid, colocate_gradients_with_ops):
AttributeError: 'NoneType' object has no attribute 'op'

0 个答案:

没有答案