Theano简单入门(二)

一、Theano的基本用法

定义函数的方式:

步骤 0    宣告使用theano   import theano
步骤 1    定义输入       x=theano.tensor.scalar() 这里相当于tensorflow的placeholder
步骤 2    定义输出       y=2*x
步骤3     定义fuction    f = theano.function([x],y)
步骤 4    调用函数     print f(-2)

步骤1 定义输入变量 

      a = theano.tensor.scalar()

      b =theano.tensor.matrix()

简化  import  theano.tensor as T

步骤2 定义输出变量 需要和输入变量的关系

     x1=T.matrix()

     x2=T.matrix()

     y1=x1*x2

     y2=T.dot(x1,x2) #矩阵乘法

步骤3 申明函数

     f= theano.function([x],y)

    函数输入必须是list 带[]

例如:

# -*- coding: UTF-8 -*-
import numpy as np
import theano.tensor as T
from theano import function

# basic
x = T.dscalar('x') # 建立标量x的容器,类似于tf.placeholder,但是直接标明了类型
y = T.dscalar('y') # 建立标量y的容器
z = x + y
# function first:imput sconed:output
# 使用 function 定义 theano 的方程, 
# 将输入值 x, y 放在 [] 里,  输出值 z 放在后面
f = function([x,y],z) # 将确切的 x, y 值放入方程中
# 5.0

print(f(2,3))

# to pretty-print the function 打印原始方程
from theano import pp
print(pp(z))

# how about matix
x = T.dmatrix('x') # 矩阵 x 的容器
y = T.dmatrix('y') # 矩阵 y 的容器
# z = T.dot(x,y)  # 定义矩阵乘法
z = x + y  # 定义矩阵加法
# function first:imput sconed:output
f = function([x,y],z) 
print(
	f(
		np.arange(12).reshape((3,4)),
		10*np.ones((3,4))
	)
)

二、Theano的常用数据类型

上面的例子当中涉及到了Theano常用的数据类型:例如T.dscalar()、T.dmatrix()。

在theano.tensor数据类型中,有double、int、uchar、float等各种类型,不过我们最常用到的是int和float类型,float是因为GPU一般是float32类型,所以在编写程序的时候,我们很少用到double,常用的数据类型如下:

数值:iscalar(int类型的变量)、fscalar(float类型的变量)

一维向量:ivector(int 类型的向量)、fvector(float类型的向量)、

二维矩阵:fmatrix(float类型矩阵)、imatrix(int类型的矩阵)

三维float类型矩阵:ftensor3  

四维float类型矩阵:ftensor4

三、Function的用法

3.1 写一个激励函数,例如Sigmoid函数:

# activation function example
x = T.dmatrix('x')
s = 1/(1 + T.exp(-x)) # logistic or soft step
logistic = theano.function([x],s)
print(logistic([[0,1],[-2,-3]]))

3.2 多输出的function:

# multiply outputs for a function
a,b = T.dmatrices('a','b')
diff = a - b
abs_diff = abs(diff)
diff_squared = diff**2
f = theano.function([a,b],[diff,abs_diff,diff_squared])
print(f(
		np.ones((2,2)),
		np.arange(4).reshape((2,2))
	)
)
# 可以使用多个变量进行接收function的输出,在进行操作
x1,x2,x3 = f(
	np.ones((2,2)),
	np.arange(4).reshape((2,2))
)
print(x1)

3.3 function的名字

# name for a function
x,y,w = T.dscalars('x','y','w')
z = (x+y)*w
f = theano.function([x,theano.In(y,value=1),theano.In(w,value=2,name='weights')],z)
print(f(23,))
print(f(23,2))
print(f(23,2,weights=4))

3.4 求偏导数

#coding=utf-8  
import theano  
x =theano.tensor.fscalar('x')#定义一个float类型的变量x  
y= 1 / (1 + theano.tensor.exp(-x))#定义变量y  
dx=theano.grad(y,x)#偏导数函数  
f= theano.function([x],dx)#定义函数f,输入为x,输出为s函数的偏导数  
print f(3)#计算当x=3的时候,函数y的偏导数 

3.5 共享变量

共享变量是多线程编程中的一个名词,故名思议就是各线程,公共拥有的变量,这个是为了多线程高效计算、访问而使用的变量。因为深度学习中,我们整个计算过程基本上是多线程计算的,于是就需要用到共享变量。在程序中,我们一般把神经网络的参数W、b等定义为共享变量,因为网络的参数,基本上是每个线程都需要访问的。

# -*- coding: UTF-8 -*-
import numpy as np
import theano.tensor as T
import theano

# 定义共享变量,要用 np.array 给它赋予初始值,初始值是 0,并且它的数据类型要规定好。数据类型是很重要的,在后面要定义 vector 或者 matrix 的时候,一定要统一,否则就会报错。 这个例子中,我们定义它为float64,所以在后面定义其他结构的时候,也要保证这样的数据类型。 最后一个参数就是它的名字 'state'。
state = theano.shared(np.array(0,dtype=np.float64),'state')
# 下面是累加值,定义它的名字为 inc,还有它的数据类型,调用 state.dtype,而不是写 dtype=np.float64, 否则会报错。
inc = T.scalar('inc',dtype=state.dtype)
# 接下来是要定义一个 accumulator 函数,它的输入参数为 inc,结果就是输出 state,累加的过程叫做 updates,就是要把现在的 state 变成 state+inc 。
accumulator = theano.function([inc],state,updates=[(state,state+inc)])

