当前位置:网站首页>Understand the autograd package in pytorch
Understand the autograd package in pytorch
2022-07-07 22:27:00 【Eva215665】
This article mainly referred to pytorch Official website :pytroch Official website
as well as Dvie into deep learning A Book Pytorch The second chapter of the edition torch.Tensor yes autograd The core class of the package . If the tensor x Properties of .requires_grad Set to True, Then it will start tracking (track) All operations on it ( In this way, the gradient propagation can be carried out by using the chain rule ). When complete tensor x After a series of calculations ( here x Has become y), call y.backward() Method can automatically calculate the gradient . tensor x The gradient of will add up to x Of .grad Properties of the .
Pay attention to
y.backward()when , If y It's scalar , It doesn't need to bebackward()Pass in any parameters , otherwise , You need to pass in a with y Homomorphic Tensor. See the explanation of the remaining problems for the reasons
If you don't want to be tracked , You can call .detach() Separate it from the tracking record , This prevents future calculations from being tracked , In this way, the gradient cannot pass . Besides , You can also use withtorch.no_grad() Wrap up the operation code that you don't want to be tracked , This method is very useful in evaluating models , Because when evaluating the model , We do not need to calculate the gradient of the trainable parameter .Function Is another very important class .Tensor and Function Connect with each other and establish a acyclic graph , This figure encodes the complete calculation history . Every tensor has a .grad_fn attribute , This attribute refers to the function that creates the tensor ( Except for user created tensors - Their grad_fn by None).
Each one created by an operation tensor, There is one. grad_fcn sex , This attribute points to creating this tensor Of Function Memory address of . Be careful , Created by the user tensor It's not .grad_fcn Of this property .
Here are some examples to understand these concepts
Create a Tensor X, And set its requires_grad=True
x = torch.ones(2,2, requries_grad = True)
z = (x+2) * (x+2) * 3
out = z.mean()
Let's see out About x Gradient of d(out)/dx
out.backward()
x.grad
among out.backward yes out Reverse gradient ,x.grad Check the gradient calculation results .x.grad It's different from x Another new tensor of , This tensor stores x Relative to a scalar ( for example out) Gradient of .
tensor([[4.5, 4.5], [4.5, 4.5]])
Now let's explain the remaining problems , Why is it y.backward() when , If y It's scalar , It doesn't need to be backward() Pass in any parameters ; otherwise , You need to pass in a with y Homomorphic Tensor? Simply to avoid vectors ( Even higher dimensional tensors ) Take the derivative of the tensor , And convert it to scalar to take the derivative of the tensor . for instance , Suppose the shape is m x n Matrix X After calculation, we get p x q Matrix Y,Y After calculation, we get s x t Matrix Z. Then, according to the above rules ,dZ/dY It should be a s x t x p x q Four dimensional tensor ,dY/dX It's a p x q x m x n Four dimensional tensor of . The problem is coming. , How to back spread ? How to multiply two four-dimensional tensors ??? How do I get by ??? Even if we can solve the problem of how to multiply two four-dimensional tensors , How to multiply the four-dimensional and three-dimensional tensors ? How to find the derivative of the derivative , This series of questions , I feel like I'm going crazy …… To avoid this problem , We don't allow a tensor to derive from a tensor , Only scalar derivatives of tensors are allowed , The derivative is a tensor isomorphic to the independent variable . Therefore, if necessary, we need to convert the tensor into scalar by weighted summation of all tensor elements , for instance , hypothesis y By independent variable x Come by calculation ,w Is and y Isomorphic tensors , be y.backward(w) The meaning is : To calculate l = torch.sum(y * w), be l It's a scalar , Then seek l For arguments x The derivative of .
This is not a good input formula , To be continued ...
边栏推荐
- 如何选择合适的自动化测试工具?
- SAR image quality evaluation
- Unity development --- the mouse controls the camera to move, rotate and zoom
- npm uninstall和rm直接删除的区别
- How to realize the movement control of characters in horizontal game
- Overseas agent recommendation
- How to write an augmented matrix into TXT file
- Revit secondary development - intercept project error / warning pop-up
- Reinforcement learning - learning notes 9 | multi step TD target
- Cataloger integrates lidar and IMU for 2D mapping
猜你喜欢

Anti climbing killer

Kirin Xin'an operating system derivative solution | storage multipath management system, effectively improving the reliability of data transmission

Px4 autonomous flight

Pdf document signature Guide

【Azure微服务 Service Fabric 】如何转移Service Fabric集群中的种子节点(Seed Node)

Antd date component appears in English

. Net automapper use

如何选择合适的自动化测试工具?

Customer case | China law network, through observing the cloud, greatly shortens the time of fault location
Preparing for the interview and sharing experience
随机推荐
【Azure微服务 Service Fabric 】因证书过期导致Service Fabric集群挂掉(升级无法完成,节点不可用)
PDF文档签名指南
[azure microservice service fabric] how to transfer seed nodes in the service fabric cluster
Matplotlib quick start
[interview arrangement] 0211 game engine server
null == undefined
如何选择合适的自动化测试工具?
Node:504 error reporting
UWA Q & a collection
Remember an experience of using selectmany
Revit secondary development - operation family documents
Revit secondary development - shielding warning prompt window
Two kinds of updates lost and Solutions
OpenGL job - texture
Leetcode SQL first day
npm uninstall和rm直接删除的区别
Programming mode - table driven programming
【Azure微服务 Service Fabric 】在SF节点中开启Performance Monitor及设置抓取进程的方式
JS number is insufficient, and 0 is added
What if the win11u disk does not display? Solution to failure of win11 plug-in USB flash disk