Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
P
pytensor
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
testgroup
pytensor
Commits
cff93cf4
提交
cff93cf4
authored
3月 27, 2009
作者:
desjagui@atchoum.iro.umontreal.ca
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Created unittests for Module
上级
ec57ef26
显示空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
156 行增加
和
124 行删除
+156
-124
module.txt
doc/basic_tutorial/module.txt
+5
-124
accumulator.py
doc/examples/module/accumulator.py
+20
-0
custom_init.py
doc/examples/module/custom_init.py
+33
-0
mechanism1.py
doc/examples/module/mechanism1.py
+25
-0
mechanism2.py
doc/examples/module/mechanism2.py
+31
-0
nested.py
doc/examples/module/nested.py
+16
-0
test_module_doc.py
doc/examples/module/test_module_doc.py
+26
-0
没有找到文件。
doc/basic_tutorial/module.txt
浏览文件 @
cff93cf4
...
@@ -159,23 +159,7 @@ subclass of Module:
...
@@ -159,23 +159,7 @@ subclass of Module:
.. code-block:: python
.. code-block:: python
class Accumulator(Module):
.. literalinclude:: ../examples/module/accumulator.py
def __init__(self):
super(Accumulator, self).__init__() # don't forget this
self.inc = T.dscalar()
self.state = T.dscalar()
self.new_state = self.inc + self.state
self.add = Method(inputs = self.inc,
outputs = self.new_state,
updates = {self.state: self.new_state})
self.sub = Method(inputs = self.inc,
outputs = None,
updates = {self.state: self.state - self.inc})
m = Accumulator()
acc = m.make(state = 0)
This is just like the previous example except slightly fancier.
This is just like the previous example except slightly fancier.
...
@@ -203,30 +187,7 @@ boilerplate code.
...
@@ -203,30 +187,7 @@ boilerplate code.
All we need to do to use this mechanism is to give a method called
All we need to do to use this mechanism is to give a method called
``_instance_print_state`` to our Module class.
``_instance_print_state`` to our Module class.
.. code-block:: python
.. literalinclude:: ../examples/module/mechanism1.py
class Accumulator(Module):
def __init__(self):
super(Accumulator, self).__init__() # don't forget this
self.inc = T.dscalar()
self.state = T.dscalar()
self.new_state = self.inc + self.state
self.add = Method(inputs = self.inc,
outputs = self.new_state,
updates = {self.state: self.new_state})
self.sub = Method(inputs = self.inc,
outputs = None,
updates = {self.state: self.state - self.inc})
def _instance_print_state(self, acc):
print '%s is: %s' % (self.state, acc.state)
m = Accumulator()
acc = m.make(state = 0)
acc.print_state() # --> prints "state is: 0.0"
Any method called like ``_instance_XXX`` will cause the object
Any method called like ``_instance_XXX`` will cause the object
obtained through a call to ``make`` to have a method called ``XXX``.
obtained through a call to ``make`` to have a method called ``XXX``.
...
@@ -246,37 +207,7 @@ If a number of instance methods are going to be defined, and especially if you
...
@@ -246,37 +207,7 @@ If a number of instance methods are going to be defined, and especially if you
will want to inherit from the kind of class that gets instantiated by make,
will want to inherit from the kind of class that gets instantiated by make,
you might prefer to consider using the InstanceType mechanism.
you might prefer to consider using the InstanceType mechanism.
.. code-block:: python
.. literalinclude:: ../examples/module/mechanism2.py
class AccumulatorInstance(ModuleInstance):
def print_state(self):
#self.component points to the Module from which this was compiled.
print '%s is: %s' % (self.component.state, self.state)
class Accumulator(Module):
# This line tells theano to instantiate an AccumulatorInstance
# when make() is called.
InstanceType = AccumulatorInstance
def __init__(self):
super(Accumulator, self).__init__() # don't forget this
self.inc = T.dscalar()
self.state = T.dscalar()
self.new_state = self.inc + self.state
self.add = Method(inputs = self.inc,
outputs = self.new_state,
updates = {self.state: self.new_state})
self.sub = Method(inputs = self.inc,
outputs = None,
updates = {self.state: self.state - self.inc})
m = Accumulator()
acc = m.make(state = 0)
acc.print_state() # --> prints "state is: 0.0"
Adding custom initialization
Adding custom initialization
============================
============================
...
@@ -293,39 +224,7 @@ can override the default with your own method, which has to be called
...
@@ -293,39 +224,7 @@ can override the default with your own method, which has to be called
Here is an example where we take width and height arguments to
Here is an example where we take width and height arguments to
initialize a state with a matrix of zeros:
initialize a state with a matrix of zeros:
.. literalinclude:: ../examples/module/accumulator.py
.. code-block:: python
import numpy
class MatrixAccumulator(Module):
def __init__(self):
super(MatrixAccumulator, self).__init__() # don't forget this
self.inc = T.dscalar()
self.state = T.dmatrix()
self.new_state = self.inc + self.state
self.add = Method(inputs = self.inc,
outputs = self.new_state,
updates = {self.state: self.new_state})
self.sub = Method(inputs = self.inc,
outputs = None,
updates = {self.state: self.state - self.inc})
def _instance_print_state(self, acc):
print '%s is: %s' % (self.state, acc.state)
def _instance_initialize(self, acc, nrows, ncols):
acc.state = numpy.zeros((nrows, ncols))
m = Accumulator()
acc = m.make(2, 5) # this calls m._instance_initialize(acc, 2, 5)
acc.print_state()
# OUTPUT:
# state is: [[ 0. 0. 0. 0. 0.]
# [ 0. 0. 0. 0. 0.]]
Nesting Modules
Nesting Modules
...
@@ -335,25 +234,7 @@ Probably the most powerful feature of theano's modules is that one can be
...
@@ -335,25 +234,7 @@ Probably the most powerful feature of theano's modules is that one can be
included as an attribute to another so that the storage of each is available
included as an attribute to another so that the storage of each is available
to both.
to both.
.. code-block:: python
.. literalinclude:: ../examples/module/nested.py
M = theano.Module()
M.a, M.b, M.c = [theano.dvector() for i in 1,2,3]
P = theano.Module()
P.m = M #include a module by nesting
x = theano.dvector()
P.f = Method([x], None, {M.b: M.b + x})
p = P.make() #this converts both M and P because M was nested within P
p.m.b = [4, 5, 6]
p.f(3)
print p.m.b
# prints array([7.,8.,9.])
As you read through examples of Theano code, you will probably see many
As you read through examples of Theano code, you will probably see many
instances of Modules being nested in this way.
instances of Modules being nested in this way.
doc/examples/module/accumulator.py
0 → 100644
浏览文件 @
cff93cf4
from
theano.compile
import
Module
,
Method
import
theano.tensor
as
T
class
Accumulator
(
Module
):
def
__init__
(
self
):
super
(
Accumulator
,
self
)
.
__init__
()
# don't forget this
self
.
inc
=
T
.
dscalar
()
self
.
state
=
T
.
dscalar
()
self
.
new_state
=
self
.
inc
+
self
.
state
self
.
add
=
Method
(
inputs
=
self
.
inc
,
outputs
=
self
.
new_state
,
updates
=
{
self
.
state
:
self
.
new_state
})
self
.
sub
=
Method
(
inputs
=
self
.
inc
,
outputs
=
None
,
updates
=
{
self
.
state
:
self
.
state
-
self
.
inc
})
if
__name__
==
'__main__'
:
m
=
Accumulator
()
acc
=
m
.
make
(
state
=
0
)
doc/examples/module/custom_init.py
0 → 100644
浏览文件 @
cff93cf4
import
numpy
from
theano.compile
import
Module
,
Method
import
theano.tensor
as
T
class
MatrixAccumulator
(
Module
):
def
__init__
(
self
):
super
(
MatrixAccumulator
,
self
)
.
__init__
()
# don't forget this
self
.
inc
=
T
.
dscalar
()
self
.
state
=
T
.
dmatrix
()
self
.
new_state
=
self
.
inc
+
self
.
state
self
.
add
=
Method
(
inputs
=
self
.
inc
,
outputs
=
self
.
new_state
,
updates
=
{
self
.
state
:
self
.
new_state
})
self
.
sub
=
Method
(
inputs
=
self
.
inc
,
outputs
=
None
,
updates
=
{
self
.
state
:
self
.
state
-
self
.
inc
})
def
_instance_print_state
(
self
,
acc
):
print
'
%
s is:
%
s'
%
(
self
.
state
,
acc
.
state
)
def
_instance_initialize
(
self
,
acc
,
nrows
,
ncols
):
acc
.
state
=
numpy
.
zeros
((
nrows
,
ncols
))
if
__name__
==
'__main__'
:
m
=
Accumulator
()
acc
=
m
.
make
(
2
,
5
)
# this calls m._instance_initialize(acc, 2, 5)
acc
.
print_state
()
# OUTPUT:
# state is: [[ 0. 0. 0. 0. 0.]
# [ 0. 0. 0. 0. 0.]]
doc/examples/module/mechanism1.py
0 → 100644
浏览文件 @
cff93cf4
from
theano.compile
import
Module
,
Method
import
theano.tensor
as
T
class
Accumulator
(
Module
):
def
__init__
(
self
):
super
(
Accumulator
,
self
)
.
__init__
()
# don't forget this
self
.
inc
=
T
.
dscalar
()
self
.
state
=
T
.
dscalar
()
self
.
new_state
=
self
.
inc
+
self
.
state
self
.
add
=
Method
(
inputs
=
self
.
inc
,
outputs
=
self
.
new_state
,
updates
=
{
self
.
state
:
self
.
new_state
})
self
.
sub
=
Method
(
inputs
=
self
.
inc
,
outputs
=
None
,
updates
=
{
self
.
state
:
self
.
state
-
self
.
inc
})
def
_instance_print_state
(
self
,
acc
):
print
'
%
s is:
%
s'
%
(
self
.
state
,
acc
.
state
)
if
__name__
==
'__main__'
:
m
=
Accumulator
()
acc
=
m
.
make
(
state
=
0
)
acc
.
print_state
()
# --> prints "state is: 0.0"
doc/examples/module/mechanism2.py
0 → 100644
浏览文件 @
cff93cf4
from
theano.compile
import
Module
,
ModuleInstance
,
Method
import
theano.tensor
as
T
class
AccumulatorInstance
(
ModuleInstance
):
def
print_state
(
self
):
#self.component points to the Module from which this was compiled.
print
'
%
s is:
%
s'
%
(
self
.
component
.
state
,
self
.
state
)
class
Accumulator
(
Module
):
# This line tells theano to instantiate an AccumulatorInstance
# when make() is called.
InstanceType
=
AccumulatorInstance
def
__init__
(
self
):
super
(
Accumulator
,
self
)
.
__init__
()
# don't forget this
self
.
inc
=
T
.
dscalar
()
self
.
state
=
T
.
dscalar
()
self
.
new_state
=
self
.
inc
+
self
.
state
self
.
add
=
Method
(
inputs
=
self
.
inc
,
outputs
=
self
.
new_state
,
updates
=
{
self
.
state
:
self
.
new_state
})
self
.
sub
=
Method
(
inputs
=
self
.
inc
,
outputs
=
None
,
updates
=
{
self
.
state
:
self
.
state
-
self
.
inc
})
if
__name__
==
'__main__'
:
m
=
Accumulator
()
acc
=
m
.
make
(
state
=
0
)
acc
.
print_state
()
# --> prints "state is: 0.0"
doc/examples/module/nested.py
0 → 100644
浏览文件 @
cff93cf4
import
theano
import
theano.tensor
as
T
M
=
theano
.
Module
()
M
.
a
,
M
.
b
,
M
.
c
=
[
T
.
dvector
()
for
i
in
1
,
2
,
3
]
P
=
theano
.
Module
()
P
.
m
=
M
#include a module by nesting
x
=
T
.
dvector
()
P
.
f
=
theano
.
Method
([
x
],
None
,
{
M
.
b
:
M
.
b
+
x
})
p
=
P
.
make
()
#this converts both M and P because M was nested within P
p
.
m
.
b
=
[
4
,
5
,
6
]
p
.
f
(
3
)
print
p
.
m
.
b
# prints array([7.,8.,9.])
doc/examples/module/test_module_doc.py
0 → 100644
浏览文件 @
cff93cf4
import
numpy
import
unittest
import
os
def
makeTester
(
fname
):
class
Test
(
unittest
.
TestCase
):
def
test_example
(
self
):
print
'Executing file'
,
self
.
fname
Test
.
__name__
=
fname
Test
.
fname
=
fname
return
Test
def
test_module_doc
():
"""
This test executes all of the Module code examples.
It goes through the directory and executes all .py files.
"""
for
fname
in
os
.
listdir
(
'.'
):
if
fname
.
endswith
(
'.py'
):
f
=
fname
.
split
(
'.'
)[
0
]
print
'Executing '
,
fname
execfile
(
fname
,
locals
())
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论