Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
P
pytensor
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
testgroup
pytensor
Commits
7576ab6d
提交
7576ab6d
authored
9月 25, 2015
作者:
abergeron
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #3440 from carriepl/scan_push_out_seq_scan
Scan push out seq scan
上级
da3c8070
3cc67599
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
34 行增加
和
4 行删除
+34
-4
scan_opt.py
theano/scan_module/scan_opt.py
+18
-4
test_scan.py
theano/scan_module/tests/test_scan.py
+16
-0
没有找到文件。
theano/scan_module/scan_opt.py
浏览文件 @
7576ab6d
...
@@ -397,10 +397,24 @@ class PushOutNonSeqScan(gof.Optimizer):
...
@@ -397,10 +397,24 @@ class PushOutNonSeqScan(gof.Optimizer):
# because the scan op expects for a tensor3, to which an
# because the scan op expects for a tensor3, to which an
# subtensor is applied that takes only the last element
# subtensor is applied that takes only the last element
if
replace_with
:
if
replace_with
:
fgraph
.
replace_all_validate_remove
(
if
len
(
node
.
outputs
)
==
len
(
replace_with
):
replace_with
.
items
(),
# Every output of the node has a replacement, the Scan
remove
=
[
node
],
# node can be removed from the graph
reason
=
'scanOp_pushout_nonseqs_ops'
)
fgraph
.
replace_all_validate_remove
(
replace_with
.
items
(),
remove
=
[
node
],
reason
=
'scanOp_pushout_nonseqs_ops'
)
else
:
# The node has some outputs for which no replacement has
# been established. This can occur for outputs that are
# not produced by apply nodes (since the optimizations
# only visits apply nodes) such as constants or inputs
# passed directly as outputs. The replacements can be
# performed but the Scan node can't be removed at this
# point.
fgraph
.
replace_all_validate
(
replace_with
.
items
(),
reason
=
'scanOp_pushout_nonseqs_ops'
)
else
:
else
:
return
False
return
False
...
...
theano/scan_module/tests/test_scan.py
浏览文件 @
7576ab6d
...
@@ -2771,6 +2771,22 @@ class T_Scan(unittest.TestCase):
...
@@ -2771,6 +2771,22 @@ class T_Scan(unittest.TestCase):
# an exception being raised
# an exception being raised
theano
.
function
([
x
],
outputs
,
updates
=
updates
)
theano
.
function
([
x
],
outputs
,
updates
=
updates
)
@theano.configparser.change_flags
(
on_opt_error
=
'raise'
)
def
test_pushout_nonseq
(
self
):
# Test case originally reported by Daniel Renshaw. The crashed occured
# during the optimization PushOutNonSeqScan when it attempted to
# a scan node with two outputs but only providing a replacement for
# one of those outputs. This led the optimization to raise an
# exception.
outputs
,
_
=
theano
.
scan
(
lambda
x
:
(
x
*
x
,
x
),
non_sequences
=
[
2
],
n_steps
=
2
)
f
=
theano
.
function
(
inputs
=
[],
outputs
=
outputs
)
outs
=
f
()
expected_outs
=
[[
4
,
4
],
[
2
,
2
]]
utt
.
assert_allclose
(
outs
,
expected_outs
)
def
test_sequence_dict
(
self
):
def
test_sequence_dict
(
self
):
# Test that we can specify sequences as a dictionary with
# Test that we can specify sequences as a dictionary with
# only the 'input' key
# only the 'input' key
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论