今天学了一下线性层,接下来是整理。
这个方法实现了一个仿射变换: y=xAT+b
下面是这个方法的形参:
torch.nn.Linear(in_features, out_features, bias=True, device=None, dtype=None)
in_dfeatures:传入的特征的维度
out_features:传出的参数的维度
bias:是否有偏置,既上面的公式是否含有b
device:指定计算设备,可根据设备情况自己选择
dtype:数据类型。
所含有的方法:
.weight和.bias
这里创建linear之后会自动生成w和b既权重和偏置。当然你也可以手动赋值。这个权重和偏置也可以通过训练更新,具体可见我花书的那一篇文章(虽然写的很水,狗头保命)
简而言之,你可以通过linear进行降维(pytorch的官方文档例子就是降维),升维。
还可以进行分类,还可以作为神经网络层。这里的w和b的数量可以计算:
w:由于是linear是全连接层,故有每一个输入和每一个输出都有权重w,b作为偏置只在输出层含有。举一个例子:在 nn.Linear(in_features=20, out_features=30) 中:
w有(20*30)总共600个,b有30个。
pytorch官方文档例子解读:
m = nn.Linear(20, 30)
input = torch.randn(128, 20)
output = m(input)
print(output.size())
#result
torch.Size([128, 30])
这里首先实例化了一个m,将20给维度的输入转化为30个维度的输出。
数输入input是一个张量,有128个样本,每个样本有20个特征。
tensor([[ 0.4160, 0.2219, 0.1617, ..., 0.3385, -0.4773, -1.2973],
[ 1.2581, 0.8071, 0.3226, ..., 0.3419, -0.1757, -0.5805],
[-0.9781, -0.1614, -2.6135, ..., -0.0666, -0.1508, 0.5626],
...,
[-1.1205, -1.8493, -1.7808, ..., -0.0452, -1.0787, 0.8964],
[-0.9551, 2.2677, 1.3870, ..., -0.0458, 0.4140, 0.2278],
[ 0.1666, -0.4004, 0.5973, ..., -0.9482, 1.4818, -1.1237]])
很大的一个矩阵is't it?
现在我们需要进行仿射变换:
调用linear
得到的结果变成了128个维度为30的矩阵。
1066

被折叠的 条评论
为什么被折叠?



