Theano基础(二)
来源:互联网 发布:mud游戏编程吧 编辑:程序博客网 时间:2024/05/21 09:07
Theano是Python的一个Deep Learning 开源包,也可以很方便地利用它来做科学计算。我打算边学边记录一下。
本节参考:http://deeplearning.net/software/theano/tutorial/examples.html#logistic-function
这一小节我们利用Theano做logistic回归,在此之前我们先了解一些Theano的知识。 对于logistic回归,忘记了推荐看一下Andrew Ng的教程,逻辑回归一章:http://openclassroom.stanford.edu/MainFolder/CoursePage.php?course=MachineLearning
基础准备:
上一节中(http://blog.csdn.net/lihaoweicsdn/article/details/49329557)
我们利用theano创建了一个函数,完成两个矩阵相加的功能。这一节我们要来学习更多关于theano的知识。
1.theano支持多输入多输出,请见下例:
import theano import theano.tensor as T x = T.dmatrices('x')y = T.dmatrices('y')x_add_y = x+yx_sub_y = x-yf = theano.function([x,y],[x_add_y,x_sub_y])print f([[1,1]],[[1,1] ]) ##结果:[array([[ 2., 2.]]), array([[ 0., 0.]])]
2.指定输入变量默认值
这时候我们要用到theano的Param 指定默认值
import theano import theano.tensor as T from theano import Paramx = T.dmatrices('x')s = 1 / (1 + T.exp(-x))logistic = theano.function([ Param(x,default = [[1]]) ],s)这里我们一直用的dmatrices 大家也可以随意用其他的,比如 dscalars等,依据需求而定。这里我们新出现了T.exp() 在tensor中,内置了很多常见的函数,比如abs() tanh() arcsin() ......
3.使用共享变量
这时要用到theano中的shared 共享变量能被多个函数所共用。
在下例中 accumulator 函数中,updates 用来更新共享变量。函数完成的功能:记录函数被调用的次数。次数记录在共享变量state中。对于下面的f函数。state的值一直是0 但计算z时state的值暂时由r替换(由givens实现) 这一部分暂时做了解即可。
import theano import theano.tensor as T from theano import Paramfrom theano import sharedstate = shared(0) #创建共享变量,初始值为0inc = T.iscalar('inc') #32-bits 整型##输入变量: inc 输出:上一次的state 值 更新: state = state + inc accumulator = theano.function([inc], state, updates=[(state, state+<span style="font-family:SimSun;">1</span>)])r = T.scalar(dtype = state.dtype) #替换量 须与state 同类型z = inc + statef = theano.function([inc,r],z,givens=[(state,r)])
4.生成随机数
import theano import theano.tensor as T from theano import Paramfrom theano import sharedfrom theano.tensor.shared_randomstreams import RandomStreamssrng = RandomStreams(seed=234)rv_u = srng.uniform((2,2))##均匀分布 2*2 matrixrv_n = srng.normal((2,2)) ##正态分布 2*2 matrixf = theano.function([], rv_u) ##<span style="font-family:SimSun;">每次调用随机值都不一样</span>g = theano.function([], rv_n, no_default_updates=True) #<span style="font-family:SimSun;">每次调用随机值都一样,类似于numpy中生成随机数</span>nearly_zeros = theano.function([], rv_u + rv_u - 2 * rv_u)
5.numpy.random 生成随机数
请参考:http://www.mamicode.com/info-detail-507676.html
实例练习:logistic 回归
算法过程:
1.创建两类样本数据
2.初始化 w 和 b
3.计算logistic值 (大于0.5即认为是1类)
4.损失函数(对数项+权值控制项)
5.计算损失函数对w和b的梯度
for i = 1 到 训练次数:
计算损失函数值;
更新w 和 b
最后:预测,计算logistic值(大于0.5即认为是1类)
import numpyimport theanoimport theano.tensor as Trng = numpy.randomN = 400 ##样本数量feats = 784 ##每个样本的特征维数##随机生成样本,样本类别{0,1}D = (rng.randn(N, feats), rng.randint(size=N, low=0, high=2))training_steps = 10000 #迭代次数# Declare Theano symbolic variablesx = T.fmatrix("x")y = T.fvector("y")# 初始化w 和 bw = theano.shared(rng.randn(feats), name="w")b = theano.shared(0., name="b")print("Initial model:")# 打印初始w 和 b#print(w.get_value()) #print(b.get_value())# Construct Theano expression graphp_1 = 1 / (1 + T.exp(-T.dot(x, w) - b)) # Probability that target = 1prediction = p_1 > 0.5 # The prediction thresholdedxent = -y * T.log(p_1) - (1-y) * T.log(1-p_1) # Cross-entropy loss functioncost = xent.mean() + 0.01 * (w ** 2).sum()# The cost to minimizegw, gb = T.grad(cost, [w, b]) # Compute the gradient of the cost # (we shall return to this in a # following section of this tutorial)# Compiletrain = theano.function( inputs=[x,y], outputs=[prediction, xent], updates=((w, w - 0.1 * gw), (b, b - 0.1 * gb))) predict = theano.function(inputs=[x], outputs=prediction)# Trainfor i in range(training_steps): pred, err = train(D[0], D[1])print("Final model:")print(w.get_value())print(b.get_value())print("target values for D:")print(D[1])print("prediction on D:")print(predict(D[0]))
- Theano基础(二)
- theano学习笔记(二) :基础
- Theano中文翻译教程(二). 基础骗之 More Examples
- theano 程序(二)
- Theano基础(一)
- theano学习初步(二) 基础Tensor函数
- theano学习初步(二) 基础Tensor函数
- theano 编程细节(二)
- theano 训练样本制作(二)
- 深度学习(二)theano环境搭建
- 深度学习(二)theano环境搭建
- 深度学习(二)theano环境搭建
- Theano Tutorial文档翻译(二):代数
- 深度学习(二)theano环境搭建
- 深度学习(二)theano入门学习
- 深度学习(二)theano环境搭建
- Theano学习二----numpy
- theano tutotial(二)
- 再议gluPerspective和gluLookAt的关系
- web.xml 的一些格式
- 详解Android中AsyncTask的使用
- unity 脚本执行顺序设置 Script Execution Order Settings
- 算法竞赛入门-枚举-7.1.4-双基回文数
- Theano基础(二)
- 算法: 有向无环图(DAG)的拓扑排序
- LINUX下gdb无法debug,提示ImportError: No module named 'libstdcxx'
- 基础补漏!!!!!
- 安卓异步线程消息机制学习——Handler+Thread+Looper
- 单向链表判断是否存在循环
- Hiberante\Struts2\Spring\SpringMVC\MVC\SSH
- 【iOS】Swift类的继承、构造方法、析构器等复习
- Flex正则表达式