1.定义变量
import numpy as np
import theano.tensor as T
from theano import function
定义常量
x = T.dscalar('x') # 建立 x 的容器
y = T.dscalar('y') # 建立 y 的容器
#或
x,y,w = T.dscalars('x','y','w')
定义矩阵
x = T.dmatrix('x') # 矩阵 x 的容器
y = T.dmatrix('y') # 矩阵 y 的容器
#或
x,y = T.dmatrices('x','y')
所有数据类型:
2. 做运算
主要用function进行运算
function有两个参数,输入和输出,同时可以用来定义一个自定义名字函数,传入参数时只传入输入的参数。
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]]))
"""
[[ 0.5 0.73105858]
[ 0.26894142 0.11920292]]
"""
function有多个输出及输入,用方括号集合。
f = theano.function([a,b], [diff,abs_diff,diff_squared])
3.shared变量
shared变量
,意思是这些变量可以在运算过程中,不停地进行交换和更新值。 在定义 weights 和 bias
的情况下,会需要用到这样的变量。
定义变量的同时,要定义初始值和名字。
state = theano.shared(np.array(0,dtype=np.float64), 'state') # inital state = 0
提取变量当前值,使用get_value()
# to get variable value
print(state.get_value())
# 0.0
设置变量值,用set_value()
state.set_value(-1)
4.theano使用激活函数
http://deeplearning.net/software/theano/library/tensor/nnet/nnet.html
(1) sigmoid:输入越小,越趋近于0,输入越大,越趋近于1
theano.tensor.nnet.nnet.sigmoid(x)
用法:
import theano.tensor as T
x, y, b = T.dvectors('x', 'y', 'b')
W = T.dmatrix('W')
y = T.nnet.sigmoid(T.dot(W, x) + b)
(2) softplus:
输入值小于 0 时,输出值接近 0, 当输入值大于 0 时,输出值是非线性的上升关系。可以很好地处理具有非线性的逻辑关系的输入值。
theano.tensor.nnet.nnet.
softplus
(x)
(3) softmax
theano.tensor.nnet.nnet.
softmax
(x)
x,y,b = T.dvectors('x','y','b')
W = T.dmatrix('W')
y = T.nnet.softmax(T.dot(W,x) + b)
(4)relu
theano.tensor.nnet.
relu
(x, alpha=0)
翻译以下就是alpha参数的值为1的时候,是线性激活函数
5. 计算交叉熵
(1)theano.tensor.nnet.nnet.
binary_crossentropy
(output, target)
x, y, b, c = T.dvectors('x', 'y', 'b', 'c')
W = T.dmatrix('W')
V = T.dmatrix('V')
h = T.nnet.sigmoid(T.dot(W, x) + b)
x_recons = T.nnet.sigmoid(T.dot(V, h) + c)
recon_cost = T.nnet.binary_crossentropy(x_recons, x).mean()
(2)theano.tensor.nnet.nnet.
sigmoid_binary_crossentropy
(output, target)
6.T.concatenate