赞
踩
grad
和 value_and_grad
。grad(func)
:计算函数 func
的梯度函数。value_and_grad(func)
:同时计算函数 func
的值和梯度。x
:一个形状为 (5,) 的全1浮点数张量,表示输入数据。y
:一个形状为 (3,) 的全0浮点数张量,表示期望输出(目标值)。w
:一个形状为 (5, 3) 的可学习参数,表示权重矩阵,初始值为随机的标准正态分布。b
:一个形状为 (3,) 的可学习参数,表示偏置向量,初始值为随机的标准正态分布。
接着,定义了一个名为 function
的函数,它接受 x
、y
、w
和 b
作为输入,并执行以下计算:
z = ops.matmul(x, w) + b
x
与权重矩阵 w
相乘,然后加上偏置向量 b
,得到中间结果 z
。loss = ops.binary_cross_entropy_with_logits(z, y, ops.ones_like(z), ops.ones_like(z))
ops.binary_cross_entropy_with_logits
函数计算二元交叉熵损失。
z
是模型的输出logits(未经过sigmoid激活)。y
是期望输出(目标值)。ops.ones_like(z)
和 ops.ones_like(z)
分别表示正类和负类的权重,这里都设为1。
最后,函数返回计算得到的 loss
值。
mindspore.grad
函数,来获得function
的微分函数。
grads = grad_fn(x, y, w, b)
print(grads)
grad_fn = mindspore.grad(function, (2, 3))
mindspore.grad
函数用于获取 function
对指定参数的梯度函数。(2, 3)
表示我们希望计算 function
对第二个参数 (w
) 和第三个参数 (b
) 的梯度。grads = grad_fn(x, y, w, b)
grad_fn
,传入输入数据 x
、目标值 y
、权重 w
和偏置 b
,计算 function
对 w
和 b
的梯度。print(grads)
w
和 b
的梯度:w
的梯度,形状为 (5, 3)。b
的梯度,形状为 (3,)。grad
和value_and_grad
提供has_aux
参数,当其设置为True
时,可以自动实现前文手动添加stop_gradient
的功能,满足返回辅助数据的同时不影响梯度计算的效果。
反向传播算法通常用在神经网络的训练环节。具体来说,它在每次迭代中完成以下步骤:
反向传播算法的目的是通过不断调整神经网络的参数,使得模型在训练数据上的损失最小化。这相当于让模型从错误中学习,逐渐提高其对数据的拟合能力和泛化能力。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。