《昇思25天学习打卡营第4天|07函数式自动微分》

说在前面

前面几节课学习了mindspore的一些操作方法,接下来学习下稍微有一些技术含量的内容。

正向计算图

图中内容对应的代码如下,为了便于查看分析,增加了对数据的shape打印:

python 复制代码
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

print(f"x shape {x.shape}")
print(f"y shape {y.shape}")
print(f"w shape {w.shape}")
print(f"b shape {b.shape}")

可以查看到输出的结果是

shell 复制代码
x shape (5,)
y shape (3,)
w shape (5, 3)
b shape (3,)

简单理解是:

xshape为[5],和w[5, 3]相乘,获得的结果理论上是[3]的大小。之后和b相加,结果仍然是[3],也就是图片中的z,其实应该有一个激活函数的,对应图片中的CE,也就是交叉熵损失函数。

对应的代码是

python 复制代码
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

模型网络正向逻辑介绍完毕。

反向计算逻辑

上面的公式中,w和b是模型训练过程中需要学习的参数,因此反向主要是更新w和b。

在mindspone中的方法是:

python 复制代码
grad_fn = mindspore.grad(function, (2, 3))

获得计算结果:

到这里,也就介绍完毕算子的正向和反向的使用方法。

接下来会通过神经网络的例子,介绍自动微分的功能。

最后将x,y 导入,然后进行执行:

打卡

完成mindspone的自动微分学习,感觉使用起来没那么顺畅了。

相关推荐
西岸行者5 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意5 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码5 天前
嵌入式学习路线
学习
毛小茛5 天前
计算机系统概论——校验码
学习
babe小鑫5 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms5 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下5 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。5 天前
2026.2.25监控学习
学习
im_AMBER5 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J5 天前
从“Hello World“ 开始 C++
c语言·c++·学习