pytorch第六课,记录

1、sigmod 的导数
s’ = s(1-s),取值是s ,0-1 (负无穷-正无穷),梯度离散
导数为0,时候梯度得不到更新,梯度离散

a=torch.linspace(-100,100,10)
torch.sigmod(a)

2、tanh,函数和导数 (-1,1)
torch.tanh(a)

from torch.nn import functional as F
F.relu(a)
在这里插入图片描述

在这里插入图片描述

a=torch.linspace(-1,1,10)##10个数据
torch.tanh(a) torch.sigmod(a)

3、relu, 梯度是1和0,没有梯度离散和爆炸
4 、loss
4.1 mse loss
细节实现,正则实现,差的平方和有根号
loss 差的平方和, 所以mse=torch.norm(y-pred,2).pow(2) # L2正则再平方一下
在这里插入图片描述
4.2 梯度

autograd 求梯度

x=torch.ones(1)
w=torch.full([1],2)
mse=F.mse_loss(x*w ,torch.ones(1))# (predict,label)
torch.autograd.grad(mse,[w]) #(pred, [w1,w2,w3,…]),

pytorch 中梯度更新的变量 需要加入 requires_grad=True,设置
pytorch 计算一步计算一步图,图也是跟着计算随时更新的

w.requires.grad_() #下划线是 inplace操作表示需要更新w
mse=F.mse_loss(x*w ,torch.ones(1))# (predict,label),重新计算,更新图
torch.autograd.grad(mse,[w])

loss.backward

x=torch.ones(1)
w=torch.full([1],2)
mse=F.mse_loss(x*w ,torch.ones(1))# (predict,label)

pytorch 前向计算会记录图的路径,所以,backward,可以从后向前传播完成所有需要梯度tensor 的grad计算方法,
不会返回list,会直接附加在每个成员变量 w.grad 下面,返回tensor
w.norm(),#权重的norm, w.grad.norm()#梯度的norm

mse.backward()
w.grad
在这里插入图片描述
返回列表[w1.grad,w2.grad…]
直接附加在 变量梯度后面
在这里插入图片描述

5 sigmod
每个值是0-1,概率值是1,
在这里插入图片描述
softmax 导数,
在这里插入图片描述
a=torch.rand(3)
p=F.softmax(a,dim=0)
p.backward(retain_graph=True)

# p[1]标量,不能是p列表,[a]是自变量列表,a0 a1 a2
得到的是p[1],对三个变量求得的导数,反向梯度求得除了求得每一次w梯度,同时会把图信息清楚,p.backward(retain_graph=True),本次求导图信息不清除,下一次还可以执行一次p.backward(),此时retain_graph没有设置,所以图图信息已经清除,

torch.autograd.grad(p[1],[a],retain_graph=True)
在这里插入图片描述

链式法则,求导例子

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值