【深度学习】(二)反向传播+tensor原理+w.data&w.grad&w.grad.data&w.grad.item()区别+练习
目录
1、w.data&w.grad&w.grad.data&w.grad.item()区别
Back Propagation
1、回顾线性模型

2、两层神经网络

3、forward&backward
pytorch中前馈和反馈

loss.backward() 一句代码就有了所有需要梯度的变量的梯度
例如:w.requires_grad=True,x.requires_grad=True。 x 、w需要梯度信息, loss.backward()后
那么直接就有了和
,又因为x,w是张量,故而梯度保存在张量中,用时直接调用x.grad w.grad。
举例: Linear Model
=x*w
Loss Function
loss==

4、tensor:
向量标量矩阵 高位矩阵都可以存放
定义一个tensor w
里面容纳了Data: w 和Grad=:
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())
更多推荐


所有评论(0)