【深度学习】(二)反向传播+tensor原理+w.data&w.grad&w.grad.data&w.grad.item()区别+练习

目录

Back Propagation

1、回顾线性模型

2、两层神经网络

3、forward&backward

4、tensor:

1、w.data&w.grad&w.grad.data&w.grad.item()区别

2、代码中导入import torch

3、求loss和:

5、代码


Back Propagation

1、回顾线性模型

2、两层神经网络

【深度学习】(二)反向传播+tensor原理+w.data&w.grad&w.grad.data&w.grad.item()区别+练习_第1张图片

3、forward&backward

pytorch中前馈和反馈

【深度学习】(二)反向传播+tensor原理+w.data&w.grad&w.grad.data&w.grad.item()区别+练习_第2张图片

loss.backward() 一句代码就有了所有需要梯度的变量的梯度

例如:w.requires_grad=True,x.requires_grad=True。 x 、w需要梯度信息, loss.backward()后

那么直接就有了\frac{\partial loss}{\partial x}\frac{\partial loss }{\partial w} ,又因为x,w是张量,故而梯度保存在张量中,用时直接调用x.grad    w.grad。

举例: Linear Model

\hat{y}=x*w

Loss Function

loss=(\hat{y}-y)^{2}=(x*w-y)^{2}

【深度学习】(二)反向传播+tensor原理+w.data&w.grad&w.grad.data&w.grad.item()区别+练习_第3张图片

 

4、tensor:

向量标量矩阵 高位矩阵都可以存放

定义一个tensor w

里面容纳了Data: w 和Grad=:\frac{\partial loss}{\partial w}

1、w.data&w.grad&w.grad.data&w.grad.item()区别

1)w.data     表示张量w的值,其本身也是张量,输出格式tensor[数]。

2)w.grad     表示张量w的梯度,其本身w.grad是张量 用时(标量计算时)需要取w.grad.data,表示张量w.grad的值,输出格式tensor[数],(梯度输出时)需要取w.grad.item(),表示返回的是一个具体的数值,输出格式 数>

3)w.grad.item()   l.item() 表示返回的是一个具体的数值,输出格式 数。

对于元素不止一个的tensor列表,使用item()会报错 ,向量不行二维更不行 ,只有标量行。

2、代码中导入import torch

需要计算梯度的要定义 w.requires_grad=True

3、求loss和:

sum=0.......sum+=l.item()  √

                                    sum+=l   ×

              因为l是tensor 做加法构建基本图占内存,

5、代码

练习:已知张量x、y,用backfard求loss和w。

import torch
x=[1.0,2.0,3.0]
y=[2.0,4.0,6.0]
w=torch.Tensor([1.0])
w.requires_grad=True

def forword(x):
    return x*w
def loss(x,y):
    y_pred=forword(x)
    return (y_pred-y)**2
# def gradient(x,y,w):
#     return  2*x*(x*w-y)
# 不再需要
print('predict before training',4,forword(4).item())
for epoch in range(100):
    for xx,yy in zip(x,y):
        l=loss(x,y)
        l.backward()
        print('\tgrad:',x,y,w.grad.data.item())
        # 张量变标量
        w.data=w.data-0.01*w.grad.data
        # w,grad也是tensor也要取data
        w.grad.data.zero_()
    print('epoch:',epoch,l.item())
print('predict after training', 4, forword(4).item())

你可能感兴趣的:(深度学习,python,人工智能)