# print(accumulator(10))
# print(accumulator(10))

# to get variable value 可以用到保存模型
print(state.get_value())
# 0.0
accumulator(1)
print(state.get_value())
# 1.0
accumulator(10)
print(state.get_value())
# 11.0

# to set variable value 可以用到设置模型,将训练好的模型用到新的模型上
state.set_value(-1)
accumulator(3)
print(state.get_value())
# 2.0

# temporarily replace shared variable with another value 临时使用修改
tmp_func = state*2 + inc
#有时只是想暂时使用 Shared 变量,并不需要把它更新: 这时我们可以定义一个 a 来临时代替 state,注意定义 a 的时候也要统一 dtype。
a = T.scalar(dtype=state.dtype)
skip_shared = theano.function([inc,a],tmp_func,givens=[(state,a)])
print(skip_shared(2,3))
# 8.0

print(state.get_value())
# 2.0

 

发布了58 篇原创文章 · 获赞 13 · 访问量 3万+
展开阅读全文

'import theano'出错,网上找不到类似情况,崩溃

02-01

非计算机专业,对编码一无所知,纯粹根据网络教程安装theano,半个多月了,一直失败,提示的出错在网上找不到类似情况,崩溃。。。 由于使用笔记本版本较老,所以在软件使用方面没什么选择余地, 系统,win7+32位 cuda 5.0 anaconda3 python3.7(anaconda自带下载安装)。 与theano相关的pachages都下载了,下载方法使用conda install,包的版本基本都是最新的。 与theano相关的部分包: anaconda 2018.12 balas 1.0 libgpuarray 0.7.6 libpython 2.1 m2w64-toolchain 5.3.0 mkl 2019.1 mkl-service 1.1.2 nose 1.3.7 numpy 1.15.4 python 3.7.1 scipy 1.1.0 theano 1.0.3 .theanorc.txt: [global] openmp=False floatX = float32 device = cuda fastmath = True [gcc] cxxflags = -IC:\ProgramData\Anaconda3\MinGW [nvcc] flags=-LC:\ProgramData\Anaconda3_\libs compiler__bindir=C:\Program Files\Microsoft Visual Studio 8\VSTA\Bin [blas] ldflags= [cuda] root = C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0_ 目前状况: import pygpu 正常,cuda安装正常, import theano一直提示出错,快半个月了,网上各种方法都试过了,包括各种比如重启,theano cache purge。环境变量已添加,pathopathy添加后会出现configparser的问题,所以没加。 现在import theano提示: error (theano.gpuarray):could not initialize pygpu,support disabled traceback, ....... 最后的错误显示: pygpu.gpuarray.gpuarrayexception: b'could not load "cuGetErrorName":\xd5\xd2\xb2\xbb\xb5\xbd\xd6\xb8\xb6\xa8\xb5\xc4\xb3\xcc\xd0\xf2\xa1\xa3\r\n' 网上找不到类似的错误,请教各位专家,有什么办法吗?? 问答

anconda在import theano失败,求大神帮助!!

04-05

=============================== Problem occurred during compilation with the command line below: C:\MinGW\bin\g++.exe -shared -g -march=core-avx2 -mcx16 -msahf -mmovbe -maes -mpclmul -mpopcnt -mabm -mno-lwp -mno-fma -mno-fma4 -mn o-xop -mbmi -mbmi2 -mno-tbm -mno-avx -mno-avx2 -msse4.2 -msse4.1 -mlzcnt -mno-rtm -mno-hle -mrdrnd -mf16c -mfsgsbase -mno-rdseed -mn o-prfchw -mno-adx -mfxsr -mno-xsave -mno-xsaveopt --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=3072 -mtune=core-avx2 -D NPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION -m64 -DMS_WIN64 -IC:\Anaconda\lib\site-packages\numpy\core\include -IC :\Anaconda\include -o C:\Users\Jim\AppData\Local\Theano\compiledir_Windows-7-6.1.7600-Intel64_Family_6_Model_60_Stepping_3_GenuineIn tel-2.7.9-64\lazylinker_ext\lazylinker_ext.pyd C:\Users\Jim\AppData\Local\Theano\compiledir_Windows-7-6.1.7600-Intel64_Family_6_Mode l_60_Stepping_3_GenuineIntel-2.7.9-64\lazylinker_ext\mod.cpp -LC:\Anaconda\libs -LC:\Anaconda -lpython27 C:\Users\Jim\AppData\Local\Temp\cc4OSOrg.o: In function `unpack_list_of_ssize_t': C:/Users/Jim/AppData/Local/Theano/compiledir_Windows-7-6.1.7600-Intel64_Family_6_Model_60_Stepping_3_GenuineIntel-2.7.9-64/lazylinke r_ext/mod.cpp:58: undefined reference to `__imp_PyExc_TypeError' C:/Users/Jim/AppData/Local/Theano/compiledir_Windows-7-6.1.7600-Intel64_Family_6_Model_60_Stepping_3_GenuineIntel-2.7.9-64/lazylinke r_ext/mod.cpp:68: undefined reference to `__imp_PyExc_IndexError' C:\Users\Jim\AppData\Local\Temp\cc4OSOrg.o: In function `CLazyLinker_init': 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览