文档反馈

问题文档片段

问题文档片段包含公式时,显示为空格。

提交类型
issue

有点复杂...

找人问问吧。

PR

小问题,全程线上修改...

一键搞定!

请选择提交类型

问题类型
规范和低错类

- 规范和低错类:

- 错别字或拼写错误,标点符号使用错误、公式错误或显示异常。

- 链接错误、空单元格、格式错误。

- 英文中包含中文字符。

- 界面和描述不一致,但不影响操作。

- 表述不通顺,但不影响理解。

- 版本号不匹配:如软件包名称、界面版本号。

易用性

- 易用性:

- 关键步骤错误或缺失,无法指导用户完成任务。

- 缺少主要功能描述、关键词解释、必要前提条件、注意事项等。

- 描述内容存在歧义指代不明、上下文矛盾。

- 逻辑不清晰,该分类、分项、分步骤的没有给出。

正确性

- 正确性:

- 技术原理、功能、支持平台、参数类型、异常报错等描述和软件实现不一致。

- 原理图、架构图等存在错误。

- 命令、命令参数等错误。

- 代码片段错误。

- 命令无法完成对应功能。

- 界面错误,无法指导操作。

- 代码样例运行报错、运行结果不符。

风险提示

- 风险提示:

- 对重要数据或系统存在风险的操作,缺少安全提示。

内容合规

- 内容合规:

- 违反法律法规,涉及政治、领土主权等敏感词。

- 内容侵权。

请选择问题类型

问题描述

点击输入详细问题描述,以帮助我们快速定位问题。

比较与torch.nn.ConvTranspose3d的差异

查看源文件

torch.nn.ConvTranspose3d

class torch.nn.ConvTranspose3d(
    in_channels,
    out_channels,
    kernel_size,
    stride=1,
    padding=0,
    output_padding=0,
    groups=1,
    bias=True,
    dilation=1,
    padding_mode='zeros'
)(input) -> Tensor

更多内容详见torch.nn.ConvTranspose3d

mindspore.nn.Conv3dTranspose

class mindspore.nn.Conv3dTranspose(
    in_channels,
    out_channels,
    kernel_size,
    stride=1,
    pad_mode='same',
    padding=0,
    dilation=1,
    group=1,
    output_padding=0,
    has_bias=False,
    weight_init=None,
    bias_init=None,
    data_format='NCDHW'
)(x) -> Tensor

更多内容详见mindspore.nn.Conv3dTranspose

差异对比

PyTorch:计算三维转置卷积,可以视为Conv3d对输入求梯度,也称为反卷积(实际不是真正的反卷积)。输入的shape通常是(N,Cin,Din,Hin,Win),其中N是batch size,C是空间维度,Din,Hin,Win分别为特征层的深度,高度和宽度。输出的shape为(N,Cout,Dout,Hout,Wout),计算公式如下: Dout=(Din1)×stride[0]2×padding[0]+dilation[0]×(kernelsize[0]1)+outputpadding[0]+1 Hout=(Hin1)×stride[1]2×padding[1]+dilation[1]×(kernelsize[1]1)+outputpadding[1]+1 Wout=(Win1)×stride[2]2×padding[2]+dilation[2]×(kernelsize[2]1)+outputpadding[2]+1

MindSpore:MindSpore此API实现功能与PyTorch基本一致,新增了填充模式参数"pad_mode",当"pad_mode" = "pad"时与PyTorch默认方式相同,利用weight_init 和bias_init 参数可以配置初始化方式。

权重初始化差异

mindspore.nn.Conv3dTranspose的 weight_initNone 时,权重使用HeUniform初始化。此时和PyTorch权重初始化方式一致。

mindspore.nn.Conv3dTranspose的 bias_initNone 时,偏差使用Uniform初始化。此时和PyTorch偏差初始化方式一致。

分类

子类

PyTorch

MindSpore

差异

参数

参数1

in_channels

in_channels

-

参数2

out_channels

out_channels

