Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
P
pytensor
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
testgroup
pytensor
Commits
ccf6deb0
提交
ccf6deb0
authored
1月 27, 2017
作者:
ballasn
提交者:
GitHub
1月 27, 2017
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #5452 from bscellier/import_numpy
Update "import numpy" to "import numpy as np" (theano/compile directory)
上级
8c5cad8f
3b7aa75e
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
19 个修改的文件
包含
184 行增加
和
187 行删除
+184
-187
builders.py
theano/compile/builders.py
+2
-2
debugmode.py
theano/compile/debugmode.py
+31
-31
function.py
theano/compile/function.py
+2
-2
function_module.py
theano/compile/function_module.py
+8
-8
monitormode.py
theano/compile/monitormode.py
+3
-3
ops.py
theano/compile/ops.py
+6
-6
profiling.py
theano/compile/profiling.py
+5
-5
sharedvalue.py
theano/compile/sharedvalue.py
+2
-2
test_builders.py
theano/compile/tests/test_builders.py
+34
-34
test_debugmode.py
theano/compile/tests/test_debugmode.py
+19
-19
test_function.py
theano/compile/tests/test_function.py
+20
-20
test_function_module.py
theano/compile/tests/test_function_module.py
+23
-25
test_misc.py
theano/compile/tests/test_misc.py
+5
-5
test_monitormode.py
theano/compile/tests/test_monitormode.py
+4
-4
test_nanguardmode.py
theano/compile/tests/test_nanguardmode.py
+16
-16
test_ops.py
theano/compile/tests/test_ops.py
+2
-3
test_pfunc.py
theano/compile/tests/test_pfunc.py
+0
-0
test_profiling.py
theano/compile/tests/test_profiling.py
+2
-2
test_shared.py
theano/compile/tests/test_shared.py
+0
-0
没有找到文件。
theano/compile/builders.py
浏览文件 @
ccf6deb0
...
@@ -59,11 +59,11 @@ class OpFromGraph(gof.Op):
...
@@ -59,11 +59,11 @@ class OpFromGraph(gof.Op):
.. code-block:: python
.. code-block:: python
import numpy
import numpy
as np
import theano
import theano
from theano import config, function, OpFromGraph, tensor
from theano import config, function, OpFromGraph, tensor
x, y, z = tensor.scalars('xyz')
x, y, z = tensor.scalars('xyz')
s = theano.shared(n
umpy
.random.rand(2, 2).astype(config.floatX))
s = theano.shared(n
p
.random.rand(2, 2).astype(config.floatX))
e = x + y * z + s
e = x + y * z + s
op = OpFromGraph([x, y, z], [e])
op = OpFromGraph([x, y, z], [e])
# op behaves like a normal theano op
# op behaves like a normal theano op
...
...
theano/compile/debugmode.py
浏览文件 @
ccf6deb0
...
@@ -14,7 +14,7 @@ import six.moves.copyreg as copyreg
...
@@ -14,7 +14,7 @@ import six.moves.copyreg as copyreg
from
itertools
import
chain
,
product
as
itertools_product
from
itertools
import
chain
,
product
as
itertools_product
from
theano.compat
import
izip
from
theano.compat
import
izip
import
numpy
import
numpy
as
np
import
theano
import
theano
from
theano
import
gof
,
config
from
theano
import
gof
,
config
...
@@ -270,15 +270,15 @@ class BadOptimization(DebugModeError):
...
@@ -270,15 +270,15 @@ class BadOptimization(DebugModeError):
print
(
" New Value: "
,
str
(
self
.
new_r_val
),
file
=
sio
)
print
(
" New Value: "
,
str
(
self
.
new_r_val
),
file
=
sio
)
try
:
try
:
ov
=
n
umpy
.
asarray
(
self
.
old_r_val
)
ov
=
n
p
.
asarray
(
self
.
old_r_val
)
nv
=
n
umpy
.
asarray
(
self
.
new_r_val
)
nv
=
n
p
.
asarray
(
self
.
new_r_val
)
ssio
=
StringIO
()
ssio
=
StringIO
()
abs_diff
=
n
umpy
.
absolute
(
nv
-
ov
)
abs_diff
=
n
p
.
absolute
(
nv
-
ov
)
print
(
" Max Abs Diff: "
,
n
umpy
.
max
(
abs_diff
),
file
=
ssio
)
print
(
" Max Abs Diff: "
,
n
p
.
max
(
abs_diff
),
file
=
ssio
)
print
(
" Mean Abs Diff: "
,
n
umpy
.
mean
(
abs_diff
),
file
=
ssio
)
print
(
" Mean Abs Diff: "
,
n
p
.
mean
(
abs_diff
),
file
=
ssio
)
print
(
" Median Abs Diff: "
,
n
umpy
.
median
(
abs_diff
),
file
=
ssio
)
print
(
" Median Abs Diff: "
,
n
p
.
median
(
abs_diff
),
file
=
ssio
)
print
(
" Std Abs Diff: "
,
n
umpy
.
std
(
abs_diff
),
file
=
ssio
)
print
(
" Std Abs Diff: "
,
n
p
.
std
(
abs_diff
),
file
=
ssio
)
arg_max_val
=
n
umpy
.
argmax
(
abs_diff
)
arg_max_val
=
n
p
.
argmax
(
abs_diff
)
values_at_max
=
(
nv
.
flatten
()[
arg_max_val
],
values_at_max
=
(
nv
.
flatten
()[
arg_max_val
],
ov
.
flatten
()[
arg_max_val
])
ov
.
flatten
()[
arg_max_val
])
print
(
" Value at Max Diff: "
,
values_at_max
,
file
=
ssio
)
print
(
" Value at Max Diff: "
,
values_at_max
,
file
=
ssio
)
...
@@ -286,13 +286,13 @@ class BadOptimization(DebugModeError):
...
@@ -286,13 +286,13 @@ class BadOptimization(DebugModeError):
# N.B. the maximum(..., 1e-8) protects against div by 0 when
# N.B. the maximum(..., 1e-8) protects against div by 0 when
# nv == ov == 0
# nv == ov == 0
reldiff
=
(
abs_diff
/
reldiff
=
(
abs_diff
/
n
umpy
.
maaximum
(
numpy
.
absolute
(
nv
)
+
numpy
.
absolute
(
ov
),
n
p
.
maximum
(
np
.
absolute
(
nv
)
+
np
.
absolute
(
ov
),
1e-8
))
1e-8
))
print
(
" Max Rel Diff: "
,
n
umpy
.
max
(
reldiff
),
file
=
ssio
)
print
(
" Max Rel Diff: "
,
n
p
.
max
(
reldiff
),
file
=
ssio
)
print
(
" Mean Rel Diff: "
,
n
umpy
.
mean
(
reldiff
),
file
=
ssio
)
print
(
" Mean Rel Diff: "
,
n
p
.
mean
(
reldiff
),
file
=
ssio
)
print
(
" Median Rel Diff: "
,
n
umpy
.
median
(
reldiff
),
file
=
ssio
)
print
(
" Median Rel Diff: "
,
n
p
.
median
(
reldiff
),
file
=
ssio
)
print
(
" Std Rel Diff: "
,
n
umpy
.
std
(
reldiff
),
file
=
ssio
)
print
(
" Std Rel Diff: "
,
n
p
.
std
(
reldiff
),
file
=
ssio
)
arg_max_val
=
n
umpy
.
argmax
(
reldiff
)
arg_max_val
=
n
p
.
argmax
(
reldiff
)
values_at_max
=
(
nv
.
flatten
()[
arg_max_val
],
values_at_max
=
(
nv
.
flatten
()[
arg_max_val
],
ov
.
flatten
()[
arg_max_val
])
ov
.
flatten
()[
arg_max_val
])
print
(
" Value at Max Diff: "
,
values_at_max
,
file
=
ssio
)
print
(
" Value at Max Diff: "
,
values_at_max
,
file
=
ssio
)
...
@@ -342,8 +342,8 @@ class BadDestroyMap(DebugModeError):
...
@@ -342,8 +342,8 @@ class BadDestroyMap(DebugModeError):
print
(
" repr (old val):"
,
repr
(
self
.
old_val
),
file
=
sio
)
print
(
" repr (old val):"
,
repr
(
self
.
old_val
),
file
=
sio
)
print
(
" repr (new val):"
,
repr
(
self
.
new_val
),
file
=
sio
)
print
(
" repr (new val):"
,
repr
(
self
.
new_val
),
file
=
sio
)
try
:
try
:
npy_old_val
=
n
umpy
.
asarray
(
self
.
old_val
)
npy_old_val
=
n
p
.
asarray
(
self
.
old_val
)
npy_new_val
=
n
umpy
.
asarray
(
self
.
new_val
)
npy_new_val
=
n
p
.
asarray
(
self
.
new_val
)
print
(
" value dtype (new <space> old):"
,
npy_new_val
.
dtype
,
print
(
" value dtype (new <space> old):"
,
npy_new_val
.
dtype
,
npy_old_val
.
dtype
,
file
=
sio
)
npy_old_val
.
dtype
,
file
=
sio
)
print
(
" value shape (new <space> old):"
,
npy_new_val
.
shape
,
print
(
" value shape (new <space> old):"
,
npy_new_val
.
shape
,
...
@@ -356,13 +356,13 @@ class BadDestroyMap(DebugModeError):
...
@@ -356,13 +356,13 @@ class BadDestroyMap(DebugModeError):
print
(
" value min (new-old):"
,
delta
.
min
(),
file
=
sio
)
print
(
" value min (new-old):"
,
delta
.
min
(),
file
=
sio
)
print
(
" value max (new-old):"
,
delta
.
max
(),
file
=
sio
)
print
(
" value max (new-old):"
,
delta
.
max
(),
file
=
sio
)
print
(
" value argmin (new-old):"
,
print
(
" value argmin (new-old):"
,
n
umpy
.
unravel_index
(
delta
.
argmin
(),
npy_new_val
.
shape
),
n
p
.
unravel_index
(
delta
.
argmin
(),
npy_new_val
.
shape
),
file
=
sio
)
file
=
sio
)
print
(
" value argmax (new-old):"
,
print
(
" value argmax (new-old):"
,
n
umpy
.
unravel_index
(
delta
.
argmax
(),
npy_new_val
.
shape
),
n
p
.
unravel_index
(
delta
.
argmax
(),
npy_new_val
.
shape
),
file
=
sio
)
file
=
sio
)
print
(
" location of first 10 mismatches:"
,
print
(
" location of first 10 mismatches:"
,
n
umpy
.
transpose
(
numpy
.
nonzero
(
delta
))[:
10
],
file
=
sio
)
n
p
.
transpose
(
np
.
nonzero
(
delta
))[:
10
],
file
=
sio
)
print
(
""
,
file
=
sio
)
print
(
""
,
file
=
sio
)
except
Exception
as
e
:
except
Exception
as
e
:
print
(
"(Numpy-hints failed with:
%
s)"
%
str
(
e
),
file
=
sio
)
print
(
"(Numpy-hints failed with:
%
s)"
%
str
(
e
),
file
=
sio
)
...
@@ -453,7 +453,7 @@ class InvalidValueError(DebugModeError):
...
@@ -453,7 +453,7 @@ class InvalidValueError(DebugModeError):
v_dtype
=
v
.
dtype
v_dtype
=
v
.
dtype
v_min
=
v
.
min
()
v_min
=
v
.
min
()
v_max
=
v
.
max
()
v_max
=
v
.
max
()
v_isfinite
=
n
umpy
.
all
(
numpy
.
isfinite
(
v
))
v_isfinite
=
n
p
.
all
(
np
.
isfinite
(
v
))
except
Exception
:
except
Exception
:
pass
pass
client_node
=
self
.
client_node
client_node
=
self
.
client_node
...
@@ -1025,7 +1025,7 @@ def _lessbroken_deepcopy(a):
...
@@ -1025,7 +1025,7 @@ def _lessbroken_deepcopy(a):
# this exists because copy.deepcopy on numpy arrays is broken
# this exists because copy.deepcopy on numpy arrays is broken
# This logic is also in link.py
# This logic is also in link.py
from
theano.gof.type
import
_cdata_type
from
theano.gof.type
import
_cdata_type
if
type
(
a
)
in
(
n
umpy
.
ndarray
,
numpy
.
memmap
):
if
type
(
a
)
in
(
n
p
.
ndarray
,
np
.
memmap
):
rval
=
a
.
copy
()
rval
=
a
.
copy
()
elif
type
(
a
)
is
_cdata_type
:
elif
type
(
a
)
is
_cdata_type
:
# This is not copyable (and should be used for constant data).
# This is not copyable (and should be used for constant data).
...
@@ -1034,7 +1034,7 @@ def _lessbroken_deepcopy(a):
...
@@ -1034,7 +1034,7 @@ def _lessbroken_deepcopy(a):
rval
=
copy
.
deepcopy
(
a
)
rval
=
copy
.
deepcopy
(
a
)
assert
type
(
rval
)
==
type
(
a
),
(
type
(
rval
),
type
(
a
))
assert
type
(
rval
)
==
type
(
a
),
(
type
(
rval
),
type
(
a
))
if
isinstance
(
rval
,
n
umpy
.
ndarray
):
if
isinstance
(
rval
,
n
p
.
ndarray
):
assert
rval
.
dtype
==
a
.
dtype
assert
rval
.
dtype
==
a
.
dtype
return
rval
return
rval
...
@@ -1241,7 +1241,7 @@ def _get_preallocated_maps(node, thunk, prealloc_modes, def_val,
...
@@ -1241,7 +1241,7 @@ def _get_preallocated_maps(node, thunk, prealloc_modes, def_val,
# There is no risk to overwrite inputs, since r does not work
# There is no risk to overwrite inputs, since r does not work
# inplace.
# inplace.
if
isinstance
(
r
.
type
,
(
TensorType
,
CudaNdarrayType
)):
if
isinstance
(
r
.
type
,
(
TensorType
,
CudaNdarrayType
)):
reuse_outputs
[
r
][
...
]
=
n
umpy
.
asarray
(
reuse_outputs
[
r
][
...
]
=
n
p
.
asarray
(
def_val
)
.
astype
(
r
.
type
.
dtype
)
def_val
)
.
astype
(
r
.
type
.
dtype
)
if
reuse_outputs
:
if
reuse_outputs
:
...
@@ -1259,7 +1259,7 @@ def _get_preallocated_maps(node, thunk, prealloc_modes, def_val,
...
@@ -1259,7 +1259,7 @@ def _get_preallocated_maps(node, thunk, prealloc_modes, def_val,
new_buf
=
r
.
type
.
value_zeros
(
r_vals
[
r
]
.
shape
)
new_buf
=
r
.
type
.
value_zeros
(
r_vals
[
r
]
.
shape
)
# CudaNdarray don't have flags field
# CudaNdarray don't have flags field
# assert new_buf.flags["C_CONTIGUOUS"]
# assert new_buf.flags["C_CONTIGUOUS"]
new_buf
[
...
]
=
n
umpy
.
asarray
(
def_val
)
.
astype
(
r
.
type
.
dtype
)
new_buf
[
...
]
=
n
p
.
asarray
(
def_val
)
.
astype
(
r
.
type
.
dtype
)
c_cont_outputs
[
r
]
=
new_buf
c_cont_outputs
[
r
]
=
new_buf
...
@@ -1273,7 +1273,7 @@ def _get_preallocated_maps(node, thunk, prealloc_modes, def_val,
...
@@ -1273,7 +1273,7 @@ def _get_preallocated_maps(node, thunk, prealloc_modes, def_val,
f_cont_outputs
=
{}
f_cont_outputs
=
{}
for
r
in
considered_outputs
:
for
r
in
considered_outputs
:
if
isinstance
(
r
.
type
,
(
TensorType
,
CudaNdarrayType
)):
if
isinstance
(
r
.
type
,
(
TensorType
,
CudaNdarrayType
)):
new_buf
=
n
umpy
.
zeros
(
new_buf
=
n
p
.
zeros
(
shape
=
r_vals
[
r
]
.
shape
,
shape
=
r_vals
[
r
]
.
shape
,
dtype
=
r_vals
[
r
]
.
dtype
,
dtype
=
r_vals
[
r
]
.
dtype
,
order
=
'F'
)
order
=
'F'
)
...
@@ -1331,7 +1331,7 @@ def _get_preallocated_maps(node, thunk, prealloc_modes, def_val,
...
@@ -1331,7 +1331,7 @@ def _get_preallocated_maps(node, thunk, prealloc_modes, def_val,
else
:
else
:
buf_shape
.
append
(
s
*
2
)
buf_shape
.
append
(
s
*
2
)
new_buf
=
r
.
type
.
value_zeros
(
buf_shape
)
new_buf
=
r
.
type
.
value_zeros
(
buf_shape
)
new_buf
[
...
]
=
n
umpy
.
asarray
(
def_val
)
.
astype
(
r
.
type
.
dtype
)
new_buf
[
...
]
=
n
p
.
asarray
(
def_val
)
.
astype
(
r
.
type
.
dtype
)
init_strided
[
r
]
=
new_buf
init_strided
[
r
]
=
new_buf
# The number of combinations is exponential in the number of
# The number of combinations is exponential in the number of
...
@@ -1377,7 +1377,7 @@ def _get_preallocated_maps(node, thunk, prealloc_modes, def_val,
...
@@ -1377,7 +1377,7 @@ def _get_preallocated_maps(node, thunk, prealloc_modes, def_val,
r_buf
=
r_buf
[
tuple
(
strides
)][
tuple
(
shapes
)]
r_buf
=
r_buf
[
tuple
(
strides
)][
tuple
(
shapes
)]
assert
r_buf
.
shape
==
r_vals
[
r
]
.
shape
assert
r_buf
.
shape
==
r_vals
[
r
]
.
shape
r_buf
[
...
]
=
n
umpy
.
asarray
(
def_val
)
.
astype
(
r_buf
.
dtype
)
r_buf
[
...
]
=
n
p
.
asarray
(
def_val
)
.
astype
(
r_buf
.
dtype
)
strided
[
r
]
=
r_buf
strided
[
r
]
=
r_buf
if
strided
:
if
strided
:
...
@@ -1405,7 +1405,7 @@ def _get_preallocated_maps(node, thunk, prealloc_modes, def_val,
...
@@ -1405,7 +1405,7 @@ def _get_preallocated_maps(node, thunk, prealloc_modes, def_val,
for
s
,
sd
in
zip
(
r_vals
[
r
]
.
shape
,
for
s
,
sd
in
zip
(
r_vals
[
r
]
.
shape
,
r_shape_diff
)]
r_shape_diff
)]
new_buf
=
r
.
type
.
value_zeros
(
out_shape
)
new_buf
=
r
.
type
.
value_zeros
(
out_shape
)
new_buf
[
...
]
=
n
umpy
.
asarray
(
new_buf
[
...
]
=
n
p
.
asarray
(
def_val
)
.
astype
(
r
.
type
.
dtype
)
def_val
)
.
astype
(
r
.
type
.
dtype
)
wrong_size
[
r
]
=
new_buf
wrong_size
[
r
]
=
new_buf
...
@@ -2261,7 +2261,7 @@ class _Linker(gof.link.LocalLinker):
...
@@ -2261,7 +2261,7 @@ class _Linker(gof.link.LocalLinker):
# HACK TO LOOK LIKE A REAL DESTRUCTIVE ACTION
# HACK TO LOOK LIKE A REAL DESTRUCTIVE ACTION
# TOOK PLACE
# TOOK PLACE
if
((
type
(
dr_vals
[
r
][
0
])
in
if
((
type
(
dr_vals
[
r
][
0
])
in
(
n
umpy
.
ndarray
,
numpy
.
memmap
))
and
(
n
p
.
ndarray
,
np
.
memmap
))
and
(
dr_vals
[
r
][
0
]
.
dtype
==
(
dr_vals
[
r
][
0
]
.
dtype
==
storage_map
[
r
][
0
]
.
dtype
)
and
storage_map
[
r
][
0
]
.
dtype
)
and
(
dr_vals
[
r
][
0
]
.
shape
==
(
dr_vals
[
r
][
0
]
.
shape
==
...
...
theano/compile/function.py
浏览文件 @
ccf6deb0
...
@@ -13,7 +13,7 @@ from six import string_types
...
@@ -13,7 +13,7 @@ from six import string_types
from
theano.compile.io
import
In
from
theano.compile.io
import
In
from
theano.compile.function_module
import
orig_function
from
theano.compile.function_module
import
orig_function
from
theano.compile.pfunc
import
pfunc
from
theano.compile.pfunc
import
pfunc
from
numpy
import
any
import
numpy
as
np
import
warnings
import
warnings
from
theano
import
compat
from
theano
import
compat
...
@@ -286,7 +286,7 @@ def function(inputs, outputs=None, mode=None, updates=None, givens=None,
...
@@ -286,7 +286,7 @@ def function(inputs, outputs=None, mode=None, updates=None, givens=None,
"input."
)
"input."
)
# compute some features of the arguments:
# compute some features of the arguments:
uses_tuple
=
any
([
isinstance
(
i
,
(
list
,
tuple
))
for
i
in
inputs
])
uses_tuple
=
np
.
any
([
isinstance
(
i
,
(
list
,
tuple
))
for
i
in
inputs
])
uses_updates
=
bool
(
updates
)
uses_updates
=
bool
(
updates
)
uses_givens
=
bool
(
givens
)
uses_givens
=
bool
(
givens
)
...
...
theano/compile/function_module.py
浏览文件 @
ccf6deb0
...
@@ -12,7 +12,7 @@ import six.moves.cPickle as pickle
...
@@ -12,7 +12,7 @@ import six.moves.cPickle as pickle
from
itertools
import
chain
from
itertools
import
chain
import
time
import
time
import
warnings
import
warnings
import
numpy
import
numpy
as
np
import
theano
import
theano
from
theano
import
config
,
gof
from
theano
import
config
,
gof
...
@@ -837,9 +837,9 @@ class Function(object):
...
@@ -837,9 +837,9 @@ class Function(object):
in
args_share_memory
[
j
]],
in
args_share_memory
[
j
]],
[
self
.
input_storage
[
k
]
.
storage
[
0
]
for
k
[
self
.
input_storage
[
k
]
.
storage
[
0
]
for
k
in
args_share_memory
[
j
]])
in
args_share_memory
[
j
]])
if
n
umpy
.
any
([(
var
.
type
is
i_var
.
type
and
if
n
p
.
any
([(
var
.
type
is
i_var
.
type
and
var
.
type
.
may_share_memory
(
val
,
i_val
))
var
.
type
.
may_share_memory
(
val
,
i_val
))
for
(
var
,
val
)
in
group_j
]):
for
(
var
,
val
)
in
group_j
]):
is_aliased
=
True
is_aliased
=
True
args_share_memory
[
j
]
.
append
(
i
)
args_share_memory
[
j
]
.
append
(
i
)
...
@@ -1028,9 +1028,9 @@ def _pickle_Function(f):
...
@@ -1028,9 +1028,9 @@ def _pickle_Function(f):
all_data
=
input_storage
+
inputs_data
all_data
=
input_storage
+
inputs_data
for
i
,
d_i
in
enumerate
(
all_data
):
for
i
,
d_i
in
enumerate
(
all_data
):
for
j
,
d_j
in
enumerate
(
all_data
):
for
j
,
d_j
in
enumerate
(
all_data
):
if
((
i
<
j
)
and
isinstance
(
d_i
,
n
umpy
.
ndarray
)
and
if
((
i
<
j
)
and
isinstance
(
d_i
,
n
p
.
ndarray
)
and
isinstance
(
d_j
,
n
umpy
.
ndarray
)):
isinstance
(
d_j
,
n
p
.
ndarray
)):
if
n
umpy
.
may_share_memory
(
d_i
,
d_j
):
if
n
p
.
may_share_memory
(
d_i
,
d_j
):
if
f
.
pickle_aliased_memory_strategy
==
'warn'
:
if
f
.
pickle_aliased_memory_strategy
==
'warn'
:
_logger
.
warning
(
'aliased relationship between '
_logger
.
warning
(
'aliased relationship between '
'Function arguments
%
s,
%
s '
'Function arguments
%
s,
%
s '
...
@@ -1050,7 +1050,7 @@ def _constructor_Function(maker, input_storage, inputs_data):
...
@@ -1050,7 +1050,7 @@ def _constructor_Function(maker, input_storage, inputs_data):
assert
len
(
f
.
input_storage
)
==
len
(
inputs_data
)
assert
len
(
f
.
input_storage
)
==
len
(
inputs_data
)
for
container
,
x
in
zip
(
f
.
input_storage
,
inputs_data
):
for
container
,
x
in
zip
(
f
.
input_storage
,
inputs_data
):
assert
(
container
.
data
is
x
)
or
\
assert
(
container
.
data
is
x
)
or
\
(
isinstance
(
x
,
n
umpy
.
ndarray
)
and
(
container
.
data
==
x
)
.
all
())
or
\
(
isinstance
(
x
,
n
p
.
ndarray
)
and
(
container
.
data
==
x
)
.
all
())
or
\
(
container
.
data
==
x
)
(
container
.
data
==
x
)
return
f
return
f
...
...
theano/compile/monitormode.py
浏览文件 @
ccf6deb0
from
__future__
import
absolute_import
,
print_function
,
division
from
__future__
import
absolute_import
,
print_function
,
division
# Note: this code was initially copied from the 'pyutools' package by its
# Note: this code was initially copied from the 'pyutools' package by its
# original author, and re-licensed under Theano's license.
# original author, and re-licensed under Theano's license.
import
numpy
import
numpy
as
np
import
theano
import
theano
from
theano.compile.mode
import
Mode
from
theano.compile.mode
import
Mode
...
@@ -93,8 +93,8 @@ class MonitorMode(Mode):
...
@@ -93,8 +93,8 @@ class MonitorMode(Mode):
def
detect_nan
(
i
,
node
,
fn
):
def
detect_nan
(
i
,
node
,
fn
):
for
output
in
fn
.
outputs
:
for
output
in
fn
.
outputs
:
if
(
not
isinstance
(
output
[
0
],
n
umpy
.
random
.
RandomState
)
and
if
(
not
isinstance
(
output
[
0
],
n
p
.
random
.
RandomState
)
and
n
umpy
.
isnan
(
output
[
0
])
.
any
()):
n
p
.
isnan
(
output
[
0
])
.
any
()):
print
(
'*** NaN detected ***'
)
print
(
'*** NaN detected ***'
)
theano
.
printing
.
debugprint
(
node
)
theano
.
printing
.
debugprint
(
node
)
print
(
'Inputs :
%
s'
%
[
input
[
0
]
for
input
in
fn
.
inputs
])
print
(
'Inputs :
%
s'
%
[
input
[
0
]
for
input
in
fn
.
inputs
])
...
...
theano/compile/ops.py
浏览文件 @
ccf6deb0
...
@@ -17,7 +17,7 @@ from six import iteritems, integer_types
...
@@ -17,7 +17,7 @@ from six import iteritems, integer_types
from
six.moves
import
xrange
from
six.moves
import
xrange
import
numpy
import
numpy
as
np
def
register_view_op_c_code
(
type
,
code
,
version
=
()):
def
register_view_op_c_code
(
type
,
code
,
version
=
()):
...
@@ -338,7 +338,7 @@ class Shape_i(gof.Op):
...
@@ -338,7 +338,7 @@ class Shape_i(gof.Op):
def
__init__
(
self
,
i
):
def
__init__
(
self
,
i
):
# As i will be used in the hash and that ndarray are not hashable,
# As i will be used in the hash and that ndarray are not hashable,
# we need to convert it to an int as it is hashable.
# we need to convert it to an int as it is hashable.
if
isinstance
(
i
,
n
umpy
.
ndarray
):
if
isinstance
(
i
,
n
p
.
ndarray
):
assert
i
.
dtype
in
theano
.
tensor
.
integer_dtypes
assert
i
.
dtype
in
theano
.
tensor
.
integer_dtypes
assert
i
==
int
(
i
)
assert
i
==
int
(
i
)
i
=
int
(
i
)
i
=
int
(
i
)
...
@@ -665,11 +665,11 @@ class Rebroadcast(gof.Op):
...
@@ -665,11 +665,11 @@ class Rebroadcast(gof.Op):
items
=
sorted
(
axis
)
items
=
sorted
(
axis
)
self
.
axis
=
OrderedDict
(
items
)
self
.
axis
=
OrderedDict
(
items
)
for
axis
,
broad
in
iteritems
(
self
.
axis
):
for
axis
,
broad
in
iteritems
(
self
.
axis
):
if
not
isinstance
(
axis
,
(
n
umpy
.
integer
,
integer_types
)):
if
not
isinstance
(
axis
,
(
n
p
.
integer
,
integer_types
)):
raise
TypeError
(
"Rebroadcast needs integer axes. "
raise
TypeError
(
"Rebroadcast needs integer axes. "
"Got {}"
.
format
(
axis
))
"Got {}"
.
format
(
axis
))
if
not
isinstance
(
broad
,
(
n
umpy
.
bool_
,
bool
)):
if
not
isinstance
(
broad
,
(
n
p
.
bool_
,
bool
)):
raise
TypeError
(
"Rebroadcast needs bool for new broadcast "
raise
TypeError
(
"Rebroadcast needs bool for new broadcast "
"pattern. Got {}"
.
format
(
broad
))
"pattern. Got {}"
.
format
(
broad
))
...
@@ -835,8 +835,8 @@ class SpecifyShape(gof.Op):
...
@@ -835,8 +835,8 @@ class SpecifyShape(gof.Op):
x
,
shape
=
inp
x
,
shape
=
inp
out
,
=
out_
out
,
=
out_
assert
x
.
ndim
==
shape
.
size
assert
x
.
ndim
==
shape
.
size
assert
n
umpy
.
all
(
x
.
shape
==
shape
),
(
"got shape"
,
x
.
shape
,
assert
n
p
.
all
(
x
.
shape
==
shape
),
(
"got shape"
,
x
.
shape
,
"expected"
,
shape
)
"expected"
,
shape
)
out
[
0
]
=
x
out
[
0
]
=
x
def
infer_shape
(
self
,
node
,
shapes
):
def
infer_shape
(
self
,
node
,
shapes
):
...
...
theano/compile/profiling.py
浏览文件 @
ccf6deb0
...
@@ -27,7 +27,7 @@ import sys
...
@@ -27,7 +27,7 @@ import sys
import
time
import
time
from
collections
import
defaultdict
from
collections
import
defaultdict
import
numpy
import
numpy
as
np
import
theano
import
theano
from
six
import
iteritems
from
six
import
iteritems
...
@@ -477,7 +477,7 @@ class ProfileStats(object):
...
@@ -477,7 +477,7 @@ class ProfileStats(object):
hs
+=
[
'<#apply>'
]
hs
+=
[
'<#apply>'
]
es
+=
[
'
%4
d '
]
es
+=
[
'
%4
d '
]
upto_length
=
n
umpy
.
sum
([
len
(
x
)
for
x
in
hs
])
+
len
(
hs
)
upto_length
=
n
p
.
sum
([
len
(
x
)
for
x
in
hs
])
+
len
(
hs
)
maxlen
=
max
(
self
.
line_width
-
upto_length
,
0
)
maxlen
=
max
(
self
.
line_width
-
upto_length
,
0
)
hs
+=
[
'<Class name>'
]
hs
+=
[
'<Class name>'
]
es
+=
[
'
%
s'
]
es
+=
[
'
%
s'
]
...
@@ -559,7 +559,7 @@ class ProfileStats(object):
...
@@ -559,7 +559,7 @@ class ProfileStats(object):
hs
+=
[
'<#apply>'
]
hs
+=
[
'<#apply>'
]
es
+=
[
'
%4
d '
]
es
+=
[
'
%4
d '
]
upto_length
=
n
umpy
.
sum
([
len
(
x
)
for
x
in
hs
])
+
len
(
hs
)
upto_length
=
n
p
.
sum
([
len
(
x
)
for
x
in
hs
])
+
len
(
hs
)
maxlen
=
max
(
self
.
line_width
-
upto_length
,
0
)
maxlen
=
max
(
self
.
line_width
-
upto_length
,
0
)
hs
+=
[
'<Op name>'
]
hs
+=
[
'<Op name>'
]
es
+=
[
'
%
s'
]
es
+=
[
'
%
s'
]
...
@@ -627,7 +627,7 @@ class ProfileStats(object):
...
@@ -627,7 +627,7 @@ class ProfileStats(object):
if
self
.
variable_shape
:
if
self
.
variable_shape
:
hs
+=
[
'<Mflops>'
,
'<Gflops/s>'
]
hs
+=
[
'<Mflops>'
,
'<Gflops/s>'
]
upto_length
=
n
umpy
.
sum
([
len
(
x
)
for
x
in
hs
])
+
len
(
hs
)
upto_length
=
n
p
.
sum
([
len
(
x
)
for
x
in
hs
])
+
len
(
hs
)
maxlen
=
max
(
self
.
line_width
-
upto_length
,
0
)
maxlen
=
max
(
self
.
line_width
-
upto_length
,
0
)
hs
+=
[
'<Apply name>'
]
hs
+=
[
'<Apply name>'
]
es
+=
[
'
%
s'
]
es
+=
[
'
%
s'
]
...
@@ -929,7 +929,7 @@ class ProfileStats(object):
...
@@ -929,7 +929,7 @@ class ProfileStats(object):
node_list
=
list
(
node_list
)
node_list
=
list
(
node_list
)
mem_count
=
0
mem_count
=
0
max_mem_count
=
0
max_mem_count
=
0
mem_bound
=
n
umpy
.
inf
mem_bound
=
n
p
.
inf
# This take only the inputs/outputs dependencies.
# This take only the inputs/outputs dependencies.
dependencies
=
fgraph
.
profile
.
dependencies
dependencies
=
fgraph
.
profile
.
dependencies
done_set
=
set
([])
done_set
=
set
([])
...
...
theano/compile/sharedvalue.py
浏览文件 @
ccf6deb0
...
@@ -9,7 +9,7 @@ import copy
...
@@ -9,7 +9,7 @@ import copy
import
logging
import
logging
# Third-party imports
# Third-party imports
import
numpy
import
numpy
as
np
# Theano imports
# Theano imports
from
theano.gof
import
Container
,
Variable
,
generic
,
utils
from
theano.gof
import
Container
,
Variable
,
generic
,
utils
...
@@ -187,7 +187,7 @@ class SharedVariable(Variable):
...
@@ -187,7 +187,7 @@ class SharedVariable(Variable):
# implemented at all, but with a more explicit error message to help
# implemented at all, but with a more explicit error message to help
# Theano users figure out the root of the problem more easily.
# Theano users figure out the root of the problem more easily.
value
=
self
.
get_value
(
borrow
=
True
)
value
=
self
.
get_value
(
borrow
=
True
)
if
isinstance
(
value
,
n
umpy
.
ndarray
):
if
isinstance
(
value
,
n
p
.
ndarray
):
# Array probably had an unknown dtype.
# Array probably had an unknown dtype.
msg
=
(
"a Numpy array with dtype: '
%
s'. This data type is not "
msg
=
(
"a Numpy array with dtype: '
%
s'. This data type is not "
"currently recognized by Theano tensors: please cast "
"currently recognized by Theano tensors: please cast "
...
...
theano/compile/tests/test_builders.py
浏览文件 @
ccf6deb0
from
__future__
import
absolute_import
,
print_function
,
division
from
__future__
import
absolute_import
,
print_function
,
division
import
numpy
import
numpy
as
np
from
theano
import
config
,
shared
from
theano
import
config
,
shared
...
@@ -23,14 +23,14 @@ class T_OpFromGraph(unittest_tools.InferShapeTester):
...
@@ -23,14 +23,14 @@ class T_OpFromGraph(unittest_tools.InferShapeTester):
f
=
op
(
x
,
y
,
z
)
-
op
(
y
,
z
,
x
)
f
=
op
(
x
,
y
,
z
)
-
op
(
y
,
z
,
x
)
fn
=
function
([
x
,
y
,
z
],
f
)
fn
=
function
([
x
,
y
,
z
],
f
)
xv
=
n
umpy
.
ones
((
2
,
2
),
dtype
=
config
.
floatX
)
xv
=
n
p
.
ones
((
2
,
2
),
dtype
=
config
.
floatX
)
yv
=
n
umpy
.
ones
((
2
,
2
),
dtype
=
config
.
floatX
)
*
3
yv
=
n
p
.
ones
((
2
,
2
),
dtype
=
config
.
floatX
)
*
3
zv
=
n
umpy
.
ones
((
2
,
2
),
dtype
=
config
.
floatX
)
*
5
zv
=
n
p
.
ones
((
2
,
2
),
dtype
=
config
.
floatX
)
*
5
# print function, function.__module__
# print function, function.__module__
# print fn.maker.fgraph.toposort()
# print fn.maker.fgraph.toposort()
fn
(
xv
,
yv
,
zv
)
fn
(
xv
,
yv
,
zv
)
assert
n
umpy
.
all
(
8.0
==
fn
(
xv
,
yv
,
zv
))
assert
n
p
.
all
(
8.0
==
fn
(
xv
,
yv
,
zv
))
assert
n
umpy
.
all
(
8.0
==
fn
(
xv
,
yv
,
zv
))
assert
n
p
.
all
(
8.0
==
fn
(
xv
,
yv
,
zv
))
def
test_size_changes
(
self
):
def
test_size_changes
(
self
):
x
,
y
,
z
=
T
.
matrices
(
'xyz'
)
x
,
y
,
z
=
T
.
matrices
(
'xyz'
)
...
@@ -38,15 +38,15 @@ class T_OpFromGraph(unittest_tools.InferShapeTester):
...
@@ -38,15 +38,15 @@ class T_OpFromGraph(unittest_tools.InferShapeTester):
op
=
OpFromGraph
([
x
,
y
],
[
e
])
op
=
OpFromGraph
([
x
,
y
],
[
e
])
f
=
op
(
x
,
op
(
y
,
z
))
f
=
op
(
x
,
op
(
y
,
z
))
fn
=
function
([
x
,
y
,
z
],
f
)
fn
=
function
([
x
,
y
,
z
],
f
)
xv
=
n
umpy
.
ones
((
2
,
3
),
dtype
=
config
.
floatX
)
xv
=
n
p
.
ones
((
2
,
3
),
dtype
=
config
.
floatX
)
yv
=
n
umpy
.
ones
((
3
,
4
),
dtype
=
config
.
floatX
)
*
3
yv
=
n
p
.
ones
((
3
,
4
),
dtype
=
config
.
floatX
)
*
3
zv
=
n
umpy
.
ones
((
4
,
5
),
dtype
=
config
.
floatX
)
*
5
zv
=
n
p
.
ones
((
4
,
5
),
dtype
=
config
.
floatX
)
*
5
res
=
fn
(
xv
,
yv
,
zv
)
res
=
fn
(
xv
,
yv
,
zv
)
assert
res
.
shape
==
(
2
,
5
)
assert
res
.
shape
==
(
2
,
5
)
assert
n
umpy
.
all
(
180.0
==
res
)
assert
n
p
.
all
(
180.0
==
res
)
res
=
fn
(
xv
,
yv
,
zv
)
res
=
fn
(
xv
,
yv
,
zv
)
assert
res
.
shape
==
(
2
,
5
)
assert
res
.
shape
==
(
2
,
5
)
assert
n
umpy
.
all
(
180.0
==
res
)
assert
n
p
.
all
(
180.0
==
res
)
def
test_grad
(
self
):
def
test_grad
(
self
):
x
,
y
,
z
=
T
.
matrices
(
'xyz'
)
x
,
y
,
z
=
T
.
matrices
(
'xyz'
)
...
@@ -55,10 +55,10 @@ class T_OpFromGraph(unittest_tools.InferShapeTester):
...
@@ -55,10 +55,10 @@ class T_OpFromGraph(unittest_tools.InferShapeTester):
f
=
op
(
x
,
y
,
z
)
f
=
op
(
x
,
y
,
z
)
f
=
f
-
T
.
grad
(
T
.
sum
(
f
),
y
)
f
=
f
-
T
.
grad
(
T
.
sum
(
f
),
y
)
fn
=
function
([
x
,
y
,
z
],
f
)
fn
=
function
([
x
,
y
,
z
],
f
)
xv
=
n
umpy
.
ones
((
2
,
2
),
dtype
=
config
.
floatX
)
xv
=
n
p
.
ones
((
2
,
2
),
dtype
=
config
.
floatX
)
yv
=
n
umpy
.
ones
((
2
,
2
),
dtype
=
config
.
floatX
)
*
3
yv
=
n
p
.
ones
((
2
,
2
),
dtype
=
config
.
floatX
)
*
3
zv
=
n
umpy
.
ones
((
2
,
2
),
dtype
=
config
.
floatX
)
*
5
zv
=
n
p
.
ones
((
2
,
2
),
dtype
=
config
.
floatX
)
*
5
assert
n
umpy
.
all
(
11.0
==
fn
(
xv
,
yv
,
zv
))
assert
n
p
.
all
(
11.0
==
fn
(
xv
,
yv
,
zv
))
def
test_grad_grad
(
self
):
def
test_grad_grad
(
self
):
x
,
y
,
z
=
T
.
matrices
(
'xyz'
)
x
,
y
,
z
=
T
.
matrices
(
'xyz'
)
...
@@ -68,47 +68,47 @@ class T_OpFromGraph(unittest_tools.InferShapeTester):
...
@@ -68,47 +68,47 @@ class T_OpFromGraph(unittest_tools.InferShapeTester):
f
=
f
-
T
.
grad
(
T
.
sum
(
f
),
y
)
f
=
f
-
T
.
grad
(
T
.
sum
(
f
),
y
)
f
=
f
-
T
.
grad
(
T
.
sum
(
f
),
y
)
f
=
f
-
T
.
grad
(
T
.
sum
(
f
),
y
)
fn
=
function
([
x
,
y
,
z
],
f
)
fn
=
function
([
x
,
y
,
z
],
f
)
xv
=
n
umpy
.
ones
((
2
,
2
),
dtype
=
config
.
floatX
)
xv
=
n
p
.
ones
((
2
,
2
),
dtype
=
config
.
floatX
)
yv
=
n
umpy
.
ones
((
2
,
2
),
dtype
=
config
.
floatX
)
*
3
yv
=
n
p
.
ones
((
2
,
2
),
dtype
=
config
.
floatX
)
*
3
zv
=
n
umpy
.
ones
((
2
,
2
),
dtype
=
config
.
floatX
)
*
5
zv
=
n
p
.
ones
((
2
,
2
),
dtype
=
config
.
floatX
)
*
5
assert
n
umpy
.
allclose
(
6.0
,
fn
(
xv
,
yv
,
zv
))
assert
n
p
.
allclose
(
6.0
,
fn
(
xv
,
yv
,
zv
))
def
test_shared
(
self
):
def
test_shared
(
self
):
x
,
y
,
z
=
T
.
matrices
(
'xyz'
)
x
,
y
,
z
=
T
.
matrices
(
'xyz'
)
s
=
shared
(
n
umpy
.
random
.
rand
(
2
,
2
)
.
astype
(
config
.
floatX
))
s
=
shared
(
n
p
.
random
.
rand
(
2
,
2
)
.
astype
(
config
.
floatX
))
e
=
x
+
y
*
z
+
s
e
=
x
+
y
*
z
+
s
op
=
OpFromGraph
([
x
,
y
,
z
],
[
e
])
op
=
OpFromGraph
([
x
,
y
,
z
],
[
e
])
# (1+3*5=array of 16) - (3+1*5=array of 8)
# (1+3*5=array of 16) - (3+1*5=array of 8)
f
=
op
(
x
,
y
,
z
)
-
op
(
y
,
z
,
x
)
f
=
op
(
x
,
y
,
z
)
-
op
(
y
,
z
,
x
)
fn
=
function
([
x
,
y
,
z
],
f
)
fn
=
function
([
x
,
y
,
z
],
f
)
xv
=
n
umpy
.
ones
((
2
,
2
),
dtype
=
config
.
floatX
)
xv
=
n
p
.
ones
((
2
,
2
),
dtype
=
config
.
floatX
)
yv
=
n
umpy
.
ones
((
2
,
2
),
dtype
=
config
.
floatX
)
*
3
yv
=
n
p
.
ones
((
2
,
2
),
dtype
=
config
.
floatX
)
*
3
zv
=
n
umpy
.
ones
((
2
,
2
),
dtype
=
config
.
floatX
)
*
5
zv
=
n
p
.
ones
((
2
,
2
),
dtype
=
config
.
floatX
)
*
5
# print function, function.__module__
# print function, function.__module__
# print fn.maker.fgraph.toposort()
# print fn.maker.fgraph.toposort()
assert
n
umpy
.
allclose
(
8.0
,
fn
(
xv
,
yv
,
zv
))
assert
n
p
.
allclose
(
8.0
,
fn
(
xv
,
yv
,
zv
))
assert
n
umpy
.
allclose
(
8.0
,
fn
(
xv
,
yv
,
zv
))
assert
n
p
.
allclose
(
8.0
,
fn
(
xv
,
yv
,
zv
))
def
test_shared_grad
(
self
):
def
test_shared_grad
(
self
):
x
,
y
,
z
=
T
.
matrices
(
'xyz'
)
x
,
y
,
z
=
T
.
matrices
(
'xyz'
)
s
=
shared
(
n
umpy
.
random
.
rand
(
2
,
2
)
.
astype
(
config
.
floatX
))
s
=
shared
(
n
p
.
random
.
rand
(
2
,
2
)
.
astype
(
config
.
floatX
))
e
=
x
+
y
*
z
+
s
e
=
x
+
y
*
z
+
s
op
=
OpFromGraph
([
x
,
y
,
z
],
[
e
])
op
=
OpFromGraph
([
x
,
y
,
z
],
[
e
])
f
=
op
(
x
,
y
,
z
)
f
=
op
(
x
,
y
,
z
)
f
=
f
-
T
.
grad
(
T
.
sum
(
f
),
y
)
f
=
f
-
T
.
grad
(
T
.
sum
(
f
),
y
)
fn
=
function
([
x
,
y
,
z
],
f
)
fn
=
function
([
x
,
y
,
z
],
f
)
xv
=
n
umpy
.
ones
((
2
,
2
),
dtype
=
config
.
floatX
)
xv
=
n
p
.
ones
((
2
,
2
),
dtype
=
config
.
floatX
)
yv
=
n
umpy
.
ones
((
2
,
2
),
dtype
=
config
.
floatX
)
*
3
yv
=
n
p
.
ones
((
2
,
2
),
dtype
=
config
.
floatX
)
*
3
zv
=
n
umpy
.
ones
((
2
,
2
),
dtype
=
config
.
floatX
)
*
5
zv
=
n
p
.
ones
((
2
,
2
),
dtype
=
config
.
floatX
)
*
5
assert
n
umpy
.
allclose
(
11.0
+
s
.
get_value
(),
fn
(
xv
,
yv
,
zv
))
assert
n
p
.
allclose
(
11.0
+
s
.
get_value
(),
fn
(
xv
,
yv
,
zv
))
# grad again the shared variable
# grad again the shared variable
f
=
op
(
x
,
y
,
z
)
f
=
op
(
x
,
y
,
z
)
f
=
f
-
T
.
grad
(
T
.
sum
(
f
),
s
)
f
=
f
-
T
.
grad
(
T
.
sum
(
f
),
s
)
fn
=
function
([
x
,
y
,
z
],
f
)
fn
=
function
([
x
,
y
,
z
],
f
)
assert
n
umpy
.
allclose
(
15.0
+
s
.
get_value
(),
assert
n
p
.
allclose
(
15.0
+
s
.
get_value
(),
fn
(
xv
,
yv
,
zv
))
fn
(
xv
,
yv
,
zv
))
def
test_connection_pattern
(
self
):
def
test_connection_pattern
(
self
):
# Basic case
# Basic case
...
@@ -163,6 +163,6 @@ class T_OpFromGraph(unittest_tools.InferShapeTester):
...
@@ -163,6 +163,6 @@ class T_OpFromGraph(unittest_tools.InferShapeTester):
p
=
T
.
matrix
(
'p'
)
p
=
T
.
matrix
(
'p'
)
self
.
_compile_and_check
([
q
,
p
],
self
.
_compile_and_check
([
q
,
p
],
op_graph
(
q
,
p
),
op_graph
(
q
,
p
),
[
n
umpy
.
ones
([
3
,
4
],
dtype
=
config
.
floatX
),
[
n
p
.
ones
([
3
,
4
],
dtype
=
config
.
floatX
),
n
umpy
.
ones
([
3
,
4
],
dtype
=
config
.
floatX
)],
n
p
.
ones
([
3
,
4
],
dtype
=
config
.
floatX
)],
OpFromGraph
)
OpFromGraph
)
theano/compile/tests/test_debugmode.py
浏览文件 @
ccf6deb0
...
@@ -2,7 +2,7 @@ from __future__ import absolute_import, print_function, division
...
@@ -2,7 +2,7 @@ from __future__ import absolute_import, print_function, division
from
nose.plugins.skip
import
SkipTest
from
nose.plugins.skip
import
SkipTest
import
unittest
import
unittest
import
numpy
import
numpy
as
np
from
theano
import
config
from
theano
import
config
from
theano
import
gof
from
theano
import
gof
...
@@ -316,7 +316,7 @@ def test_just_c_code():
...
@@ -316,7 +316,7 @@ def test_just_c_code():
x
=
theano
.
tensor
.
dvector
()
x
=
theano
.
tensor
.
dvector
()
f
=
theano
.
function
([
x
],
wb2
(
x
),
f
=
theano
.
function
([
x
],
wb2
(
x
),
mode
=
debugmode
.
DebugMode
(
check_py_code
=
False
))
mode
=
debugmode
.
DebugMode
(
check_py_code
=
False
))
assert
n
umpy
.
all
(
f
([
1
,
2
])
==
[
2
,
4
])
assert
n
p
.
all
(
f
([
1
,
2
])
==
[
2
,
4
])
def
test_baddestroymap
():
def
test_baddestroymap
():
...
@@ -349,7 +349,7 @@ def test_baddestroymap_c():
...
@@ -349,7 +349,7 @@ def test_baddestroymap_c():
f
=
theano
.
function
([
x
],
wb2i
(
x
),
f
=
theano
.
function
([
x
],
wb2i
(
x
),
mode
=
debugmode
.
DebugMode
(
check_py_code
=
False
))
mode
=
debugmode
.
DebugMode
(
check_py_code
=
False
))
try
:
try
:
assert
n
umpy
.
all
(
f
([
1
,
2
])
==
[
2
,
4
])
assert
n
p
.
all
(
f
([
1
,
2
])
==
[
2
,
4
])
assert
False
# failed to raise error
assert
False
# failed to raise error
except
debugmode
.
BadDestroyMap
:
except
debugmode
.
BadDestroyMap
:
pass
pass
...
@@ -445,8 +445,8 @@ class Test_ViewMap(unittest.TestCase):
...
@@ -445,8 +445,8 @@ class Test_ViewMap(unittest.TestCase):
r0
,
r1
=
f
([
1
,
2
,
3
,
4
],
[
5
,
6
,
7
,
8
])
r0
,
r1
=
f
([
1
,
2
,
3
,
4
],
[
5
,
6
,
7
,
8
])
assert
n
umpy
.
all
(
r0
==
[
1
,
2
,
3
,
4
])
assert
n
p
.
all
(
r0
==
[
1
,
2
,
3
,
4
])
assert
n
umpy
.
all
(
r1
==
[
2
,
3
,
4
])
assert
n
p
.
all
(
r1
==
[
2
,
3
,
4
])
def
test_aliased_outputs_ok_output
(
self
):
def
test_aliased_outputs_ok_output
(
self
):
# here aliased outputs is ok because they are both outputs of the
# here aliased outputs is ok because they are both outputs of the
...
@@ -470,8 +470,8 @@ class Test_ViewMap(unittest.TestCase):
...
@@ -470,8 +470,8 @@ class Test_ViewMap(unittest.TestCase):
r0
,
r1
=
f
([
1
,
2
,
3
,
4
],
[
5
,
6
,
7
,
8
])
r0
,
r1
=
f
([
1
,
2
,
3
,
4
],
[
5
,
6
,
7
,
8
])
assert
n
umpy
.
all
(
r0
==
[
2
,
4
,
6
,
8
])
assert
n
p
.
all
(
r0
==
[
2
,
4
,
6
,
8
])
assert
n
umpy
.
all
(
r1
==
[
4
,
6
,
8
])
assert
n
p
.
all
(
r1
==
[
4
,
6
,
8
])
def
test_aliased_outputs_ok_shadow
(
self
):
def
test_aliased_outputs_ok_shadow
(
self
):
# here the alias between outputs is ok because one of them is not used
# here the alias between outputs is ok because one of them is not used
...
@@ -496,7 +496,7 @@ class Test_ViewMap(unittest.TestCase):
...
@@ -496,7 +496,7 @@ class Test_ViewMap(unittest.TestCase):
r0
=
f
([
1
,
2
,
3
,
4
],
[
5
,
6
,
7
,
8
])
r0
=
f
([
1
,
2
,
3
,
4
],
[
5
,
6
,
7
,
8
])
assert
n
umpy
.
all
(
r0
==
[
2
,
4
,
6
,
8
])
assert
n
p
.
all
(
r0
==
[
2
,
4
,
6
,
8
])
def
test_aliased_outputs_bad
(
self
):
def
test_aliased_outputs_bad
(
self
):
# here the alias between outputs is not ok because destroying one
# here the alias between outputs is not ok because destroying one
...
@@ -555,31 +555,31 @@ class Test_check_isfinite(unittest.TestCase):
...
@@ -555,31 +555,31 @@ class Test_check_isfinite(unittest.TestCase):
g
=
theano
.
function
([
x
],
theano
.
tensor
.
log
(
x
),
mode
=
'DEBUG_MODE'
)
g
=
theano
.
function
([
x
],
theano
.
tensor
.
log
(
x
),
mode
=
'DEBUG_MODE'
)
# this should work
# this should work
f
(
n
umpy
.
log
([
3
,
4
,
5
])
.
astype
(
config
.
floatX
))
f
(
n
p
.
log
([
3
,
4
,
5
])
.
astype
(
config
.
floatX
))
# if TensorType.filter_checks_isfinite were true, these would raise
# if TensorType.filter_checks_isfinite were true, these would raise
# ValueError
# ValueError
# if not, DebugMode will check internally, and raise InvalidValueError
# if not, DebugMode will check internally, and raise InvalidValueError
# passing an invalid value as an input should trigger ValueError
# passing an invalid value as an input should trigger ValueError
self
.
assertRaises
(
debugmode
.
InvalidValueError
,
f
,
self
.
assertRaises
(
debugmode
.
InvalidValueError
,
f
,
n
umpy
.
log
([
3
,
-
4
,
5
])
.
astype
(
config
.
floatX
))
n
p
.
log
([
3
,
-
4
,
5
])
.
astype
(
config
.
floatX
))
self
.
assertRaises
(
debugmode
.
InvalidValueError
,
f
,
self
.
assertRaises
(
debugmode
.
InvalidValueError
,
f
,
(
n
umpy
.
asarray
([
0
,
1.0
,
0
])
/
0
)
.
astype
(
config
.
floatX
))
(
n
p
.
asarray
([
0
,
1.0
,
0
])
/
0
)
.
astype
(
config
.
floatX
))
self
.
assertRaises
(
debugmode
.
InvalidValueError
,
f
,
self
.
assertRaises
(
debugmode
.
InvalidValueError
,
f
,
(
n
umpy
.
asarray
([
1.0
,
1.0
,
1.0
])
/
0
)
.
astype
(
config
.
floatX
))
(
n
p
.
asarray
([
1.0
,
1.0
,
1.0
])
/
0
)
.
astype
(
config
.
floatX
))
# generating an invalid value internally should trigger
# generating an invalid value internally should trigger
# InvalidValueError
# InvalidValueError
self
.
assertRaises
(
debugmode
.
InvalidValueError
,
g
,
self
.
assertRaises
(
debugmode
.
InvalidValueError
,
g
,
n
umpy
.
asarray
([
3
,
-
4
,
5
],
dtype
=
config
.
floatX
))
n
p
.
asarray
([
3
,
-
4
,
5
],
dtype
=
config
.
floatX
))
# this should disable the exception
# this should disable the exception
theano
.
tensor
.
TensorType
.
filter_checks_isfinite
=
False
theano
.
tensor
.
TensorType
.
filter_checks_isfinite
=
False
theano
.
compile
.
mode
.
predefined_modes
[
theano
.
compile
.
mode
.
predefined_modes
[
'DEBUG_MODE'
]
.
check_isfinite
=
False
'DEBUG_MODE'
]
.
check_isfinite
=
False
# insert several Inf
# insert several Inf
f
(
n
umpy
.
asarray
(
numpy
.
asarray
([
1.0
,
1.0
,
1.0
])
/
0
,
f
(
n
p
.
asarray
(
np
.
asarray
([
1.0
,
1.0
,
1.0
])
/
0
,
dtype
=
config
.
floatX
))
dtype
=
config
.
floatX
))
def
test_check_isfinite_disabled
(
self
):
def
test_check_isfinite_disabled
(
self
):
x
=
theano
.
tensor
.
dvector
()
x
=
theano
.
tensor
.
dvector
()
...
@@ -587,10 +587,10 @@ class Test_check_isfinite(unittest.TestCase):
...
@@ -587,10 +587,10 @@ class Test_check_isfinite(unittest.TestCase):
mode
=
debugmode
.
DebugMode
(
check_isfinite
=
False
))
mode
=
debugmode
.
DebugMode
(
check_isfinite
=
False
))
# nan should go through
# nan should go through
f
(
n
umpy
.
log
([
3
,
-
4
,
5
]))
f
(
n
p
.
log
([
3
,
-
4
,
5
]))
# inf should go through
# inf should go through
infs
=
n
umpy
.
asarray
([
1.0
,
1.
,
1.
])
/
0
infs
=
n
p
.
asarray
([
1.0
,
1.
,
1.
])
/
0
# print infs
# print infs
f
(
infs
)
f
(
infs
)
return
return
...
@@ -721,14 +721,14 @@ class VecAsRowAndCol(gof.Op):
...
@@ -721,14 +721,14 @@ class VecAsRowAndCol(gof.Op):
class
Test_preallocated_output
(
unittest
.
TestCase
):
class
Test_preallocated_output
(
unittest
.
TestCase
):
def
setUp
(
self
):
def
setUp
(
self
):
self
.
rng
=
n
umpy
.
random
.
RandomState
(
seed
=
utt
.
fetch_seed
())
self
.
rng
=
n
p
.
random
.
RandomState
(
seed
=
utt
.
fetch_seed
())
def
test_f_contiguous
(
self
):
def
test_f_contiguous
(
self
):
a
=
theano
.
tensor
.
fmatrix
(
'a'
)
a
=
theano
.
tensor
.
fmatrix
(
'a'
)
b
=
theano
.
tensor
.
fmatrix
(
'b'
)
b
=
theano
.
tensor
.
fmatrix
(
'b'
)
z
=
BrokenCImplementationAdd
()(
a
,
b
)
z
=
BrokenCImplementationAdd
()(
a
,
b
)
# In this test, we do not want z to be an output of the graph.
# In this test, we do not want z to be an output of the graph.
out
=
theano
.
tensor
.
dot
(
z
,
n
umpy
.
eye
(
7
))
out
=
theano
.
tensor
.
dot
(
z
,
n
p
.
eye
(
7
))
a_val
=
self
.
rng
.
randn
(
7
,
7
)
.
astype
(
'float32'
)
a_val
=
self
.
rng
.
randn
(
7
,
7
)
.
astype
(
'float32'
)
b_val
=
self
.
rng
.
randn
(
7
,
7
)
.
astype
(
'float32'
)
b_val
=
self
.
rng
.
randn
(
7
,
7
)
.
astype
(
'float32'
)
...
...
theano/compile/tests/test_function.py
浏览文件 @
ccf6deb0
...
@@ -5,7 +5,7 @@ import shutil
...
@@ -5,7 +5,7 @@ import shutil
import
tempfile
import
tempfile
import
unittest
import
unittest
import
numpy
import
numpy
as
np
import
theano
import
theano
from
theano.compile.io
import
In
from
theano.compile.io
import
In
...
@@ -27,7 +27,7 @@ def test_function_dump():
...
@@ -27,7 +27,7 @@ def test_function_dump():
fct2
=
theano
.
function
(
**
l
)
fct2
=
theano
.
function
(
**
l
)
x
=
[
1
,
2
,
3
]
x
=
[
1
,
2
,
3
]
assert
n
umpy
.
allclose
(
fct1
(
x
),
fct2
(
x
))
assert
n
p
.
allclose
(
fct1
(
x
),
fct2
(
x
))
class
TestFunctionIn
(
unittest
.
TestCase
):
class
TestFunctionIn
(
unittest
.
TestCase
):
...
@@ -40,14 +40,14 @@ class TestFunctionIn(unittest.TestCase):
...
@@ -40,14 +40,14 @@ class TestFunctionIn(unittest.TestCase):
f
=
theano
.
function
([
In
(
a
,
strict
=
False
)],
out
)
f
=
theano
.
function
([
In
(
a
,
strict
=
False
)],
out
)
# works, rand generates float64 by default
# works, rand generates float64 by default
f
(
n
umpy
.
random
.
rand
(
8
))
f
(
n
p
.
random
.
rand
(
8
))
# works, casting is allowed
# works, casting is allowed
f
(
n
umpy
.
array
([
1
,
2
,
3
,
4
],
dtype
=
'int32'
))
f
(
n
p
.
array
([
1
,
2
,
3
,
4
],
dtype
=
'int32'
))
f
=
theano
.
function
([
In
(
a
,
strict
=
True
)],
out
)
f
=
theano
.
function
([
In
(
a
,
strict
=
True
)],
out
)
try
:
try
:
# fails, f expects float64
# fails, f expects float64
f
(
n
umpy
.
array
([
1
,
2
,
3
,
4
],
dtype
=
'int32'
))
f
(
n
p
.
array
([
1
,
2
,
3
,
4
],
dtype
=
'int32'
))
except
TypeError
:
except
TypeError
:
pass
pass
...
@@ -70,17 +70,17 @@ class TestFunctionIn(unittest.TestCase):
...
@@ -70,17 +70,17 @@ class TestFunctionIn(unittest.TestCase):
# using mutable=True will let f change the value in aval
# using mutable=True will let f change the value in aval
f
=
theano
.
function
([
In
(
a
,
mutable
=
True
)],
a_out
,
mode
=
'FAST_RUN'
)
f
=
theano
.
function
([
In
(
a
,
mutable
=
True
)],
a_out
,
mode
=
'FAST_RUN'
)
aval
=
n
umpy
.
random
.
rand
(
10
)
aval
=
n
p
.
random
.
rand
(
10
)
aval2
=
aval
.
copy
()
aval2
=
aval
.
copy
()
assert
n
umpy
.
all
(
f
(
aval
)
==
(
aval2
*
2
))
assert
n
p
.
all
(
f
(
aval
)
==
(
aval2
*
2
))
assert
not
n
umpy
.
all
(
aval
==
aval2
)
assert
not
n
p
.
all
(
aval
==
aval2
)
# using mutable=False should leave the input untouched
# using mutable=False should leave the input untouched
f
=
theano
.
function
([
In
(
a
,
mutable
=
False
)],
a_out
,
mode
=
'FAST_RUN'
)
f
=
theano
.
function
([
In
(
a
,
mutable
=
False
)],
a_out
,
mode
=
'FAST_RUN'
)
aval
=
n
umpy
.
random
.
rand
(
10
)
aval
=
n
p
.
random
.
rand
(
10
)
aval2
=
aval
.
copy
()
aval2
=
aval
.
copy
()
assert
n
umpy
.
all
(
f
(
aval
)
==
(
aval2
*
2
))
assert
n
p
.
all
(
f
(
aval
)
==
(
aval2
*
2
))
assert
n
umpy
.
all
(
aval
==
aval2
)
assert
n
p
.
all
(
aval
==
aval2
)
def
test_in_update
(
self
):
def
test_in_update
(
self
):
a
=
theano
.
tensor
.
dscalar
(
'a'
)
a
=
theano
.
tensor
.
dscalar
(
'a'
)
...
@@ -115,7 +115,7 @@ class TestFunctionIn(unittest.TestCase):
...
@@ -115,7 +115,7 @@ class TestFunctionIn(unittest.TestCase):
# changes occur at the same time and one doesn't overwrite the other.
# changes occur at the same time and one doesn't overwrite the other.
for
i
in
range
(
5
):
for
i
in
range
(
5
):
f
()
f
()
assert
n
umpy
.
allclose
(
shared_var
.
get_value
(),
i
%
2
)
assert
n
p
.
allclose
(
shared_var
.
get_value
(),
i
%
2
)
def
test_in_allow_downcast_int
(
self
):
def
test_in_allow_downcast_int
(
self
):
a
=
theano
.
tensor
.
wvector
(
'a'
)
# int16
a
=
theano
.
tensor
.
wvector
(
'a'
)
# int16
...
@@ -128,16 +128,16 @@ class TestFunctionIn(unittest.TestCase):
...
@@ -128,16 +128,16 @@ class TestFunctionIn(unittest.TestCase):
# Both values are in range. Since they're not ndarrays (but lists),
# Both values are in range. Since they're not ndarrays (but lists),
# they will be converted, and their value checked.
# they will be converted, and their value checked.
assert
n
umpy
.
all
(
f
([
3
],
[
6
],
1
)
==
10
)
assert
n
p
.
all
(
f
([
3
],
[
6
],
1
)
==
10
)
# Values are in range, but a dtype too large has explicitly been given
# Values are in range, but a dtype too large has explicitly been given
# For performance reasons, no check of the data is explicitly performed
# For performance reasons, no check of the data is explicitly performed
# (It might be OK to change this in the future.)
# (It might be OK to change this in the future.)
self
.
assertRaises
(
TypeError
,
f
,
[
3
],
n
umpy
.
array
([
6
],
dtype
=
'int16'
),
self
.
assertRaises
(
TypeError
,
f
,
[
3
],
n
p
.
array
([
6
],
dtype
=
'int16'
),
1
)
1
)
# Value too big for a, silently ignored
# Value too big for a, silently ignored
assert
n
umpy
.
all
(
f
([
2
**
20
],
numpy
.
ones
(
1
,
dtype
=
'int8'
),
1
)
==
2
)
assert
n
p
.
all
(
f
([
2
**
20
],
np
.
ones
(
1
,
dtype
=
'int8'
),
1
)
==
2
)
# Value too big for b, raises TypeError
# Value too big for b, raises TypeError
self
.
assertRaises
(
TypeError
,
f
,
[
3
],
[
312
],
1
)
self
.
assertRaises
(
TypeError
,
f
,
[
3
],
[
312
],
1
)
...
@@ -156,17 +156,17 @@ class TestFunctionIn(unittest.TestCase):
...
@@ -156,17 +156,17 @@ class TestFunctionIn(unittest.TestCase):
(
a
+
b
+
c
))
(
a
+
b
+
c
))
# If the values can be accurately represented, everything is OK
# If the values can be accurately represented, everything is OK
assert
n
umpy
.
all
(
f
(
0
,
0
,
0
)
==
0
)
assert
n
p
.
all
(
f
(
0
,
0
,
0
)
==
0
)
# If allow_downcast is True, idem
# If allow_downcast is True, idem
assert
n
umpy
.
allclose
(
f
(
0.1
,
0
,
0
),
0.1
)
assert
n
p
.
allclose
(
f
(
0.1
,
0
,
0
),
0.1
)
# If allow_downcast is False, nope
# If allow_downcast is False, nope
self
.
assertRaises
(
TypeError
,
f
,
0
,
0.1
,
0
)
self
.
assertRaises
(
TypeError
,
f
,
0
,
0.1
,
0
)
# If allow_downcast is None, it should work iff floatX=float32
# If allow_downcast is None, it should work iff floatX=float32
if
theano
.
config
.
floatX
==
'float32'
:
if
theano
.
config
.
floatX
==
'float32'
:
assert
n
umpy
.
allclose
(
f
(
0
,
0
,
0.1
),
0.1
)
assert
n
p
.
allclose
(
f
(
0
,
0
,
0.1
),
0.1
)
else
:
else
:
self
.
assertRaises
(
TypeError
,
f
,
0
,
0
,
0.1
)
self
.
assertRaises
(
TypeError
,
f
,
0
,
0
,
0.1
)
...
@@ -182,10 +182,10 @@ class TestFunctionIn(unittest.TestCase):
...
@@ -182,10 +182,10 @@ class TestFunctionIn(unittest.TestCase):
# If the values can be accurately represented, everything is OK
# If the values can be accurately represented, everything is OK
z
=
[
0
]
z
=
[
0
]
assert
n
umpy
.
all
(
f
(
z
,
z
,
z
)
==
0
)
assert
n
p
.
all
(
f
(
z
,
z
,
z
)
==
0
)
# If allow_downcast is True, idem
# If allow_downcast is True, idem
assert
n
umpy
.
allclose
(
f
([
0.1
],
z
,
z
),
0.1
)
assert
n
p
.
allclose
(
f
([
0.1
],
z
,
z
),
0.1
)
# If allow_downcast is False, nope
# If allow_downcast is False, nope
self
.
assertRaises
(
TypeError
,
f
,
z
,
[
0.1
],
z
)
self
.
assertRaises
(
TypeError
,
f
,
z
,
[
0.1
],
z
)
...
...
theano/compile/tests/test_function_module.py
浏览文件 @
ccf6deb0
from
__future__
import
absolute_import
,
print_function
,
division
from
__future__
import
absolute_import
,
print_function
,
division
import
copy
import
copy
import
six.moves.cPickle
as
pickle
import
six.moves.cPickle
as
pickle
import
numpy
import
numpy
as
np
import
unittest
import
unittest
...
@@ -18,8 +18,6 @@ from theano import tensor
...
@@ -18,8 +18,6 @@ from theano import tensor
from
theano
import
tensor
as
T
from
theano
import
tensor
as
T
import
theano
import
theano
import
numpy
as
N
def
PatternOptimizer
(
p1
,
p2
,
ign
=
True
):
def
PatternOptimizer
(
p1
,
p2
,
ign
=
True
):
return
gof
.
OpKeyOptimizer
(
gof
.
PatternSub
(
p1
,
p2
),
ignore_newtrees
=
ign
)
return
gof
.
OpKeyOptimizer
(
gof
.
PatternSub
(
p1
,
p2
),
ignore_newtrees
=
ign
)
...
@@ -281,7 +279,7 @@ class T_function(unittest.TestCase):
...
@@ -281,7 +279,7 @@ class T_function(unittest.TestCase):
def
test_swap_SharedVariable
(
self
):
def
test_swap_SharedVariable
(
self
):
i
=
T
.
iscalar
()
i
=
T
.
iscalar
()
x_list
=
theano
.
shared
(
value
=
n
umpy
.
random
.
rand
(
10
)
.
astype
(
config
.
floatX
))
x_list
=
theano
.
shared
(
value
=
n
p
.
random
.
rand
(
10
)
.
astype
(
config
.
floatX
))
x
=
T
.
scalar
(
'x'
)
x
=
T
.
scalar
(
'x'
)
# SharedVariable for tests, one of them has update
# SharedVariable for tests, one of them has update
...
@@ -343,11 +341,11 @@ class T_function(unittest.TestCase):
...
@@ -343,11 +341,11 @@ class T_function(unittest.TestCase):
A special testcase for logistic_sgd.py in Deep Learning Tutorial
A special testcase for logistic_sgd.py in Deep Learning Tutorial
This test assert that SharedVariable in different function have same storage
This test assert that SharedVariable in different function have same storage
"""
"""
train_x
=
theano
.
shared
(
value
=
n
umpy
.
random
.
rand
(
10
,
10
)
.
astype
(
config
.
floatX
))
train_x
=
theano
.
shared
(
value
=
n
p
.
random
.
rand
(
10
,
10
)
.
astype
(
config
.
floatX
))
test_x
=
theano
.
shared
(
value
=
n
umpy
.
random
.
rand
(
10
,
10
)
.
astype
(
config
.
floatX
))
test_x
=
theano
.
shared
(
value
=
n
p
.
random
.
rand
(
10
,
10
)
.
astype
(
config
.
floatX
))
train_y
=
theano
.
shared
(
value
=
n
umpy
.
random
.
rand
(
10
,
1
)
.
astype
(
config
.
floatX
))
train_y
=
theano
.
shared
(
value
=
n
p
.
random
.
rand
(
10
,
1
)
.
astype
(
config
.
floatX
))
test_y
=
theano
.
shared
(
value
=
n
umpy
.
random
.
rand
(
10
,
1
)
.
astype
(
config
.
floatX
))
test_y
=
theano
.
shared
(
value
=
n
p
.
random
.
rand
(
10
,
1
)
.
astype
(
config
.
floatX
))
i
=
T
.
iscalar
(
'index'
)
i
=
T
.
iscalar
(
'index'
)
x
=
T
.
vector
(
'x'
)
x
=
T
.
vector
(
'x'
)
...
@@ -500,42 +498,42 @@ class T_function(unittest.TestCase):
...
@@ -500,42 +498,42 @@ class T_function(unittest.TestCase):
when borrow=True is implemented.
when borrow=True is implemented.
"""
"""
a
=
T
.
dmatrix
()
a
=
T
.
dmatrix
()
aval
=
n
umpy
.
random
.
rand
(
3
,
3
)
aval
=
n
p
.
random
.
rand
(
3
,
3
)
# when borrow=False, test that a destroy map cannot alias output to input
# when borrow=False, test that a destroy map cannot alias output to input
f
=
theano
.
function
([
In
(
a
,
borrow
=
False
)],
Out
(
a
+
1
,
borrow
=
True
))
f
=
theano
.
function
([
In
(
a
,
borrow
=
False
)],
Out
(
a
+
1
,
borrow
=
True
))
assert
n
umpy
.
all
(
f
(
aval
)
==
aval
+
1
)
assert
n
p
.
all
(
f
(
aval
)
==
aval
+
1
)
assert
not
n
umpy
.
may_share_memory
(
aval
,
f
(
aval
))
assert
not
n
p
.
may_share_memory
(
aval
,
f
(
aval
))
# when borrow=False, test that a viewmap cannot alias output to input
# when borrow=False, test that a viewmap cannot alias output to input
f
=
theano
.
function
([
In
(
a
,
borrow
=
False
)],
Out
(
a
[
0
,
:],
borrow
=
True
))
f
=
theano
.
function
([
In
(
a
,
borrow
=
False
)],
Out
(
a
[
0
,
:],
borrow
=
True
))
assert
n
umpy
.
all
(
f
(
aval
)
==
aval
[
0
,
:])
assert
n
p
.
all
(
f
(
aval
)
==
aval
[
0
,
:])
assert
not
n
umpy
.
may_share_memory
(
aval
,
f
(
aval
))
assert
not
n
p
.
may_share_memory
(
aval
,
f
(
aval
))
def
test_borrow_output
(
self
):
def
test_borrow_output
(
self
):
a
=
T
.
dmatrix
()
a
=
T
.
dmatrix
()
f
=
function
([
a
],
Out
(
a
,
borrow
=
False
))
f
=
function
([
a
],
Out
(
a
,
borrow
=
False
))
o
=
N
.
ones
((
3
,
3
))
o
=
np
.
ones
((
3
,
3
))
assert
o
is
not
f
(
o
)
# function no longer permits aliasing outputs to inputs
assert
o
is
not
f
(
o
)
# function no longer permits aliasing outputs to inputs
f
=
function
([
a
],
Out
(
a
*
4
,
borrow
=
False
))
f
=
function
([
a
],
Out
(
a
*
4
,
borrow
=
False
))
o
=
N
.
ones
((
3
,
3
))
o
=
np
.
ones
((
3
,
3
))
four
=
f
(
o
)
four
=
f
(
o
)
assert
n
umpy
.
all
(
four
==
4
)
assert
n
p
.
all
(
four
==
4
)
f
(
o
+
.
1
)
# should not clobber the memory used to store four
f
(
o
+
.
1
)
# should not clobber the memory used to store four
assert
n
umpy
.
all
(
four
==
4
)
assert
n
p
.
all
(
four
==
4
)
f
=
function
([
a
],
Out
(
a
*
4
,
borrow
=
True
),
mode
=
theano
.
Mode
(
'c|py_nogc'
,
'fast_run'
))
f
=
function
([
a
],
Out
(
a
*
4
,
borrow
=
True
),
mode
=
theano
.
Mode
(
'c|py_nogc'
,
'fast_run'
))
o
=
N
.
ones
((
3
,
3
))
o
=
np
.
ones
((
3
,
3
))
four
=
f
(
o
)
four
=
f
(
o
)
assert
n
umpy
.
all
(
four
==
4
)
assert
n
p
.
all
(
four
==
4
)
f
(
o
+
.
1
)
# should clobber the memory used to store four
f
(
o
+
.
1
)
# should clobber the memory used to store four
if
theano
.
config
.
cxx
:
if
theano
.
config
.
cxx
:
assert
not
n
umpy
.
all
(
four
==
4
)
assert
not
n
p
.
all
(
four
==
4
)
else
:
else
:
# The Elemwise.perform method don't reuse memory
# The Elemwise.perform method don't reuse memory
# as some numpy version don't support that correctly.
# as some numpy version don't support that correctly.
assert
n
umpy
.
all
(
four
==
4
)
assert
n
p
.
all
(
four
==
4
)
def
test_disconnected_input
(
self
):
def
test_disconnected_input
(
self
):
a
=
T
.
scalar
(
'a'
)
a
=
T
.
scalar
(
'a'
)
...
@@ -767,7 +765,7 @@ class T_picklefunction(unittest.TestCase):
...
@@ -767,7 +765,7 @@ class T_picklefunction(unittest.TestCase):
assert
f2
.
container
[
s
]
.
storage
is
f1
.
container
[
s
]
.
storage
assert
f2
.
container
[
s
]
.
storage
is
f1
.
container
[
s
]
.
storage
# now put in a function with non-scalar
# now put in a function with non-scalar
v_value
=
n
umpy
.
asarray
([
2
,
3
,
4.
],
dtype
=
config
.
floatX
)
v_value
=
n
p
.
asarray
([
2
,
3
,
4.
],
dtype
=
config
.
floatX
)
f3
=
function
([
x
,
In
(
v
,
value
=
v_value
)],
x
+
v
)
f3
=
function
([
x
,
In
(
v
,
value
=
v_value
)],
x
+
v
)
list_of_things
.
append
(
f3
)
list_of_things
.
append
(
f3
)
...
@@ -814,13 +812,13 @@ class T_picklefunction(unittest.TestCase):
...
@@ -814,13 +812,13 @@ class T_picklefunction(unittest.TestCase):
assert
nl
[
5
](
3
)
==
ol
[
5
](
3
)
assert
nl
[
5
](
3
)
==
ol
[
5
](
3
)
assert
nl
[
4
]
.
value
[
nl
[
0
]]
==
6
assert
nl
[
4
]
.
value
[
nl
[
0
]]
==
6
assert
n
umpy
.
all
(
nl
[
6
][
nl
[
2
]]
==
numpy
.
asarray
([
2
,
3.
,
4
]))
assert
n
p
.
all
(
nl
[
6
][
nl
[
2
]]
==
np
.
asarray
([
2
,
3.
,
4
]))
def
test_broken_pickle_with_shared
(
self
):
def
test_broken_pickle_with_shared
(
self
):
saves
=
[]
saves
=
[]
def
pers_save
(
obj
):
def
pers_save
(
obj
):
if
isinstance
(
obj
,
n
umpy
.
ndarray
):
if
isinstance
(
obj
,
n
p
.
ndarray
):
saves
.
append
(
obj
)
saves
.
append
(
obj
)
return
len
(
saves
)
-
1
return
len
(
saves
)
-
1
else
:
else
:
...
@@ -829,7 +827,7 @@ class T_picklefunction(unittest.TestCase):
...
@@ -829,7 +827,7 @@ class T_picklefunction(unittest.TestCase):
def
pers_load
(
id
):
def
pers_load
(
id
):
return
saves
[
id
]
return
saves
[
id
]
b
=
n
umpy
.
random
.
rand
(
5
,
4
)
b
=
n
p
.
random
.
rand
(
5
,
4
)
x
=
theano
.
tensor
.
matrix
()
x
=
theano
.
tensor
.
matrix
()
y
=
theano
.
shared
(
b
)
y
=
theano
.
shared
(
b
)
...
...
theano/compile/tests/test_misc.py
浏览文件 @
ccf6deb0
from
__future__
import
absolute_import
,
print_function
,
division
from
__future__
import
absolute_import
,
print_function
,
division
import
numpy
import
numpy
as
np
import
unittest
import
unittest
from
theano.compile.pfunc
import
pfunc
from
theano.compile.pfunc
import
pfunc
...
@@ -20,8 +20,8 @@ class NNet(object):
...
@@ -20,8 +20,8 @@ class NNet(object):
self
.
input
=
input
self
.
input
=
input
self
.
target
=
target
self
.
target
=
target
self
.
lr
=
shared
(
lr
,
'learning_rate'
)
self
.
lr
=
shared
(
lr
,
'learning_rate'
)
self
.
w1
=
shared
(
n
umpy
.
zeros
((
n_hidden
,
n_input
)),
'w1'
)
self
.
w1
=
shared
(
n
p
.
zeros
((
n_hidden
,
n_input
)),
'w1'
)
self
.
w2
=
shared
(
n
umpy
.
zeros
((
n_output
,
n_hidden
)),
'w2'
)
self
.
w2
=
shared
(
n
p
.
zeros
((
n_output
,
n_hidden
)),
'w2'
)
# print self.lr.type
# print self.lr.type
self
.
hidden
=
sigmoid
(
tensor
.
dot
(
self
.
w1
,
self
.
input
))
self
.
hidden
=
sigmoid
(
tensor
.
dot
(
self
.
w1
,
self
.
input
))
...
@@ -45,7 +45,7 @@ class NNet(object):
...
@@ -45,7 +45,7 @@ class NNet(object):
class
TestNnet
(
unittest
.
TestCase
):
class
TestNnet
(
unittest
.
TestCase
):
def
test_nnet
(
self
):
def
test_nnet
(
self
):
rng
=
n
umpy
.
random
.
RandomState
(
1827
)
rng
=
n
p
.
random
.
RandomState
(
1827
)
data
=
rng
.
rand
(
10
,
4
)
data
=
rng
.
rand
(
10
,
4
)
nnet
=
NNet
(
n_input
=
3
,
n_hidden
=
10
)
nnet
=
NNet
(
n_input
=
3
,
n_hidden
=
10
)
for
epoch
in
range
(
3
):
for
epoch
in
range
(
3
):
...
@@ -60,4 +60,4 @@ class TestNnet(unittest.TestCase):
...
@@ -60,4 +60,4 @@ class TestNnet(unittest.TestCase):
self
.
assertTrue
(
abs
(
mean_cost
-
0.20588975452
)
<
1e-6
)
self
.
assertTrue
(
abs
(
mean_cost
-
0.20588975452
)
<
1e-6
)
# Just call functions to make sure they do not crash.
# Just call functions to make sure they do not crash.
nnet
.
compute_output
(
input
)
nnet
.
compute_output
(
input
)
nnet
.
output_from_hidden
(
n
umpy
.
ones
(
10
))
nnet
.
output_from_hidden
(
n
p
.
ones
(
10
))
theano/compile/tests/test_monitormode.py
浏览文件 @
ccf6deb0
from
__future__
import
absolute_import
,
print_function
,
division
from
__future__
import
absolute_import
,
print_function
,
division
import
numpy
import
numpy
as
np
import
theano
import
theano
...
@@ -12,7 +12,7 @@ def test_detect_nan():
...
@@ -12,7 +12,7 @@ def test_detect_nan():
def
detect_nan
(
i
,
node
,
fn
):
def
detect_nan
(
i
,
node
,
fn
):
for
output
in
fn
.
outputs
:
for
output
in
fn
.
outputs
:
if
n
umpy
.
isnan
(
output
[
0
])
.
any
():
if
n
p
.
isnan
(
output
[
0
])
.
any
():
print
(
'*** NaN detected ***'
)
print
(
'*** NaN detected ***'
)
theano
.
printing
.
debugprint
(
node
)
theano
.
printing
.
debugprint
(
node
)
print
(
'Inputs :
%
s'
%
[
input
[
0
]
for
input
in
fn
.
inputs
])
print
(
'Inputs :
%
s'
%
[
input
[
0
]
for
input
in
fn
.
inputs
])
...
@@ -36,7 +36,7 @@ def test_optimizer():
...
@@ -36,7 +36,7 @@ def test_optimizer():
def
detect_nan
(
i
,
node
,
fn
):
def
detect_nan
(
i
,
node
,
fn
):
for
output
in
fn
.
outputs
:
for
output
in
fn
.
outputs
:
if
n
umpy
.
isnan
(
output
[
0
])
.
any
():
if
n
p
.
isnan
(
output
[
0
])
.
any
():
print
(
'*** NaN detected ***'
)
print
(
'*** NaN detected ***'
)
theano
.
printing
.
debugprint
(
node
)
theano
.
printing
.
debugprint
(
node
)
print
(
'Inputs :
%
s'
%
[
input
[
0
]
for
input
in
fn
.
inputs
])
print
(
'Inputs :
%
s'
%
[
input
[
0
]
for
input
in
fn
.
inputs
])
...
@@ -65,7 +65,7 @@ def test_not_inplace():
...
@@ -65,7 +65,7 @@ def test_not_inplace():
def
detect_nan
(
i
,
node
,
fn
):
def
detect_nan
(
i
,
node
,
fn
):
for
output
in
fn
.
outputs
:
for
output
in
fn
.
outputs
:
if
n
umpy
.
isnan
(
output
[
0
])
.
any
():
if
n
p
.
isnan
(
output
[
0
])
.
any
():
print
(
'*** NaN detected ***'
)
print
(
'*** NaN detected ***'
)
theano
.
printing
.
debugprint
(
node
)
theano
.
printing
.
debugprint
(
node
)
print
(
'Inputs :
%
s'
%
[
input
[
0
]
for
input
in
fn
.
inputs
])
print
(
'Inputs :
%
s'
%
[
input
[
0
]
for
input
in
fn
.
inputs
])
...
...
theano/compile/tests/test_nanguardmode.py
浏览文件 @
ccf6deb0
...
@@ -6,7 +6,7 @@ from __future__ import absolute_import, print_function, division
...
@@ -6,7 +6,7 @@ from __future__ import absolute_import, print_function, division
import
logging
import
logging
from
nose.tools
import
assert_raises
from
nose.tools
import
assert_raises
import
numpy
import
numpy
as
np
from
theano.compile.nanguardmode
import
NanGuardMode
from
theano.compile.nanguardmode
import
NanGuardMode
import
theano
import
theano
...
@@ -18,20 +18,20 @@ def test_NanGuardMode():
...
@@ -18,20 +18,20 @@ def test_NanGuardMode():
# intentionally. A working implementation should be able to capture all
# intentionally. A working implementation should be able to capture all
# the abnormalties.
# the abnormalties.
x
=
T
.
matrix
()
x
=
T
.
matrix
()
w
=
theano
.
shared
(
n
umpy
.
random
.
randn
(
5
,
7
)
.
astype
(
theano
.
config
.
floatX
))
w
=
theano
.
shared
(
n
p
.
random
.
randn
(
5
,
7
)
.
astype
(
theano
.
config
.
floatX
))
y
=
T
.
dot
(
x
,
w
)
y
=
T
.
dot
(
x
,
w
)
fun
=
theano
.
function
(
fun
=
theano
.
function
(
[
x
],
y
,
[
x
],
y
,
mode
=
NanGuardMode
(
nan_is_error
=
True
,
inf_is_error
=
True
)
mode
=
NanGuardMode
(
nan_is_error
=
True
,
inf_is_error
=
True
)
)
)
a
=
n
umpy
.
random
.
randn
(
3
,
5
)
.
astype
(
theano
.
config
.
floatX
)
a
=
n
p
.
random
.
randn
(
3
,
5
)
.
astype
(
theano
.
config
.
floatX
)
infa
=
n
umpy
.
tile
(
infa
=
n
p
.
tile
(
(
n
umpy
.
asarray
(
100.
)
**
1000000
)
.
astype
(
theano
.
config
.
floatX
),
(
3
,
5
))
(
n
p
.
asarray
(
100.
)
**
1000000
)
.
astype
(
theano
.
config
.
floatX
),
(
3
,
5
))
nana
=
n
umpy
.
tile
(
nana
=
n
p
.
tile
(
n
umpy
.
asarray
(
numpy
.
nan
)
.
astype
(
theano
.
config
.
floatX
),
(
3
,
5
))
n
p
.
asarray
(
np
.
nan
)
.
astype
(
theano
.
config
.
floatX
),
(
3
,
5
))
biga
=
n
umpy
.
tile
(
biga
=
n
p
.
tile
(
n
umpy
.
asarray
(
1e20
)
.
astype
(
theano
.
config
.
floatX
),
(
3
,
5
))
n
p
.
asarray
(
1e20
)
.
astype
(
theano
.
config
.
floatX
),
(
3
,
5
))
fun
(
a
)
# normal values
fun
(
a
)
# normal values
...
@@ -46,14 +46,14 @@ def test_NanGuardMode():
...
@@ -46,14 +46,14 @@ def test_NanGuardMode():
_logger
.
propagate
=
True
_logger
.
propagate
=
True
# slices
# slices
a
=
n
umpy
.
random
.
randn
(
3
,
4
,
5
)
.
astype
(
theano
.
config
.
floatX
)
a
=
n
p
.
random
.
randn
(
3
,
4
,
5
)
.
astype
(
theano
.
config
.
floatX
)
infa
=
n
umpy
.
tile
(
infa
=
n
p
.
tile
(
(
n
umpy
.
asarray
(
100.
)
**
1000000
)
.
astype
(
theano
.
config
.
floatX
),
(
n
p
.
asarray
(
100.
)
**
1000000
)
.
astype
(
theano
.
config
.
floatX
),
(
3
,
4
,
5
))
(
3
,
4
,
5
))
nana
=
n
umpy
.
tile
(
nana
=
n
p
.
tile
(
n
umpy
.
asarray
(
numpy
.
nan
)
.
astype
(
theano
.
config
.
floatX
),
(
3
,
4
,
5
))
n
p
.
asarray
(
np
.
nan
)
.
astype
(
theano
.
config
.
floatX
),
(
3
,
4
,
5
))
biga
=
n
umpy
.
tile
(
biga
=
n
p
.
tile
(
n
umpy
.
asarray
(
1e20
)
.
astype
(
theano
.
config
.
floatX
),
(
3
,
4
,
5
))
n
p
.
asarray
(
1e20
)
.
astype
(
theano
.
config
.
floatX
),
(
3
,
4
,
5
))
x
=
T
.
tensor3
()
x
=
T
.
tensor3
()
y
=
x
[:,
T
.
arange
(
2
),
T
.
arange
(
2
)]
y
=
x
[:,
T
.
arange
(
2
),
T
.
arange
(
2
)]
...
...
theano/compile/tests/test_ops.py
浏览文件 @
ccf6deb0
...
@@ -9,7 +9,6 @@ from theano.tests import unittest_tools as utt
...
@@ -9,7 +9,6 @@ from theano.tests import unittest_tools as utt
from
theano
import
function
from
theano
import
function
import
theano
import
theano
from
theano.tensor
import
dmatrix
,
dvector
from
theano.tensor
import
dmatrix
,
dvector
from
numpy
import
allclose
from
theano.compile
import
as_op
from
theano.compile
import
as_op
import
pickle
import
pickle
...
@@ -34,7 +33,7 @@ class OpDecoratorTests(utt.InferShapeTester):
...
@@ -34,7 +33,7 @@ class OpDecoratorTests(utt.InferShapeTester):
r
=
fn
([[
1.5
,
5
],
[
2
,
2
]])
r
=
fn
([[
1.5
,
5
],
[
2
,
2
]])
r0
=
np
.
array
([
1.5
,
7.5
,
15.
,
30.
])
r0
=
np
.
array
([
1.5
,
7.5
,
15.
,
30.
])
assert
allclose
(
r
,
r0
),
(
r
,
r0
)
assert
np
.
allclose
(
r
,
r0
),
(
r
,
r0
)
def
test_2arg
(
self
):
def
test_2arg
(
self
):
x
=
dmatrix
(
'x'
)
x
=
dmatrix
(
'x'
)
...
@@ -50,7 +49,7 @@ class OpDecoratorTests(utt.InferShapeTester):
...
@@ -50,7 +49,7 @@ class OpDecoratorTests(utt.InferShapeTester):
r
=
fn
([[
1.5
,
5
],
[
2
,
2
]],
[
1
,
100
,
2
,
200
])
r
=
fn
([[
1.5
,
5
],
[
2
,
2
]],
[
1
,
100
,
2
,
200
])
r0
=
np
.
array
([
2.5
,
107.5
,
17.
,
230.
])
r0
=
np
.
array
([
2.5
,
107.5
,
17.
,
230.
])
assert
allclose
(
r
,
r0
),
(
r
,
r0
)
assert
np
.
allclose
(
r
,
r0
),
(
r
,
r0
)
def
test_infer_shape
(
self
):
def
test_infer_shape
(
self
):
x
=
dmatrix
(
'x'
)
x
=
dmatrix
(
'x'
)
...
...
theano/compile/tests/test_pfunc.py
浏览文件 @
ccf6deb0
差异被折叠。
点击展开。
theano/compile/tests/test_profiling.py
浏览文件 @
ccf6deb0
...
@@ -6,7 +6,7 @@ from __future__ import absolute_import, print_function, division
...
@@ -6,7 +6,7 @@ from __future__ import absolute_import, print_function, division
import
unittest
import
unittest
import
numpy
import
numpy
as
np
import
theano
import
theano
from
six.moves
import
StringIO
from
six.moves
import
StringIO
...
@@ -45,7 +45,7 @@ class Test_profiling(unittest.TestCase):
...
@@ -45,7 +45,7 @@ class Test_profiling(unittest.TestCase):
f
=
theano
.
function
(
x
,
z
,
profile
=
p
,
name
=
"test_profiling"
,
f
=
theano
.
function
(
x
,
z
,
profile
=
p
,
name
=
"test_profiling"
,
mode
=
m
)
mode
=
m
)
inp
=
[
n
umpy
.
arange
(
1024
,
dtype
=
'float32'
)
+
1
for
i
in
range
(
len
(
x
))]
inp
=
[
n
p
.
arange
(
1024
,
dtype
=
'float32'
)
+
1
for
i
in
range
(
len
(
x
))]
f
(
*
inp
)
f
(
*
inp
)
buf
=
StringIO
()
buf
=
StringIO
()
...
...
theano/compile/tests/test_shared.py
浏览文件 @
ccf6deb0
差异被折叠。
点击展开。
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论