Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
MegEngine 天元
MegEngine
提交
68cde873
MegEngine
项目概览
MegEngine 天元
/
MegEngine
大约 1 年 前同步成功
通知
399
Star
4705
Fork
582
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
MegEngine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
68cde873
编写于
1月 11, 2022
作者:
M
Megvii Engine Team
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix(mge/imperative): support broadcast with None
GitOrigin-RevId: dd330a2a1dc603ea52a655b350ee1a421015e7d7
上级
0bdd0b14
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
61 addition
and
1 deletion
+61
-1
imperative/python/megengine/core/tensor/array_method.py
imperative/python/megengine/core/tensor/array_method.py
+33
-1
imperative/python/test/unit/functional/test_tensor.py
imperative/python/test/unit/functional/test_tensor.py
+28
-0
未找到文件。
imperative/python/megengine/core/tensor/array_method.py
浏览文件 @
68cde873
...
...
@@ -99,7 +99,39 @@ def _transpose(data, axes):
def
_broadcast
(
inp
,
shape
):
shape
=
astensor1d
(
shape
,
inp
,
dtype
=
"int32"
,
device
=
inp
.
device
)
auto_infer
=
False
if
isinstance
(
shape
,
(
list
,
tuple
)):
shape_tuple
=
list
(
shape
)
for
i
,
s
in
enumerate
(
shape_tuple
):
if
isinstance
(
s
,
type
(
None
)):
if
s
is
None
:
right
=
i
-
len
(
shape_tuple
)
inp_shape
=
inp
.
_tuple_shape
if
len
(
inp_shape
)
+
right
>=
0
:
shape_tuple
[
right
]
=
list
(
inp_shape
)[
right
]
auto_infer
=
True
continue
else
:
raise
ValueError
(
"invalided Broadcast shape"
)
else
:
raise
ValueError
(
"expect shape[{}] >= 0 or use `None` or 'x' and 'X' to auto infer, got {}"
.
format
(
i
,
s
)
)
if
s
<
0
:
raise
ValueError
(
"expect shape[{}] >= 0 or use `None` or 'x' and 'X' to auto infer, got {}"
.
format
(
i
,
s
)
)
if
auto_infer
:
shape
=
tuple
(
shape_tuple
)
try
:
shape_tuple
=
make_shape_tuple
(
shape
)
except
ValueError
:
shape_tuple
=
shape
shape
=
astensor1d
(
shape_tuple
,
inp
,
dtype
=
"int32"
,
device
=
inp
.
device
)
(
result
,)
=
apply
(
builtin
.
Broadcast
(),
inp
,
shape
)
return
result
...
...
imperative/python/test/unit/functional/test_tensor.py
浏览文件 @
68cde873
...
...
@@ -223,6 +223,34 @@ def test_reshape(is_varnode):
np
.
testing
.
assert_equal
(
yy
.
numpy
(),
y
)
@
pytest
.
mark
.
parametrize
(
"is_varnode"
,
[
True
,
False
])
def
test_broadcast_auto_infer
(
is_varnode
):
if
is_varnode
:
network
=
Network
()
else
:
network
=
None
x
=
np
.
random
.
random
((
1
,
2
,
3
)).
astype
(
np
.
float32
)
xx
=
make_tensor
(
x
,
network
)
for
shape
in
[
(
1
,
2
,
3
),
(
1
,
None
,
3
),
]:
yy
=
F
.
broadcast_to
(
xx
,
shape
)
np
.
testing
.
assert_equal
(
yy
.
numpy
(),
x
)
with
pytest
.
raises
(
ValueError
):
F
.
broadcast_to
(
xx
,
(
1
,
-
1
,
3
))
with
pytest
.
raises
(
ValueError
):
F
.
broadcast_to
(
xx
,
(
None
,
1
,
2
,
3
))
F
.
broadcast_to
(
xx
,
(
1
,
None
,
2
,
3
))
t
=
tensor
(
2
,
dtype
=
np
.
int32
)
F
.
broadcast_to
(
xx
,
(
t
,
None
,
2
,
3
))
@
pytest
.
mark
.
parametrize
(
"is_trace"
,
[
True
,
False
])
def
test_reshape_on_empty_tensor
(
is_trace
):
input1_shape
=
(
100
,
0
,
1
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录