mindspore关于convd3d算子的输出

在相同的维度且数值为1的输入下,发现pytorch输出数值靠近1和-1,而mindspore的输出数值却几乎接近于0,请问这是哪里的问题?(mindspore的是1.8CPU版本)

import mindspore
import mindspore.nn as nn1
from mindspore import Tensor
import mindspore.ops as ops
import numpy as np
import torch
import torch.nn as nn2

x1 = Tensor(np.ones([1, 3, 4, 4, 4]), mindspore.float32)
print(x1)
x2 = torch.ones([1, 3, 4, 4, 4])
print(x2)

msconv3d = nn1.Conv3d(in_channels=3, out_channels=3, kernel_size=(2, 2, 2), stride=(2, 2, 2), pad_mode='same')
msoutput = msconv3d(x1)
print(msoutput.shape)
print(msoutput)

pyconv3d = nn2.Conv3d(in_channels=3, out_channels=3, kernel_size=(2, 2, 2), stride=(2, 2, 2))
pyoutput = pyconv3d(x2)
print(pyoutput.shape)
print(pyoutput)

 

我测试过您给的代码,发现

1. torch.nn.Conv3d的表现并不完全如同您描述的“输出数值靠近1和-1”,您可以多跑几次验证一下

2. ms和pytorch的nn.Conv3d输出的结果确实体现出分布的不同。对此的解释是:这两个算子参数的默认设置不完全相同,我查找出来的有以下两点不同:

2.1:torch.nn.Conv3d的bias默认=True,这个参数对应在ms中为has_bias,默认为False,不过,这点的影响其实不大

2.2:torch.nn.Conv3d有个weight属性,它被设置为均匀分布,具体可以参考https://pytorch.org/docs/1.5.0/nn.html?highlight=conv3d#torch.nn.Conv3d 中的描述,而mindspore.nn.Conv3d对应的默认参数为weight_init='normal'

综上,您可以通过在调用mindspore.nn.Conv3d()时设置has_bias=True, weight_init='uniform',使得输出和pytorch的输出分布接近。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值