比较与torch.nn.Linear的差异

查看源文件

torch.nn.Linear

class torch.nn.Linear(
    in_features,
    out_features,
    bias=True
)(input) -> Tensor

更多内容详见torch.nn.Linear

mindspore.nn.Dense

class mindspore.nn.Dense(
    in_channels,
    out_channels,
    weight_init=None,
    bias_init=None,
    has_bias=True,
    activation=None
)(x) -> Tensor

更多内容详见mindspore.nn.Dense

差异对比

PyTorch:全连接层,实现矩阵相乘的运算。

MindSpore:MindSpore此API实现功能与PyTorch基本一致,而且可以在全连接层后添加激活函数。

权重初始化差异

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

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

分类

子类

PyTorch

MindSpore

差异

参数

参数1

in_features

in_channels

功能一致,参数名不同

参数2

out_features

out_channels

功能一致,参数名不同

参数3

bias

has_bias

功能一致,参数名不同

参数4

-

weight_init

权重参数的初始化方法,PyTorch无此参数

参数5

-

bias_init

偏置参数的初始化方法,PyTorch无此参数

参数6

-

activation

应用于全连接层输出的激活函数,PyTorch无此参数

输入

单输入

input

x

功能一致,参数名不同

代码示例

两API实现功能一致,用法相同。

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

net = nn.Linear(3, 4)
x = torch.tensor(np.array([[180, 234, 154], [244, 48, 247]]), dtype=torch.float)
output = net(x)
print(output.detach().numpy().shape)
# (2, 4)

# MindSpore
import mindspore
from mindspore import Tensor, nn
import numpy as np

x = Tensor(np.array([[180, 234, 154], [244, 48, 247]]), mindspore.float32)
net = nn.Dense(3, 4)
output = net(x)
print(output.shape)
# (2, 4)