本文主要是介绍用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+bprint a
这里可以看到a的输出 w ⋅ x + b w⋅x+b w⋅x+b
这里假设激活函数是tanh
out=tanh(a)e=(y-out)**2print e
输出: ( y − t a n h ( b + w ⋅ x ) ) 2 (y - tanh(b + w⋅x))^2 (y−tanh(b+w⋅x))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) −2⋅x⋅(y−tanh(b+w⋅x))⋅(−tanh2(b+w⋅x)+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) (y−tanh(b+w⋅x))⋅(2⋅tanh2(b+w⋅x)−2)
求导数是不是变得很简单?
总结
当然还有很多其他机器学习算法,如线性回归,逻辑回归等等,可以通过sympy的形式求导和积分,或者去验证自己的导数是否是正确的。这里只是一个入门级别的sympy使用介绍。详细可以点击这里有比较全面的tutorial,还有pdf文档
这篇关于用SymPy简化神经网络的求导的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!