昇思25天学习打卡营第6天|函数式自动微分

函数式自动微分

神经网络的训练主要使用反向传播算法,模型预测值(logits)与正确标签(label)送入损失函数(loss function)获得loss,然后进行反向传播计算,求得梯度(gradients),最终更新至模型参数(parameters)。自动微分能够计算可导函数在某点处的导数值,是反向传播算法的一般化。

𝑥 为输入,𝑦为正确值,𝑤和𝑏是我们需要优化的参数。 (我认为,其中z应该是输出,绿色圈内是运算过程在这里插入图片描述

微分函数与梯度计算

在这里插入图片描述

神经网络梯度计算

下面展示一些 代码片`。

# Define model
class Network(nn.Cell):
    def __init__(self):
        super().__init__()
        self.w = w
        self.b = b
``def construct(self, x):
        z = ops.matmul(x, self.w) + self.b
        return z

# Instantiate model
model = Network()
# Instantiate loss function
loss_fn = nn.BCEWithLogitsLoss()


# Define forward function
def forward_fn(x, y):
    z = model(x)
    loss = loss_fn(z, y)
    return loss
grad_fn = mindspore.value_and_grad(forward_fn, None, weights=model.trainable_params())

loss, grads = grad_fn(x, y)
print(grads)

输出:
(Tensor(shape=[5, 3], dtype=Float32, value=
[[ 3.31389546e-01,  1.39356658e-01,  3.25677514e-01],
 [ 3.31389546e-01,  1.39356658e-01,  3.25677514e-01],
 [ 3.31389546e-01,  1.39356658e-01,  3.25677514e-01],
 [ 3.31389546e-01,  1.39356658e-01,  3.25677514e-01],
 [ 3.31389546e-01,  1.39356658e-01,  3.25677514e-01]]), Tensor(shape=[3], dtype=Float32, value= [ 3.31389546e-01,  1.39356658e-01,  3.25677514e-01]))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值