import numpy as np
import matplotlib.pyplot as plt
import theano
import theano.tensor as T
from theano import pp
#本文件演示共享变量的定义、获取、设置和更新
#共享变量,指可以在各个函数之间共享的量,相当于C语言中的全局变量。
#可以通过set_value和get_value设置共享变量的值
#共享变量声明
shared_var = theano.shared(np.array([[1,2],[3,4]],dtype=theano.config.floatX))
#获取
print shared_var.type() #运行结果:<TensorType(float64, matrix)>
print '共享变量的初始值:'
print shared_var.get_value()
#设置
shared_var.set_value(np.array([[3,4],[2,1]],dtype=theano.config.floatX))
print '修改后的共享变量的值:'
print shared_var.get_value()
#与函数一起使用
shared_squared = shared_var**2
#定义一个没有输入参数,只有输出的函数
function1 = theano.function([],shared_squared)
print '共享变量的平方:'
print function1()
subt = T.matrix('subt')
#更新共享变量,采用字典形式:{共享变量名:值}
fun2 = theano.function([subt],shared_var,updates={shared_var:shared_var-subt})
fun2(np.array([[1,1],[1,1]]))
print shared_var.get_value()
#function1的值也改变了,因为它操作的是共享变量shared_var,因为此变量已经被更改
print function1()