京东联盟建网站,wap手机网站开发asp经验,做网站虚拟主机和云服务器吗,做网站备案是什么意思前言
因为目前需要搭建一些关于RBM或者其他之类的模型#xff0c;感觉不太会折腾caffe#xff0c;然而我发现了几个有趣网址#xff0c;使用theano实现了各种各样的模型#xff0c;所以#xff0c;尝试学一下theano。主要以官方教程为主#xff0c;所以博客会以译文的方…前言
因为目前需要搭建一些关于RBM或者其他之类的模型感觉不太会折腾caffe然而我发现了几个有趣网址使用theano实现了各种各样的模型所以尝试学一下theano。主要以官方教程为主所以博客会以译文的方式公布当然会有自己的一些小见解或者扩展编程环境为win7jupyter notebook如若有误谢谢指正
国际惯例网址帖一波
【PTVSTheanoCPU/GPU】在windows下使用VS安装theano深度学习工具
theano官方文档
theano搭建各种模型,包含RBM,CNN,RNN,AE等
python基础教程 theano中文翻译
基本数据类型定义及操作
因为theano的变量定义模块基本都存在theano.tensor中所以我们先引入theano及其此模块
import theano
import theano.tensor as T
标量定义和操作
首先定义theano类型的两个标量有两种方法
单独为每一个标量定义 xT.dscalar(x)
yT.dscalar(y)或者一次性定义多个 x,yT.dscalars(x,y)然后定义两个标量之间的操作并将它转换为theano可执行的函数 转换方法是theano.function()具体如下 zxy
ftheano.function([x,y],z) 可以发现function函数接受两个输入参数第一个代表这个函数执行定义的功能所需要的输入信息第二个代表这个函数提供的输出。这两个参数都可以是一个值或者一个列表f就相当于python中def定义的函数。 执行此函数看看提供一个列表输入和一个值输出 print f(1,2)#3.0可以发现theano的dscalar数据类型是double只不过用type输出来是float64另一种不使用function的方法叫eval但是没function灵活实现同样的功能方法如下 print z.eval({x:2,y:3})#5.0它是将一个字典作为输入变量然后返回表达式数值结果。第一次使用eval()会很慢因为后台需要使用function()编译表达式但是后面相同的变量调用eval()就快了因为编译好的函数已经缓存了此变量
向量的定义和操作
两种定义方法
#x,yT.dvectors(x,y)xT.dvector(x)
yT.dvector(y)赋值运算 import numpy as np
zxy
ftheano.function([x,y],z)
x1np.array([1,2,3])
y1np.array([4,5,6])
print f(x1,y1)#[ 5. 7. 9.]矩阵的赋值和运算
两种定义方法
# xT.dmatrix(x)# yT.dmatrix(y)x,yT.dmatrices(x,y)赋值运算 zxy
ftheano.function([x,y],z)
x2np.array([[1,2,3],[4,5,6]])
y2np.array([[1,4,7],[2,5,8]])
print f(x2,y2)[[ 2. 6. 10.]
[ 6. 10. 14.]]其它数据类型和操作
数据类型
上面讲的只有dscalar,’dvector’,’dmatrix’但是theano还提供了许多其它精度的变量类型
byte: bscalar, bvector, bmatrix, brow, bcol, btensor3, btensor4, btensor5
16-bit integers: wscalar, wvector, wmatrix, wrow, wcol, wtensor3, wtensor4, wtensor5
32-bit integers: iscalar, ivector, imatrix, irow, icol, itensor3, itensor4, itensor5
64-bit integers: lscalar, lvector, lmatrix, lrow, lcol, ltensor3, ltensor4, ltensor5
float: fscalar, fvector, fmatrix, frow, fcol, ftensor3, ftensor4, ftensor5
double: dscalar, dvector, dmatrix, drow, dcol, dtensor3, dtensor4, dtensor5
complex: cscalar, cvector, cmatrix, crow, ccol, ctensor3, ctensor4, ctensor5
其它与numpy兼容的类型可以查询这里:tensor creation
变量操作
上面讲的都是标量、向量、矩阵各自之间的操作theano还支持标量矩阵, 向量矩阵, 标量向量之类的操作详细查询 broadcasting
随便拿几个作为实例看看
dot函数如果输入是二维矩阵那么就进行二维矩阵的乘法运算。如果输入的是一维向量就进行向量间的点乘计算(不包含共轭复数)例子 import theano
import theano.tensor as T
import numpy as np#x,yT.dvectors(x,y)xT.dvector(x)
yT.dvector(y)
z1T.dot(x,y)
ftheano.function([x,y],z1)
x1np.array([1,2,3])
y1np.array([4,5,6])
print f(x1,y1)#32.0#dot的向量乘积#x,yT.dvectors(x,y)xT.dmatrix(x)
yT.dmatrix(y)
z1T.dot(x,y)
ftheano.function([x,y],z1)
x2np.array([[1,2,3],[4,5,6]])
y2np.array([[1,4],[2,5],[7,8]])
print f(x2,y2)[[ 26. 38.]
[ 56. 89.]]
outer函数向量外积
#outer 向量外积#x,yT.dvectors(x,y)xT.dvector(x)
yT.dvector(y)
z3T.outer(x,y)
ftheano.function([x,y],z3)
x1np.array([1,2,3])
y1np.array([4,5,6])
print f(x1,y1)[[ 4. 5. 6.]
[ 8. 10. 12.]
[ 12. 15. 18.]]
向量矩阵 xT.dvector(x)
yT.dmatrix(y)
z4xy
ftheano.function([x,y],z4)
x1np.array([1,2,3])
y1np.array([[4,5,6],[7,8,9]])
print f(x1,y1)[[ 5. 7. 9.]
[ 8. 10. 12.]]官网介绍的剩下几个函数回头要用再慢慢补
练习
计算表达式a ** 2 b ** 2 2 * a * b
标量形式
a,bT.dscalars(a,b)
ca ** 2 b ** 2 2 * a * b
ftheano.function([a,b],c)
print f(2,3)
向量形式
a,bT.dvectors(a,b)
ca ** 2 b ** 2 2 * a * b
ftheano.function([a,b],c)
print f([1,2],[4,5])
#[ 25. 49.]
所有code链接: https://pan.baidu.com/s/1i4K5ULJ 密码: 5i69