《昇思25天学习打卡营第6天|LXS》

自动微分

  • 进入今日内容之前, 先思考一下微分是什么,我们将形如△Y=A△X+O(△X),微分是用来表示变化量之间的关系的,当x的变化量足够小时,定义A*△X为函数y(x)的微分,通过导数的定义与极限的知识,将导数定义同样可以拆为上述微分定义形式,这是我们在一元函数里的函数可导与可微互为充要条件。
  • 微分dy,dx的商称为微商,即导数,导数是用来描述函数变化快慢的,在机器学习中称其为梯度,而根据费马引理,可导函数,导数为0的点,其为驻点,而在多元函数中,在保证定义域可导的条件下,梯度为0的点称为收敛点,也就是最优点。
  • 提供自动微分就是为了求导,求最优点,反向传播的意思是根据loss计算最优点的方向,提供自动微分工具就是为了大大减少数学层面的内容,让用户能更多地从代码思想的角度进行开发。通俗说就是不用我们专门写求导代码,MIndspore已经内置了自动微分工具。

定义函数

  • 这里以定义一个loss函数为例子,他的样子是一个非常简单的函数,loss=(a*w+b)Cross-Entropy y,还是解释一下,这是做交叉熵,我们如何评估loss的大小呢?如果预测结果与真实结果一致,那么loss为0.所以交叉熵是用来计算预测结果与真实结果的差距的,结果就是loss。当然这只是一种loss方法。
  • 定义四个参数,a输入值,y预测值,w权重值,b偏移值。其实就是y=ax+b,好理解吧,毕竟线性回归是最简单的预测模型。
x = ops.ones(5, mindspore.float32)  # input tensor
y = ops.zeros(3, mindspore.float32)  # expected output
w = Parameter(Tensor(np.random.randn(5, 3), mindspore.float32), name='w') # weight
b = Parameter(Tensor(np.random.randn(3,), mindspore.float32), name='b') # bias
def function(x, y, w, b):
    z = ops.matmul(x, w) + b
    loss = ops.binary_cross_entropy_with_logits(z, y, ops.ones_like(z), ops.ones_like(z))
    return loss
  • 打印出来更直观一些,顺便把loss结果也放在下面了,可以代入计算结果是否正确。注意在运行代码时,不要将x直接乘以w,要使用函数来获得计算结果。
    ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/77da0af2ddef4d7bb2271cb3f585a896.png

计算梯度

  • 对于这个函数有几个变量?两个,因为输入x是固定的,我们是为了找到合适wb值才进行训练的,那么变量就是(w,b),谁才是最合适的呢?需要靠梯度计算来确定一组最合适的(w,b)。

  • 我们将上述函数放入grad梯度方法中,指明wb的位置为2和3

grad_fn = mindspore.grad(function, (2, 3))

在这里插入图片描述

  • 截断函数是为了应对函数返回多个值而设计的,当需要屏蔽某一个变量的影响时,就在函数返回值上加截断函数

在这里插入图片描述

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值