【Mindspore-ascend】【自定义算子】GRAPH_MODE下,自定义如何遍历Tensor

因为需要使用了带weights的SoftmaxCrossEntropyLoss,就在mindspore提供的nn.SoftmaxCrossEntropyLoss上自定义了一个算子。

在该算子中,我需要遍历一维Tensor。在PYNATIVE模式中,我将Tensor转为numpy数组实现该操作。但是在GRAPH_MODE中无法将Tensor转为numpy或list,请问该如何操作?

【相关代码】

# labels_int: (n,)维Tensor
# self.ignore_label: int
# self.cls_weight: (c, )维Tensor
weights_np = np.ones((labels_int.shape[0]))
labels_np = labels_int.asnumpy()
weights_np[labels_np == self.ignore_label] = 0
cls_weight_np = self.cls_weight.asnumpy()
for idx, v in enumerate(cls_weight_np, 0):
    weights_np[labels_np == idx] *= v

你的问题是想在图模式下,遍历一个一维Tensor,当前可以通过两种方式遍历Tensor。

  1. 第一种获取Tensor第一维的长度,然后通过整数索引遍历,如下:

    for i in range(x.shape[0]):
    
        x[i]

  2. 第二种通过enumerate接口,直接遍历,如下:

    for i, ele in enumerate(x, 0):
    
        ele
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值