您的位置:首页 > 其它

theano tutorial(三)

2016-04-18 17:16 381 查看
theano的图结构,参见这篇文章ycheng_sjtu: Theano学习笔记(三)——图结构

#coding=utf-8

"""
在theano graphs之间复制随机状态

1.在两个图之间可以转换随机发生器的所有状态,(eg.用第一个graph里面发生器的状态去初始化第二个发生器里面图)
2.theano.tensor.shared_randomstreams.RandomStreams和theano.sandbox.rng_mrg.MRG_RandomStreams
3.每当从RandomStreams获得一个随机变量,就在state_updates list里面加入一个元组,元组的第一个element是一个shared变量,代表于这个特定变量的随机数所联系发生器的状态,第二个代表了相对于这个随机数产生过程的那个theano graph(即RandomFunction{Uniform,0})
"""

from __future__ import print_function
import theano
import numpy
import theano.tensor as T
from theano.sandbox.rng_mrg import MRG_RandomStreams
from theano.tensor.shared_randomstreams import RandomStreams

class Graph():
def __init__(self, seed=123):
self.rng = RandomStreams(seed)
self.y = self.rng.uniform(size=(1,))

g1=Graph(seed=123)
f1=theano.function([],g1.y)

g2=Graph(seed=987)
f2=theano.function([],g2.y)

print(f1())
print(f2())

def copy_random_state(g1, g2):
#isinstance(sinstance(object, class_or_type_or_tuple)
#Return whether an object is an instance of a class or of a subclass thereof.With a type as second argument, return whether that is the object's type.
if isinstance(g1.rng, MRG_RandomStreams):
g2.rng.rstate = g1.rng.rstate

#其实上面的代码没看太明白,但是其实注销来结果好像也是对的
for (su1, su2) in zip(g1.rng.state_updates, g2.rng.state_updates):
su2[0].set_value(su1[0].get_value())
copy_random_state(g1, g2)
print(f1())
print(f2())
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: