用SymPy简化神经网络的求导

神经网络模型

这里不重点介绍神经网络模型,这里有神经网络比较简洁的介绍和推导。[机器学习] Coursera ML笔记

SymPy(符号计算框架)的安装

我的系统为Ubuntu 14
安装比较简单:sudo apt-get install python-sympy【全部小写,csdn自动变成大写了◔ ‸◔?】

求导

为了简化叙述这里不用求和符号,w,b,x均为矩阵形式。
在python终端输入:

 from sympy import *
 w=Symbol('w')
 b=Symbol('b')
 x=Symbol('x')
 y=Symbol('y')
 
 #或者用下面的方式生成符号
 #w,b,x,y=symbols('w b x y')
 
 a=w*x+b
 print a

这里可以看到a的输出 w ⋅ x + b w⋅x+b wx+b
这里假设激活函数是tanh

 out=tanh(a)
 e=(y-out)**2
 print e

输出: ( y − t a n h ( b + w ⋅ x ) ) 2 (y - tanh(b + w⋅x))^2 (ytanh(b+wx))2
这里对e求w的微分

 print diff(e,w)

输出: − 2 ⋅ x ⋅ ( y − t a n h ( b + w ⋅ x ) ) ⋅ ( − t a n h 2 ( b + w ⋅ x ) + 1 ) -2⋅x⋅(y - tanh(b + w⋅x))⋅(- tanh ^2(b + w⋅x) + 1) 2x(ytanh(b+wx))(tanh2(b+wx)+1)
对e求b的微分

 print diff(e,b)

输出: ( y − t a n h ( b + w ⋅ x ) ) ⋅ ( 2 ⋅ t a n h 2 ( b + w ⋅ x ) − 2 ) (y - tanh(b + w⋅x))⋅(2⋅tanh^2 (b + w⋅x) - 2) (ytanh(b+wx))(2tanh2(b+wx)2)
求导数是不是变得很简单?

总结

当然还有很多其他机器学习算法,如线性回归,逻辑回归等等,可以通过sympy的形式求导和积分,或者去验证自己的导数是否是正确的。这里只是一个入门级别的sympy使用介绍。详细可以点击这里有比较全面的tutorial还有pdf文档

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值