修改了cell中的一个属性的值, 在construct中需要使用这个属性控制if else, 但是值却并没有正确的被修改
Hardware Environment(Ascend
/GPU
/CPU
) / 硬件环境: Ascend
Software Environment / 软件环境 (Mandatory / 必填):
-- MindSpore version (e.g., 1.7.0.Bxxx) : 2.0 beta
-- Python version (e.g., Python 3.7.5) : Python 3.7.5
-- OS platform and distribution (e.g., Linux Ubuntu 16.04): eulor 2.8
-- GCC/Compiler version (if compiled from source):
Excute Mode / 执行模式 (Mandatory / 必填)(PyNative
/Graph
):
Please delete the mode not involved / 请删除不涉及的模式:
/mode graph
import numpy as np
from mindspore import nn, Tensor
from mindspore import context
class Flag(nn.Cell):
def __init__(self):
super().__init__(auto_prefix=False)
self.is_first_iteration = True
def construct(self, x):
if self.is_first_iteration:
print('is first iteration', self.is_first_iteration)
else:
print('is not first iteration', self.is_first_iteration)
return x
context.set_context(
mode=context.GRAPH_MODE,
device_target="Ascend",
device_id=7)
network = Flag()
input0 = Tensor(np.arange(10))
input1 = Tensor(np.arange(20))
network.add_flags_recursive(is_first_iteration=True)
network(input0)
network.add_flags_recursive(is_first_iteration=False)
network(input0)
network(input1)
is first iteration
Tensor(shape=[], dtype=Bool, value=True)
is not first iteration
Tensor(shape=[], dtype=Bool, value=False)
is not first iteration
Tensor(shape=[], dtype=Bool, value=False)
Please assign maintainer to check this issue.
请为此issue分配处理人。
@fangwenyi @chengxiaoli @wuweikang
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
Please add labels (comp or sig), also you can visit https://gitee.com/mindspore/community/blob/master/sigs/dx/docs/labels.md to find more.
为了让代码尽快被审核,请您为Pull Request打上 组件(comp)或兴趣组(sig) 标签,打上标签的PR可直接推送给责任人进行审核。
更多的标签可以查看https://gitee.com/mindspore/community/blob/master/sigs/dx/docs/labels.md
以组件相关代码提交为例,如果你提交的是data组件代码,你可以这样评论:
//comp/data
当然你也可以邀请data SIG组来审核代码,可以这样写:
//sig/data
另外你还可以给这个PR标记类型,例如是bugfix或者是特性需求:
//kind/bug or //kind/feature
恭喜你,你已经学会了使用命令来打标签,接下来就在下面的评论里打上标签吧!
beta版本问题单统一收编到1.11版本回归,在1.11上验证没问题,就走回归测试
问题现象:
cell编译后,修改cell属性,在construct里获取到的cell属性还是编译前的。
定位情况:
第一次编译时,cell对象会缓存,后续编译时,判断如果是同一个cell对象,会调用编译缓存。
问题原因:
属性修改后,实际前端cell对象的属性已经被修改,但是编译缓存调用的是原始对象,因此在construct里访问到的cell属性没有被修改。
场外信息:
cell的is_first_iteration 属性只会在第一次编译时被判断使用,后续不会用到,所以再次赋值没有实际使用场景。
结论:与子亮讨论后,认为是框架缓存机制导致,非框架bug。
后续考虑,在models里不要通过判断cell属性去改网络结构
问题已解决,关闭
登录 后才可以发表评论