我正在使用神经网络来逼近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_ph
和x2_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'