美文网首页
torch.nn.Linear()详解

torch.nn.Linear()详解

作者: 马尔代夫Maldives | 来源:发表于2022-09-12 16:26 被阅读0次

torch.nn.Linear就是神经网络中的线性层,可以实现形如y=X*weight^T+b的功能。
代码很简单(见后图),但有许多细节需要声明:

1)nn.Linear是一个类(继承自nn.Module),使用时需要先实例化;

2)实例化时,nn.Linear需要输入两个参数,in_features为上一层神经元的个数(输入),out_features为这一层的神经元个数(输出);

3)不需要人为定义w和b,内部自动定义。(可以调用属性weight和bias来查看生成的w和b。其中w是必然会生成的,b可指定是否生成。默认 bias = True。如果我们不希望拟合训练b,实例化时将bias设置为False即可。)

4)由于w和b是随机生成的,所以同样的代码多次重复运行的结果是不一样的。如果希望每次相同,则可以使用torch中的random类。如:torch.random.manual_seed(420) ,人为设置随机数种子。

5)由于不需要定义常量b,因此在特征张量中,不需要留出与常数项相乘的那一列,只需要输入特征张量。

6)输入层只有一层,并且输入层的结构(神经元的个数)由输入的特征张量X决定,因此在PyTorch中构筑神经网络时,不需要定义输入层。

7)实例化之后,将特征张量输入到实例化后的对象中。

Linear.png

举例:

import torch
my_linear = nn.Linear(2, 3)  # in_features,out_features

print(my_linear.weight)  # 查看初始权重
print(my_linear.bias)  # 查看初始偏置项
# 输出:
Parameter containing:
tensor([[ 0.3783,  0.1461],
        [ 0.2027, -0.4043],
        [ 0.1937,  0.2775]], requires_grad=True)
Parameter containing:
tensor([ 0.0334,  0.4122, -0.6125], requires_grad=True)

input_data = torch.randn(10, 2) # 生成输入数据(data_number,in_features)
output_data = my_linear(input_data)  # 利用模型对输入数据进行处理

print(output_data)  # 查看输出结果
print(output_data.size())  # 查看输入数据的size,(data_number,out_features)
# 输出:
tensor([[ 0.2690, -0.1473, -0.2038],
        [ 0.6059,  1.3554, -0.5868],
        [ 0.2602,  0.2520, -0.3781],
        [-0.3441,  0.5592, -0.9525],
        [-0.4214,  0.8922, -1.1494],
        [-0.4387,  0.5287, -1.0094],
        [-0.3729,  0.7819, -1.0672],
        [ 0.3403,  1.0366, -0.6486],
        [ 0.2101,  0.3200, -0.4435],
        [-0.6475,  0.9181, -1.3268]], grad_fn=<AddmmBackward0>)
torch.Size([10, 3])

参考:
忘记参考哪个网页了,但肯定是参考的。见到可提醒我!谢谢

相关文章

网友评论

      本文标题:torch.nn.Linear()详解

      本文链接:https://www.haomeiwen.com/subject/mjocortx.html