Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
P
pytensor
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
testgroup
pytensor
Commits
d57e5031
提交
d57e5031
authored
11月 25, 2008
作者:
James Bergstra
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fixed a bug with random number generation by submodules. See Oliviers email to…
fixed a bug with random number generation by submodules. See Oliviers email to theano-dev for details.
上级
9a21106f
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
206 行增加
和
241 行删除
+206
-241
function_module.py
theano/compile/function_module.py
+11
-0
module.py
theano/compile/module.py
+15
-34
raw_random.py
theano/tensor/raw_random.py
+15
-2
test_blas.py
theano/tensor/tests/test_blas.py
+81
-80
test_joseph.py
theano/tensor/tests/test_joseph.py
+28
-32
test_raw_random.py
theano/tensor/tests/test_raw_random.py
+56
-93
没有找到文件。
theano/compile/function_module.py
浏览文件 @
d57e5031
...
@@ -616,6 +616,17 @@ def function(inputs, outputs, mode='FAST_RUN', accept_inplace = False):
...
@@ -616,6 +616,17 @@ def function(inputs, outputs, mode='FAST_RUN', accept_inplace = False):
Out instance if necessary:
Out instance if necessary:
* a Result instance r will be upgraded like Out(r)
* a Result instance r will be upgraded like Out(r)
Random Numbers
--------------
If your computation involves random numbers, then you have to pass the `RandomKit` as an
input argument. That RandomKit must have a name to be able to seed the generator. To seed
the generator, use the __getitem__ method:
f[<kitname>] = seed #re-seed the elements of a RandomKit
"""
"""
def
wrap_in
(
input
):
def
wrap_in
(
input
):
...
...
theano/compile/module.py
浏览文件 @
d57e5031
...
@@ -240,14 +240,14 @@ class Member(_RComponent):
...
@@ -240,14 +240,14 @@ class Member(_RComponent):
if
memo
and
r
in
memo
:
if
memo
and
r
in
memo
:
return
memo
[
r
]
return
memo
[
r
]
rval
=
gof
.
Container
(
r
,
storage
=
[
None
])
rval
=
gof
.
Container
(
r
,
storage
=
[
None
])
memo
[
r
]
=
rval
memo
[
r
]
=
io
.
In
(
result
=
r
,
value
=
rval
,
mutable
=
False
)
return
rval
return
memo
[
r
]
def
build
(
self
,
mode
,
memo
):
def
build
(
self
,
mode
,
memo
):
"""
"""
Returns the Container associated to this Member's Result.
Returns the Container associated to this Member's Result.
"""
"""
return
memo
[
self
.
r
]
return
memo
[
self
.
r
]
.
value
...
@@ -344,17 +344,17 @@ class Method(Component):
...
@@ -344,17 +344,17 @@ class Method(Component):
' Verify that it is indeed a Member of the'
' Verify that it is indeed a Member of the'
' enclosing module or of one of its submodules.'
%
(
r
,
self
))
' enclosing module or of one of its submodules.'
%
(
r
,
self
))
else
:
else
:
return
gof
.
Container
(
r
,
storage
=
[
None
]
)
return
io
.
In
(
result
=
r
,
value
=
gof
.
Container
(
r
,
storage
=
[
None
]),
mutable
=
False
)
# Wrap the inputs in In instances.
# Wrap the inputs in In instances.
inputs
=
self
.
inputs
inputs
=
self
.
inputs
inputs
=
[
io
.
In
(
result
=
input
,
inputs
=
[
io
.
In
(
result
=
input
,
value
=
get_storage
(
input
),
value
=
get_storage
(
input
)
.
value
,
mutable
=
False
)
mutable
=
False
)
for
input
in
inputs
]
for
input
in
inputs
]
# Add the members to update to the inputs.
# Add the members to update to the inputs.
inputs
+=
[
io
.
In
(
result
=
k
,
inputs
+=
[
io
.
In
(
result
=
k
,
update
=
v
,
update
=
v
,
value
=
get_storage
(
k
,
not
allocate_all
),
value
=
get_storage
(
k
,
not
allocate_all
)
.
value
,
mutable
=
True
,
mutable
=
True
,
strict
=
True
)
strict
=
True
)
for
k
,
v
in
self
.
updates
.
iteritems
()]
for
k
,
v
in
self
.
updates
.
iteritems
()]
...
@@ -367,14 +367,14 @@ class Method(Component):
...
@@ -367,14 +367,14 @@ class Method(Component):
if
input
not
in
_inputs
and
not
isinstance
(
input
,
gof
.
Value
):
if
input
not
in
_inputs
and
not
isinstance
(
input
,
gof
.
Value
):
# Add this input to the inputs; we require that storage already exists for them,
# Add this input to the inputs; we require that storage already exists for them,
# but otherwise they are immutable.
# but otherwise they are immutable.
inputs
+=
[
io
.
In
(
result
=
input
,
storage
=
get_storage
(
input
,
not
allocate_all
)
value
=
get_storage
(
input
,
not
allocate_all
),
inputs
.
append
(
storage
)
mutable
=
False
)]
# Add the kits to the input. The kit should be associated in
# Add the kits to the input. The kit should be associated in
# memo to a list of Containers. theano.function handles that
# memo to a list of Containers. theano.function handles that
# case by picking only the needed Containers from the list, so
# case by picking only the needed Containers from the list, so
# here we can just delegate to theano.function.
# here we can just delegate to theano.function.
inputs
+=
[(
kit
,
get_storage
(
kit
,
not
allocate_all
))
for
kit
in
self
.
kits
]
#inputs += [(kit, get_storage(kit, not allocate_all)) for kit in self.kits]
return
F
.
function
(
inputs
,
outputs
,
mode
)
return
F
.
function
(
inputs
,
outputs
,
mode
)
def
pretty
(
self
,
**
kwargs
):
def
pretty
(
self
,
**
kwargs
):
...
@@ -392,19 +392,6 @@ class Method(Component):
...
@@ -392,19 +392,6 @@ class Method(Component):
einputs
,
eoutputs
=
f
.
maker
.
env
.
inputs
,
f
.
maker
.
env
.
outputs
einputs
,
eoutputs
=
f
.
maker
.
env
.
inputs
,
f
.
maker
.
env
.
outputs
updates
=
dict
(((
k
,
v
)
for
k
,
v
in
zip
(
einputs
[
len
(
inputs
):],
eoutputs
[
len
(
outputs
):])))
updates
=
dict
(((
k
,
v
)
for
k
,
v
in
zip
(
einputs
[
len
(
inputs
):],
eoutputs
[
len
(
outputs
):])))
inputs
,
outputs
=
einputs
[:
len
(
inputs
)],
eoutputs
[:
len
(
outputs
)]
inputs
,
outputs
=
einputs
[:
len
(
inputs
)],
eoutputs
[:
len
(
outputs
)]
# nin = len(inputs)
# nout = len(outputs)
# k, v = zip(*updates.items()) if updates else ((), ())
# nup = len(k)
# eff_in = tuple(inputs) + tuple(k)
# eff_out = tuple(outputs) + tuple(v)
# supp_in = tuple(gof.graph.inputs(eff_out))
# env = gof.Env(*gof.graph.clone(eff_in + supp_in,
# eff_out))
# sup = F.Supervisor(set(env.inputs).difference(env.inputs[len(inputs):len(eff_in)]))
# env.extend(sup)
# mode.optimizer.optimize(env)
# inputs, outputs, updates = env.inputs[:nin], env.outputs[:nout], dict(zip(env.inputs[nin:], env.outputs[nout:]))
rval
+=
pprint
(
inputs
,
outputs
,
updates
,
False
)
rval
+=
pprint
(
inputs
,
outputs
,
updates
,
False
)
return
rval
return
rval
...
@@ -898,21 +885,15 @@ class KitComponent(Component):
...
@@ -898,21 +885,15 @@ class KitComponent(Component):
the memo that maps the SymbolicInputKit to the list of
the memo that maps the SymbolicInputKit to the list of
Containers.
Containers.
"""
"""
kit
=
self
.
kit
for
input
in
self
.
kit
.
sinputs
:
if
kit
in
memo
:
return
memo
[
kit
]
containers
=
[]
for
input
in
kit
.
sinputs
:
r
=
input
.
result
r
=
input
.
result
if
r
not
in
memo
:
if
r
not
in
memo
:
memo
[
r
]
=
gof
.
Container
(
r
,
storage
=
[
None
])
input
=
copy
(
input
)
containers
.
append
(
memo
[
r
])
input
.
value
=
gof
.
Container
(
r
,
storage
=
[
None
])
#containers.append(gof.Container(r, storage = [None]))
memo
[
r
]
=
input
memo
[
kit
]
=
containers
return
containers
def
build
(
self
,
mode
,
memo
):
def
build
(
self
,
mode
,
memo
):
return
memo
[
self
.
kit
]
return
[
memo
[
i
.
result
]
.
value
for
i
in
self
.
kit
.
sinputs
]
...
...
theano/tensor/raw_random.py
浏览文件 @
d57e5031
...
@@ -9,6 +9,7 @@ from .. import compile
...
@@ -9,6 +9,7 @@ from .. import compile
from
..compile
import
SymbolicInputKit
,
SymbolicInput
from
..compile
import
SymbolicInputKit
,
SymbolicInput
from
copy
import
copy
from
copy
import
copy
import
sys
RS
=
numpy
.
random
.
RandomState
RS
=
numpy
.
random
.
RandomState
...
@@ -50,6 +51,7 @@ class RandomFunction(gof.Op):
...
@@ -50,6 +51,7 @@ class RandomFunction(gof.Op):
def
perform
(
self
,
node
,
inputs
,
(
rout
,
out
)):
def
perform
(
self
,
node
,
inputs
,
(
rout
,
out
)):
r
,
shape
,
args
=
inputs
[
0
],
inputs
[
1
],
inputs
[
2
:]
r
,
shape
,
args
=
inputs
[
0
],
inputs
[
1
],
inputs
[
2
:]
r_orig
=
r
assert
self
.
outtype
.
ndim
==
len
(
shape
)
assert
self
.
outtype
.
ndim
==
len
(
shape
)
if
not
self
.
inplace
:
if
not
self
.
inplace
:
r
=
copy
(
r
)
r
=
copy
(
r
)
...
@@ -252,12 +254,23 @@ class RModule(compile.Module):
...
@@ -252,12 +254,23 @@ class RModule(compile.Module):
return
x
return
x
def
_instance_seed
(
self
,
inst
,
seed
,
recursive
=
True
):
def
_instance_seed
(
self
,
inst
,
seed
,
recursive
=
True
):
seedgen
=
numpy
.
random
.
RandomState
(
seed
)
if
recursive
:
if
recursive
:
#Here, we recurse through all the components (inst2) contained in (inst)
#and seeds each subcomponent that is an RModule
for
path
,
c
in
self
.
flat_components_map
(
True
):
for
path
,
c
in
self
.
flat_components_map
(
True
):
if
isinstance
(
c
,
RModule
):
if
isinstance
(
c
,
RModule
):
inst2
=
inst
inst2
=
inst
for
name
in
path
:
for
name
in
path
:
inst2
=
inst2
[
name
]
inst2
=
inst2
[
name
]
c
.
_rkit
.
kit
.
distribute
(
seed
,
xrange
(
len
(
inst
.
_rkit
)),
inst2
.
_rkit
)
# A Kit (c._rkit.kit) contains a list of io.SymbolicIn instances
# and the distribute method takes a value (seed), a list of indices
# and a list of corresponding gof.Container instances. In this
# situation it will reseed all the rngs using the containers
# associated to them.
c
.
_rkit
.
kit
.
distribute
(
seedgen
.
random_integers
(
sys
.
maxint
-
1
),
xrange
(
len
(
inst2
.
_rkit
)),
inst2
.
_rkit
)
else
:
else
:
self
.
_rkit
.
kit
.
distribute
(
seed
,
xrange
(
len
(
inst
.
_rkit
)),
inst
.
_rkit
)
self
.
_rkit
.
kit
.
distribute
(
seed
gen
.
random_integers
(
sys
.
maxint
-
1
)
,
xrange
(
len
(
inst
.
_rkit
)),
inst
.
_rkit
)
theano/tensor/tests/test_blas.py
浏览文件 @
d57e5031
...
@@ -227,84 +227,85 @@ class T_real_matrix(TestCase):
...
@@ -227,84 +227,85 @@ class T_real_matrix(TestCase):
self
.
failUnless
(
_is_real_matrix
(
T
.
DimShuffle
([
False
,
False
],
[
1
,
0
])(
T
.
dmatrix
())))
self
.
failUnless
(
_is_real_matrix
(
T
.
DimShuffle
([
False
,
False
],
[
1
,
0
])(
T
.
dmatrix
())))
self
.
failUnless
(
not
_is_real_matrix
(
T
.
DimShuffle
([
False
],
[
'x'
,
0
])(
T
.
dvector
())))
self
.
failUnless
(
not
_is_real_matrix
(
T
.
DimShuffle
([
False
],
[
'x'
,
0
])(
T
.
dvector
())))
class
T_gemm_opt
(
TestCase
):
if
JOSEPHS_BUG_SOLVED
:
"""This test suite ensures that Gemm is inserted where it belongs, and that the resulting
class
T_gemm_opt
(
TestCase
):
functions compute the same things as the originals."""
"""This test suite ensures that Gemm is inserted where it belongs, and that the resulting
def
XYZab
(
self
):
functions compute the same things as the originals."""
return
T
.
dmatrix
(),
T
.
dmatrix
(),
T
.
dmatrix
(),
T
.
dscalar
(),
T
.
dscalar
()
def
XYZab
(
self
):
return
T
.
dmatrix
(),
T
.
dmatrix
(),
T
.
dmatrix
(),
T
.
dscalar
(),
T
.
dscalar
()
def
just_gemm
(
self
,
i
,
o
,
ishapes
=
[(
4
,
3
),
(
3
,
5
),
(
4
,
5
),
(),
()]):
def
on_fail
():
def
just_gemm
(
self
,
i
,
o
,
ishapes
=
[(
4
,
3
),
(
3
,
5
),
(
4
,
5
),
(),
()]):
for
node
in
f
.
maker
.
env
.
toposort
():
def
on_fail
():
print
'GRAPH'
,
node
for
node
in
f
.
maker
.
env
.
toposort
():
self
.
fail
()
print
'GRAPH'
,
node
self
.
fail
()
f
=
function
([
In
(
ii
,
mutable
=
True
)
for
ii
in
i
],
o
,
mode
=
'FAST_RUN'
)
for
node
in
f
.
maker
.
env
.
nodes
:
f
=
function
([
In
(
ii
,
mutable
=
True
)
for
ii
in
i
],
o
,
mode
=
'FAST_RUN'
)
if
node
.
op
==
T
.
dot
:
on_fail
()
for
node
in
f
.
maker
.
env
.
nodes
:
if
node
.
op
==
_dot22
:
on_fail
()
if
node
.
op
==
T
.
dot
:
on_fail
()
g
=
function
(
i
,
o
,
mode
=
'FAST_COMPILE'
)
if
node
.
op
==
_dot22
:
on_fail
()
for
node
in
g
.
maker
.
env
.
nodes
:
g
=
function
(
i
,
o
,
mode
=
'FAST_COMPILE'
)
if
node
.
op
==
gemm
:
on_fail
()
for
node
in
g
.
maker
.
env
.
nodes
:
if
node
.
op
==
gemm
:
on_fail
()
rng
=
numpy
.
random
.
RandomState
(
234
)
r0
=
f
(
*
[
rng
.
randn
(
*
sh
)
for
sh
in
ishapes
])
rng
=
numpy
.
random
.
RandomState
(
234
)
rng
=
numpy
.
random
.
RandomState
(
234
)
r0
=
f
(
*
[
rng
.
randn
(
*
sh
)
for
sh
in
ishapes
])
r1
=
g
(
*
[
rng
.
randn
(
*
sh
)
for
sh
in
ishapes
])
rng
=
numpy
.
random
.
RandomState
(
234
)
if
numpy
.
max
(
numpy
.
abs
(
r0
[
0
]
-
r1
[
0
]))
>
1.0e-8
:
r1
=
g
(
*
[
rng
.
randn
(
*
sh
)
for
sh
in
ishapes
])
self
.
fail
()
if
numpy
.
max
(
numpy
.
abs
(
r0
[
0
]
-
r1
[
0
]))
>
1.0e-8
:
self
.
fail
()
def
test0
(
self
):
"""Many subgraphs whose dots can be eliminated"""
def
test0
(
self
):
X
,
Y
,
Z
,
a
,
b
=
self
.
XYZab
()
"""Many subgraphs whose dots can be eliminated"""
X
,
Y
,
Z
,
a
,
b
=
self
.
XYZab
()
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[
T
.
dot
(
X
,
Y
)
*
a
+
Z
*
b
])
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[
a
*
T
.
dot
(
X
,
Y
)
+
b
*
Z
])
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[
T
.
dot
(
X
,
Y
)
*
a
+
Z
*
b
])
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[
b
*
Z
+
a
*
T
.
dot
(
X
,
Y
)])
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[
a
*
T
.
dot
(
X
,
Y
)
+
b
*
Z
])
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[
T
.
dot
(
X
,
Y
)
*
a
-
Z
*
b
])
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[
b
*
Z
+
a
*
T
.
dot
(
X
,
Y
)])
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[
a
*
T
.
dot
(
X
,
Y
)
-
b
*
Z
])
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[
T
.
dot
(
X
,
Y
)
*
a
-
Z
*
b
])
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[
b
*
Z
-
a
*
T
.
dot
(
X
,
Y
)])
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[
a
*
T
.
dot
(
X
,
Y
)
-
b
*
Z
])
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[
b
*
Z
-
a
*
T
.
dot
(
X
,
Y
)])
#with transposes (transposes should be pushed through dot in canonicalize)
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[
b
*
Z
.
T
-
a
*
T
.
dot
(
Y
.
T
,
X
.
T
)])
#with transposes (transposes should be pushed through dot in canonicalize)
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[
b
*
Z
.
T
+
a
*
b
*
T
.
dot
(
X
,
Y
)
.
T
])
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[
b
*
Z
.
T
-
a
*
T
.
dot
(
Y
.
T
,
X
.
T
)])
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[
b
*
Z
.
T
+
a
*
b
*
T
.
dot
(
X
,
Y
)
.
T
])
#with N multiplications instead of just one
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[(
b
*
b
)
*
Z
*
a
+
(
a
*
a
)
*
T
.
dot
(
X
,
Y
)
*
b
])
#with N multiplications instead of just one
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[
Z
+
T
.
dot
(
X
,
Y
)])
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[(
b
*
b
)
*
Z
*
a
+
(
a
*
a
)
*
T
.
dot
(
X
,
Y
)
*
b
])
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[
Z
*
b
+
T
.
dot
(
X
,
Y
)])
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[
Z
+
T
.
dot
(
X
,
Y
)])
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[
Z
+
a
*
b
*
a
*
T
.
dot
(
X
,
Y
)])
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[
Z
*
b
+
T
.
dot
(
X
,
Y
)])
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[(
b
*
b
)
*
Z
*
a
-
(
a
*
a
)
*
T
.
dot
(
X
,
Y
)
*
b
])
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[
Z
+
a
*
b
*
a
*
T
.
dot
(
X
,
Y
)])
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[
Z
-
T
.
dot
(
X
,
Y
)])
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[(
b
*
b
)
*
Z
*
a
-
(
a
*
a
)
*
T
.
dot
(
X
,
Y
)
*
b
])
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[
Z
*
b
-
T
.
dot
(
X
,
Y
)])
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[
Z
-
T
.
dot
(
X
,
Y
)])
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[
Z
-
a
*
b
*
a
*
T
.
dot
(
X
,
Y
)])
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[
Z
*
b
-
T
.
dot
(
X
,
Y
)])
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[
Z
-
a
*
b
*
a
*
T
.
dot
(
X
,
Y
)])
# with > 2 terms in the overall addition
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[
Z
+
Z
+
T
.
dot
(
X
,
Y
)
+
Z
])
# with > 2 terms in the overall addition
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[
Z
+
Z
+
T
.
dot
(
X
,
Y
)
+
Z
])
def
test_double_gemm
(
self
):
"""This is the pattern that shows up in the autoencoder"""
def
test_double_gemm
(
self
):
X
,
Y
,
Z
,
a
,
b
=
T
.
dmatrix
(),
T
.
dmatrix
(),
T
.
dmatrix
(),
T
.
dscalar
(),
T
.
dscalar
()
"""This is the pattern that shows up in the autoencoder"""
R
,
S
,
c
=
T
.
dmatrix
(),
T
.
dmatrix
(),
T
.
dscalar
()
X
,
Y
,
Z
,
a
,
b
=
T
.
dmatrix
(),
T
.
dmatrix
(),
T
.
dmatrix
(),
T
.
dscalar
(),
T
.
dscalar
()
R
,
S
,
c
=
T
.
dmatrix
(),
T
.
dmatrix
(),
T
.
dscalar
()
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
,
R
,
S
,
c
],
[
Z
*
c
+
a
*
T
.
dot
(
X
,
Y
)
+
b
*
T
.
dot
(
R
,
S
)
.
T
],
ishapes
=
[(
4
,
3
),
(
3
,
5
),
(
4
,
5
),
(),
(),
(
5
,
9
),
(
9
,
4
),
()])
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
,
R
,
S
,
c
],
[
Z
*
c
+
a
*
T
.
dot
(
X
,
Y
)
+
b
*
T
.
dot
(
R
,
S
)
.
T
],
ishapes
=
[(
4
,
3
),
(
3
,
5
),
(
4
,
5
),
(),
(),
(
5
,
9
),
(
9
,
4
),
()])
def
wishlist
(
self
):
X
,
Y
,
Z
,
a
,
b
=
T
.
dmatrix
(),
T
.
dmatrix
(),
T
.
dmatrix
(),
T
.
dscalar
(),
T
.
dscalar
()
def
wishlist
(
self
):
X
,
Y
,
Z
,
a
,
b
=
T
.
dmatrix
(),
T
.
dmatrix
(),
T
.
dmatrix
(),
T
.
dscalar
(),
T
.
dscalar
()
#with >2 additions of the same T.dot(X,Y term
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[
Z
+
T
.
dot
(
X
,
Y
)
+
T
.
dot
(
X
,
Y
)])
#with >2 additions of the same T.dot(X,Y term
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[(
b
*
b
)
*
Z
*
a
+
(
a
*
a
)
*
T
.
dot
(
X
,
Y
)
+
b
*
T
.
dot
(
X
,
Y
)])
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[
Z
+
T
.
dot
(
X
,
Y
)
+
T
.
dot
(
X
,
Y
)])
self
.
just_gemm
([
X
,
Y
,
Z
,
a
,
b
],
[(
b
*
b
)
*
Z
*
a
+
(
a
*
a
)
*
T
.
dot
(
X
,
Y
)
+
b
*
T
.
dot
(
X
,
Y
)])
def
test_vector_stuff
(
self
):
X
,
Y
,
Z
,
a
,
b
=
T
.
dmatrix
(),
T
.
dmatrix
(),
T
.
dmatrix
(),
T
.
dscalar
(),
T
.
dscalar
()
def
test_vector_stuff
(
self
):
u
,
v
=
T
.
dvector
(),
T
.
dvector
()
X
,
Y
,
Z
,
a
,
b
=
T
.
dmatrix
(),
T
.
dmatrix
(),
T
.
dmatrix
(),
T
.
dscalar
(),
T
.
dscalar
()
u
,
v
=
T
.
dvector
(),
T
.
dvector
()
f
=
function
([
a
,
u
,
v
],
a
+
T
.
dot
(
u
,
v
),
mode
=
'FAST_RUN'
)
self
.
failIf
(
gemm
in
[
n
.
op
for
n
in
f
.
maker
.
env
.
nodes
])
f
=
function
([
a
,
u
,
v
],
a
+
T
.
dot
(
u
,
v
),
mode
=
'FAST_RUN'
)
self
.
failIf
(
gemm
in
[
n
.
op
for
n
in
f
.
maker
.
env
.
nodes
])
f
=
function
([
a
,
u
,
X
,
Y
],
a
*
u
+
T
.
dot
(
X
,
Y
),
mode
=
'FAST_RUN'
)
self
.
failIf
(
gemm
in
[
n
.
op
for
n
in
f
.
maker
.
env
.
nodes
])
f
=
function
([
a
,
u
,
X
,
Y
],
a
*
u
+
T
.
dot
(
X
,
Y
),
mode
=
'FAST_RUN'
)
self
.
failIf
(
gemm
in
[
n
.
op
for
n
in
f
.
maker
.
env
.
nodes
])
theano/tensor/tests/test_joseph.py
浏览文件 @
d57e5031
...
@@ -188,7 +188,7 @@ class QuadraticDenoisingAA(T.RModule):
...
@@ -188,7 +188,7 @@ class QuadraticDenoisingAA(T.RModule):
obj
.
qfilters
=
[
R
.
uniform
(
size
=
sz
,
low
=
-
inf
,
high
=
inf
)
*
qfilter_relscale
\
obj
.
qfilters
=
[
R
.
uniform
(
size
=
sz
,
low
=
-
inf
,
high
=
inf
)
*
qfilter_relscale
\
for
qf
in
self
.
qfilters
]
for
qf
in
self
.
qfilters
]
if
seed
is
not
None
:
if
seed
is
not
None
:
obj
.
seed
(
seed
)
obj
.
seed
(
seed
,
recursive
=
True
)
obj
.
lr
=
lr
obj
.
lr
=
lr
...
@@ -438,7 +438,7 @@ def create(window_size=3,
...
@@ -438,7 +438,7 @@ def create(window_size=3,
concatenated_representation_size
=
7
,
concatenated_representation_size
=
7
,
lr
=
0.01
,
lr
=
0.01
,
seed
=
123
,
seed
=
123
,
noise_level
=
0.
01
,
noise_level
=
0.
2
,
qfilter_relscale
=
0.1
,
qfilter_relscale
=
0.1
,
compile_mode
=
None
):
compile_mode
=
None
):
""" Create a convolutional model. """
""" Create a convolutional model. """
...
@@ -457,40 +457,36 @@ def create(window_size=3,
...
@@ -457,40 +457,36 @@ def create(window_size=3,
model
=
architecture
.
make
(
input_size
=
input_dimension
,
input_representation_size
=
token_representation_size
,
hidden_representation_size
=
concatenated_representation_size
,
output_size
=
output_vocabsize
,
lr
=
lr
,
seed
=
seed
,
noise_level
=
noise_level
,
qfilter_relscale
=
qfilter_relscale
,
mode
=
compile_mode
)
model
=
architecture
.
make
(
input_size
=
input_dimension
,
input_representation_size
=
token_representation_size
,
hidden_representation_size
=
concatenated_representation_size
,
output_size
=
output_vocabsize
,
lr
=
lr
,
seed
=
seed
,
noise_level
=
noise_level
,
qfilter_relscale
=
qfilter_relscale
,
mode
=
compile_mode
)
return
model
return
model
from
theano
import
gof
JTEST
=
theano
.
compile
.
mode
.
optdb
.
query
(
*
sys
.
argv
[
2
:])
print
'JTEST'
,
JTEST
theano
.
compile
.
register_optimizer
(
'JTEST'
,
JTEST
)
from
unittest
import
TestCase
class
T_bla
(
TestCase
):
if
__name__
==
'__main__'
:
def
test0
(
self
):
optimizer
=
eval
(
sys
.
argv
[
1
])
optimizer
=
'fast_compile'
m
=
create
(
compile_mode
=
theano
.
Mode
(
linker
=
'c|py'
,
optimizer
=
optimizer
))
m
=
create
(
compile_mode
=
theano
.
Mode
(
linker
=
'c|py'
,
optimizer
=
optimizer
))
prog_str
=
[]
for
i
,
node
in
enumerate
(
m
.
finetuning_update
.
maker
.
env
.
toposort
()):
#print ' ', i, node
prog_str
.
append
(
str
(
node
))
print
"PROGRAM LEN
%
i HASH
%
i"
%
(
len
(
m
.
finetuning_update
.
maker
.
env
.
nodes
),
reduce
(
lambda
a
,
b
:
hash
(
a
)
^
hash
(
b
),
prog_str
))
N
.
random
.
seed
=
8324
rng
=
N
.
random
.
RandomState
(
23904
)
inputs
=
[
N
.
random
.
rand
(
1
,
9
)
for
i
in
1
,
2
,
3
]
inputs
=
[
rng
.
rand
(
10
,
9
)
for
i
in
1
,
2
,
3
]
targets
=
N
.
asarray
([
0
])
targets
=
N
.
asarray
([
0
,
3
,
4
,
2
,
3
,
4
,
4
,
2
,
1
,
0
])
#print inputs
print
'UNSUPERVISED PHASE'
print
'unsupervised phase'
for
i
in
xrange
(
10
):
for
i
in
xrange
(
10
):
m
.
pretraining_update
(
*
inputs
)
print
m
.
pretraining_update
(
*
inputs
)
print
m
.
pretraining_update
(
*
inputs
)
print
m
.
pretraining_update
(
*
inputs
)
print
'FINETUNING GRAPH'
print
m
.
pretraining_update
(
*
inputs
)
print
'SUPERVISED PHASE COSTS (
%
s)'
%
optimizer
print
m
.
pretraining_update
(
*
inputs
)
for
i
in
xrange
(
10
):
print
m
.
pretraining_update
(
*
inputs
)
for
i
in
xrange
(
10
):
print
'FINETUNING GRAPH'
m
.
finetuning_update
(
*
(
inputs
+
[
targets
]))
#the 0 is the target
for
i
,
node
in
enumerate
(
m
.
finetuning_update
.
maker
.
env
.
toposort
()):
print
' '
,
i
,
node
print
"""SUPERVISED PHASE COSTS (fast_compile):
2.07944154168
2.07818967136
2.07693824526
2.07568725592
2.07443669587"""
print
'SUPERVISED PHASE COSTS (
%
s)'
%
optimizer
print
m
.
finetuning_update
(
*
(
inputs
+
[
targets
]))
#the 0 is the target
print
m
.
finetuning_update
(
*
(
inputs
+
[
targets
]))
#the 0 is the target
print
m
.
finetuning_update
(
*
(
inputs
+
[
targets
]))
#the 0 is the target
print
m
.
finetuning_update
(
*
(
inputs
+
[
targets
]))
#the 0 is the target
print
m
.
finetuning_update
(
*
(
inputs
+
[
targets
]))
#the 0 is the target
print
m
.
finetuning_update
(
*
(
inputs
+
[
targets
]))
#the 0 is the target
self
.
fail
(
'just failing to get stdout and stderr'
)
theano/tensor/tests/test_raw_random.py
浏览文件 @
d57e5031
## TODO: REDO THESE TESTS
## TODO: REDO THESE TESTS
import
unittest
import
unittest
import
numpy
as
N
from
theano.tensor.raw_random
import
*
from
theano.tensor.raw_random
import
*
from
theano
import
compile
from
theano
import
tensor
from
theano
import
compile
,
gof
def
test_state_propagation
():
x
=
tensor
.
vector
()
rk
=
RandomKit
(
'rk'
,
1000
)
f
=
compile
.
function
([
x
,
(
rk
,
[
gof
.
Container
(
r
=
gof
.
generic
,
storage
=
[
123
],
name
=
'bla'
)])],
rk
.
binomial
(
tensor
.
shape
(
x
)),
mode
=
'FAST_COMPILE'
)
f
[
'rk'
]
=
9873456
rvals
=
[
f
([
1
,
2
,
3
,
4
,
6
,
7
,
8
])
for
i
in
xrange
(
5
)]
print
rvals
for
i
in
xrange
(
5
-
1
):
for
j
in
xrange
(
i
+
1
,
5
):
assert
not
N
.
all
(
rvals
[
i
]
==
rvals
[
j
])
def
test_B
():
"""Test that random numbers change from call to call!
Also, make sure that the seeding strategy doesn't change without failing a test.
Random numbers can't be too random or experiments aren't repeatable. Email theano-dev
before updating the `rvals` in this test.
"""
class
B
(
RModule
):
def
__init__
(
self
):
super
(
B
,
self
)
.
__init__
(
self
)
self
.
x
=
compile
.
Member
(
tensor
.
dvector
())
self
.
r
=
self
.
random
.
uniform
(
tensor
.
shape
(
self
.
x
))
self
.
f
=
compile
.
Method
([
self
.
x
],
self
.
r
)
class
E
(
RModule
):
def
__init__
(
self
):
super
(
E
,
self
)
.
__init__
(
self
)
self
.
b
=
B
()
self
.
f
=
compile
.
Method
([
self
.
b
.
x
],
self
.
b
.
r
)
b
=
E
()
m
=
b
.
make
(
mode
=
'FAST_COMPILE'
)
m
.
seed
(
1000
)
#print m.f(N.ones(5))
#print m.f(N.ones(5))
#print m.f(N.ones(5))
rvals
=
[
"0.0655889727823 0.566937256035 0.486897708861 0.939594224804 0.731948448071"
,
"0.407174827663 0.450046718267 0.454825370073 0.874814293401 0.828759935744"
,
"0.573194634066 0.746015418896 0.864696705461 0.8405810785 0.540268740918"
,
"0.924477905238 0.96687901023 0.306490321744 0.654349923901 0.789402591813"
,
"0.513182053208 0.0426565286449 0.0723651478047 0.454308519009 0.86151064181"
]
for
i
in
xrange
(
5
):
s
=
" "
.
join
([
str
(
n
)
for
n
in
m
.
f
(
N
.
ones
(
5
))])
assert
s
==
rvals
[
i
]
def
Uniform
(
s
,
n
):
return
NumpyGenerator
(
s
,
n
,
numpy
.
random
.
RandomState
.
uniform
)
class
T_Random
:
#(unittest.TestCase):
def
test0
(
self
):
rng
=
Uniform
(
12345
,
2
)
r0
=
rng
((
2
,
3
))
r1
=
rng
((
2
,
3
))
f0
=
compile
.
function
([],
[
r0
])
f1
=
compile
.
function
([],
[
r1
])
v0
=
f0
()
self
.
failUnless
(
v0
.
shape
==
(
2
,
3
))
self
.
failUnless
(
str
(
v0
[
0
,
0
])
.
startswith
(
'0.929616'
))
self
.
failUnless
(
str
(
v0
[
1
,
2
])
.
startswith
(
'0.595544'
))
v1
=
f1
()
self
.
failUnless
(
numpy
.
all
(
v0
==
v1
))
v1
=
f1
()
self
.
failUnless
(
numpy
.
all
(
v0
!=
v1
))
def
test1
(
self
):
rng
=
RandomState
(
12345
)
f0
=
compile
.
function
([],
[
rng
.
gen
(
'uniform'
,
(
3
,))])
f1
=
compile
.
function
([],
[
rng
.
gen
(
'uniform'
,
(
3
,))])
v0
,
v1
=
f0
(),
f1
()
self
.
failUnless
(
v0
.
shape
==
(
3
,))
self
.
failUnless
(
numpy
.
all
(
v0
!=
v1
))
def
test2
(
self
):
x
=
tensor
.
ivector
()
f0
=
compile
.
function
([
x
],
[
Uniform
(
123
,
1
)(
x
)])
f1
=
compile
.
function
([
x
],
[
Uniform
(
123
,
1
)(
x
)])
v0
,
v1
=
f0
([
3
]),
f1
([
7
])
self
.
failUnless
(
v0
.
shape
==
(
3
,))
self
.
failUnless
(
numpy
.
all
(
v0
==
v1
[:
3
]))
def
test3
(
self
):
rng
=
RandomState
(
12345
)
template
=
tensor
.
fmatrix
()
f0
=
compile
.
function
([
template
],
[
rng
.
gen_like
(
'uniform'
,
template
)])
v0
=
f0
(
numpy
.
zeros
((
2
,
3
)))
self
.
failUnless
(
str
(
v0
[
1
,
2
])
.
startswith
(
'0.595544'
))
def
test4
(
self
):
rng
=
RandomState
(
123455
)
template
=
tensor
.
fmatrix
()
f0
=
compile
.
function
([
template
],
[
rng
.
gen_like
((
'beta'
,{
'a'
:
0.5
,
'b'
:
0.65
}),
template
)])
v0
=
f0
(
numpy
.
zeros
((
2
,
3
)))
self
.
failUnless
(
v0
.
shape
==
(
2
,
3
))
self
.
failUnless
(
str
(
v0
[
0
,
0
])
.
startswith
(
'0.013259'
))
self
.
failUnless
(
str
(
v0
[
1
,
2
])
.
startswith
(
'0.753368'
))
def
test5
(
self
):
"""Test that two NumpyGenerators with the same dist compare equal"""
rng0
=
RandomState
(
123456
)
rng1
=
RandomState
(
123456
)
d0
=
rng0
.
gen
((
'beta'
,{
'a'
:
0.5
,
'b'
:
0.65
}),
(
2
,
3
,
4
))
d1
=
rng1
.
gen
((
'beta'
,{
'a'
:
0.5
,
'b'
:
0.65
}),
(
2
,
3
,
4
))
self
.
failUnless
(
d0
.
owner
.
op
==
d1
.
owner
.
op
)
self
.
failUnless
(
hash
(
d0
.
owner
.
op
)
==
hash
(
d1
.
owner
.
op
))
def
test6
(
self
):
x
=
tensor
.
vector
()
u
=
RandomState
(
9999
)
.
uniform_like
(
x
,
0.
,
10.
)
fu
=
compile
.
function
([
x
],[
u
])
res1
=
fu
(
numpy
.
zeros
((
3
)))
res2
=
fu
(
numpy
.
zeros
((
3
)))
self
.
failUnless
(
str
(
res1
[
0
])
.
startswith
(
'8.23389'
))
self
.
failUnless
(
str
(
res2
[
0
])
.
startswith
(
'5.45926'
))
b
=
RandomState
(
121212
)
.
binomial_like
(
x
,
1
,
0.8
)
fb
=
compile
.
function
([
x
],[
b
])
res1
=
fb
(
numpy
.
zeros
((
10
)))
res2
=
fb
(
numpy
.
zeros
((
10
)))
self
.
failUnless
(
list
(
res1
)
==
[
1
,
0
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
])
self
.
failUnless
(
list
(
res2
)
==
[
1
,
1
,
0
,
1
,
1
,
1
,
0
,
0
,
1
,
1
])
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
unittest
.
main
()
unittest
.
main
()
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论