其他
【强基固本】聊一聊AI框架前端
“强基固本,行稳致远”,科学研究离不开理论基础,人工智能学科更是需要数学、物理、神经科学等基础学科提供有力支撑,为了紧扣时代脉搏,我们推出“强基固本”专栏,讲解AI领域的基础知识,为你的科研学习提供助力,夯实理论基础,提升原始创新能力,敬请关注。
地址:https://zhuanlan.zhihu.com/p/393031067
01
02
#定义正向的网络/复合函数
class Net(nn.Cell):
def __init__(self):
super(Net, self).__init__()
self.matmul = P.MatMul()
self.z = Parameter(Tensor(np.array([1.0], np.float32)), name='z')
def construct(self, x, y):
x = x * self.z
out = self.matmul(x, y)
return out
#GradNet的功能是对输入的net进行Grad,返回一个带正反向的net
class GradNet(nn.Cell):
def __init__(self, net):
super(GradNet, self).__init__()
self.net = net
self.grad_op = GradOperation()
def construct(self, x, y):
gradient_function = self.grad_op(self.net)
return gradient_function(x, y)
x = Tensor([[0.5, 0.6, 0.4], [1.2, 1.3, 1.1]], dtype=mstype.float32)
y = Tensor([[0.01, 0.3, 1.1], [0.1, 0.2, 1.3], [2.1, 1.2, 3.3]], dtype=mstype.float32)
#先得到BP函数,然后进行求值
NewNet = GradNet(Net())
output = NewNet(x,y)
#也可以把前面两步合并成一步
output = GradNet(Net())(x, y)
grad_tanh = grad(jnp.tanh)
print(grad_tanh(2.0))
#前向过程
y_pred = a + b * x + c * x ** 2 + d * x ** 3
#计算loss,loss是一个tensor
loss = (y_pred - y).pow(2).sum()
if t % 100 == 99:
print(t, loss.item())
# 通过tensor进行bp
loss.backward()
Numpy+Scipy+Grad:我想Numpy和Scipy是事实上的标准,如果我们在计算和算法逻辑上能统一到这一块,也是比较自然。
函数式风格:能同时支持深度学习和科学计算场景,符合算法工程师的直观,易于高阶微分,易于并行
分层解耦:基础包只提供简单的Numpy+Scipy+Grad的接口;一些高级库,比如深度学习,基于基础包进行二次开发再提供高层的API,类似JAX的分层模型,这就意味着大家如果在基础库上做到接口兼容就能进行高级库的使用。
“强基固本”历史文章
VAE 模型推导与总结
走进基于深度学习的图像分割
3D点云的旋转不变卷积
t-SNE使用过程中的一些坑
关于旋转框定义的一些理解和感想
误区! Adam+L2并不能发挥效果!
100行用Python实现自动求导(不import任何包的情况下)
从三角函数变换到图神经网络
点云局部特征描述子 SHOT
直观理解万能近似定理(Universal Approximation theorem)
Kmeans 聚类算法
聚类性能评估-V-Measure
完全图解RNN、RNN变体、Seq2Seq、Attention机制
脉冲神经网络(Spiking Neural Network)介绍
更多强基固本专栏文章,
请点击文章底部“阅读原文”查看
分享、点赞、在看,给个三连击呗!