-

参数3

kernel_size

kernel_size

-

参数4

stride

stride

-

参数5

padding

padding

功能一致,PyTorch中只能在三个维度的两侧分别填充相同的值,可为长度为3的tuple。MindSpore中可以分别设置前部、尾部、顶部、底部、左边和右边的填充数量,可为长度为6的tuple

参数6

output_padding

output_padding

-

参数7

groups

group

功能一致,参数名不同

参数8

bias

has_bias

PyTorch默认为True,MindSpore默认为False

参数9

dilation

dilation

-

参数10

padding_mode

-

数值填充模式,只支持"zeros"即填充0。MindSpore无此参数,但默认填充0

参数11

-

pad_mode

指定填充模式。可选值为"same"、"valid"、"pad",在"same"和"valid"模式下,padding必须设置为0,默认为"same",PyTorch无此参数

参数12

-

weight_init

权重参数的初始化方法。可为Tensor,str,Initializer或numbers.Number。当使用str时,可选"TruncatedNormal","Normal","Uniform","HeUniform"和"XavierUniform"分布以及常量"One"和"Zero"分布的值。默认为None,PyTorch无此参数

参数13

-

bias_init

偏置参数的初始化方法。可选填参数与"weight_init"相同,默认为None,PyTorch无此参数

参数14

-

data_format

数据格式的可选值。目前仅支持"NCDHW",与PyTorch中默认顺序一致,PyTorch无此参数

输入

单输入

input

x

功能一致,参数名不同

代码示例1

两API都是实现三维转置卷积运算,使用时需先进行实例化。为使输出的宽度与输入整除stride后的值相同,PyTorch中设置output_padding = stride - 1,padding设置为(kernel_size - 1)/2。MindSpore则设置pad_mode = "same",同时padding = 0。

# PyTorch
import torch
from torch import tensor
import torch.nn as nn
import numpy as np

k = 5
s = 3
x_ = np.ones([1, 3, 4, 9, 16])
x = tensor(x_, dtype=torch.float32)
net = nn.ConvTranspose3d(3, 32, kernel_size=k, stride=s, padding=(k-1)//2, output_padding=s-1, bias=False)
net.weight.data = torch.ones(3, 32, k, k, k)
output = net(x).detach().numpy()
print(output.shape)
# (1, 32, 12, 27, 48)


# MindSpore
import mindspore as ms
import mindspore.nn as nn
import numpy as np

k = 5
s = 3
x_ = np.ones([1, 3, 4, 9, 16])
x = ms.Tensor(x_, ms.float32)
net = nn.Conv3dTranspose(3, 32, kernel_size=k, stride=s, weight_init='ones', pad_mode='same')
output = net(x)
print(output.shape)
# (1, 32, 12, 27, 48)

代码示例2

两API都是实现三维转置卷积运算,使用时需先进行实例化。若不在原有图像上做任何填充,在stride>1的情况下可能舍弃一部分数据,在PyTorch中将padding和output_padding设为0,MindSpore中设置pad_mode = "valid",同时padding = 0。

# PyTorch
import torch
from torch import tensor
import torch.nn as nn
import numpy as np

k = 5
s = 3
x_ = np.ones([1, 3, 4, 9, 16])
x = tensor(x_, dtype=torch.float32)
net = nn.ConvTranspose3d(3, 32, kernel_size=k, stride=s, bias=False)
net.weight.data = torch.ones(3, 32, k, k, k)
output = net(x).detach().numpy()
print(output.shape)
# (1, 32, 14, 29, 50)


# MindSpore
import mindspore as ms
import mindspore.nn as nn
import numpy as np

k = 5
s = 3
x_ = np.ones([1, 3, 4, 9, 16])
x = ms.Tensor(x_, ms.float32)
net = nn.Conv3dTranspose(3, 32, kernel_size=k, stride=s, weight_init='ones', pad_mode='valid')
output = net(x)
print(output.shape)
# (1, 32, 14, 29, 50)