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

来源:互联网 发布:java 对象转map 编辑:程序博客网 时间:2024/05/17 08:04

神经网络模型

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

wx+b

这里假设激活函数是tanh

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

输出:

(ytanh(b+wx))2

这里对e求w的微分

 print diff(e,w)

输出:

2x(ytanh(b+wx))(tanh2(b+wx)+1)

对e求b的微分

 print diff(e,b)

输出:

(ytanh(b+wx))(2tanh2(b+wx)2)

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

总结

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

0 0
原创粉丝点击