a = torch.randn(10,1)
torch.nn.Dropout(0.5)(a)
def __init__(self, in_features, out_features, bias=True):
super(Linear, self).__init__()
self.in_features = in_features
self.out_features = out_features
self.weight = Parameter(torch.Tensor(out_features, in_features))
if bias:
self.bias = Parameter(torch.Tensor(out_features))
else:
self.register_parameter('bias', None)
self.reset_parameters()
Args:
in_features: size of each input sample 输入的二维张量的大小
out_features: size of each output sample 输出的二维张量的大小
bias: If set to ``False``, the layer will not learn an additive bias.
Default: ``True``
举个例子:
>>> m = nn.Linear(20, 30)
>>> input = torch.randn(128, 20)
>>> output = m(input)
>>> print(output.size())
torch.Size([128, 30])
张量的大小由 128 x 20 变成了 128 x 30
执行的操作是:
[128,20]×[20,30]=[128,30]
Conv2d(in_channels, out_channels, kernel_size, stride=1,padding=0, dilation=1, groups=1,bias=True, padding_mode=‘zeros’)
如果设置的是dilation=1,那么效果如图:(蓝色为输入,绿色为输出,卷积核仍为 3 × 3 。)但是这里卷积核点与输入之间距离为1的值相乘来得到输出。
举例来说:
比如 groups 为1,那么所有的输入都会连接到所有输出
当 groups 为 2的时候,相当于将输入分为两组,并排放置两层,每层看到一半的输入通道并产生一半的输出通道,并且两者都是串联在一起的。这也是参数字面的意思:“组” 的含义。
需要注意的是,in_channels 和 out_channels 必须都可以整除 groups,否则会报错(因为要分成这么多组啊,除不开你让人家程序怎么办?)
注意:参数 kernel_size,stride,padding,dilation 都可以是一个整数或者是一个元组,一个值的情况将会同时作用于高和宽 两个维度,两个值的元组情况代表分别作用于 高 和 宽 维度。
开始时候是随机初始化的,之后是可学习的