您的位置:首页 > 理论基础 > 计算机网络

用SymPy简化神经网络的求导(微分)

2016-05-19 14:56 295 查看

神经网络模型

这里不重点介绍神经网络模型,这里有神经网络比较简洁的介绍和推导。[机器学习] 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

这里假设激活函数是tanh

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


输出:<
4000
span style="display: inline-block; position: relative; width: 8.672em; height: 0px; font-size: 123%;">(y−tanh(b+w⋅x))2

这里对e求w的微分

print diff(e,w)


输出: −2⋅x⋅(y−tanh(b+w⋅x))⋅(−tanh2(b+w⋅x)+1)

对e求b的微分

print diff(e,b)


输出: (y−tanh(b+w⋅x))⋅(2⋅tanh2(b+w⋅x)−2)

求导数是不是变得很简单?

总结

当然还有很多其他机器学习算法,如线性回归,逻辑回归等等,可以通过sympy的形式求导和积分,或者去验证自己的导数是否是正确的。这里只是一个入门级别的sympy使用介绍。详细可以点击这里有比较全面的tutorial还有pdf文档
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息