Pytorch:関数の手動勾配計算方法

計算関数:y = x ** 2 * e ** xの導関数

公式

y(z)= x 2 ex 、。y(z)= x ^ {2} e ^ {x}、。y z =バツ2 ex

y ′= 2 xex + x 2 ex、。y ^ {'} = 2xe ^ {x} + x ^ {2} e ^ {x} 、。Y=2 x eバツ+バツ2 ex
一般的に計算された手動で導出可能な微分関数は、手動で微分することができます。
トーチの学習、テンソルの習得、autograd、Variable、nn、nn。モジュール、損失、最適化、データセットが重要です。自動微分は、深層学習を実現するための鍵です。以下は、実現関数の導出関数をシミュレートします。

  1. 関数を定義します。
  2. 微分関数を定義します。

コードの実装

import torch as t
from torch.autograd import Variable as V

def fn(x):
    y = x**2*t.exp(x)
    return y

def grad_fn(x):
    """手动求导"""
    dx = 2*x*t.exp(x) + x**2*t.exp(x)
    return dx

# 测试
x = V(t.randn(3,4),requires_grad=True)
y = fn(x)
# 输出求导结果
print(grad_fn(x))
"""
tensor([[ 0.1414,  0.1452, 11.5258, -0.2398],
        [ 1.0525, 10.6380,  3.0432, -0.3667],
        [-0.3050, -0.0358, -0.3827, -0.4155]], grad_fn=<AddBackward0>)
"""

# torch.autograd自动求导时,执行
y.backward(t.ones(y.size()))
print(x.grad)
"""
tensor([[ 0.1414,  0.1452, 11.5258, -0.2398],
        [ 1.0525, 10.6380,  3.0432, -0.3667],
        [-0.3050, -0.0358, -0.3827, -0.4155]])

"""

参考書:「ディープラーニングフレームワークPyTorch:はじめにと実践」_ChenYun(Work)

おすすめ

転載: blog.csdn.net/beauthy/article/details/107343619