《昇思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的自动微分学习,感觉使用起来没那么顺畅了。

相关推荐
云上艺旅6 小时前
K8S学习之基础七十四:部署在线书店bookinfo
学习·云原生·容器·kubernetes
你觉得2056 小时前
哈尔滨工业大学DeepSeek公开课:探索大模型原理、技术与应用从GPT到DeepSeek|附视频与讲义下载方法
大数据·人工智能·python·gpt·学习·机器学习·aigc
A旧城以西8 小时前
数据结构(JAVA)单向,双向链表
java·开发语言·数据结构·学习·链表·intellij-idea·idea
无所谓จุ๊บ8 小时前
VTK知识学习(50)- 交互与Widget(一)
学习·vtk
FAREWELL000758 小时前
C#核心学习(七)面向对象--封装(6)C#中的拓展方法与运算符重载: 让代码更“聪明”的魔法
学习·c#·面向对象·运算符重载·oop·拓展方法
吴梓穆8 小时前
UE5学习笔记 FPS游戏制作38 继承标准UI
笔记·学习·ue5
Three~stone9 小时前
MySQL学习集--DDL
数据库·sql·学习
齐尹秦9 小时前
HTML 音频(Audio)学习笔记
学习
瞌睡不来9 小时前
(学习总结32)Linux 基础 IO
linux·学习·io
Moonnnn.9 小时前
运算放大器(四)滤波电路(滤波器)
笔记·学习·硬件工程