PyTorch的nn.Linear()详解

PyTorch的nn.Linear()是用于设置网络中的全连接层的需要注意的是全连接层的输入与输出都是二维张量,一般形状为[batch_size, size],不同于卷积层要求输入输出是四维张量。其用法与形参说明如下:

  in_features指的是输入的二维张量的大小,即输入的[batch_size, size]中的size
  out_features指的是输出的二维张量的大小,即输出的二维张量的形状为[batch_size,output_size],当然,它也代表了该全连接层的神经元个数
从输入输出的张量的shape角度来理解,相当于一个输入为[batch_size, in_features]的张量变换成了[batch_size, out_features]的输出张量。
用法示例:

import torch as t
from torch import nn

# in_features由输入张量的形状决定,out_features则决定了输出张量的形状 
connected_layer = nn.Linear(in_features = 64*64*3, out_features = 1)

# 假定输入的图像形状为[64,64,3]
input = t.randn(1,64,64,3)

# 将四维张量转换为二维张量之后,才能作为全连接层的输入
input = input.view(1,64*64*3)
print(input.shape)
output = connected_layer(input) # 调用全连接层
print(output.shape)

这段代码运行结果为:

input shape is %s torch.Size([1, 12288])
output shape is %s torch.Size([1, 1])
import torch

x = torch.randn(128, 20)  # 输入的维度是(128,20)
m = torch.nn.Linear(20, 30)  # 20,30是指维度
output = m(x)
print('m.weight.shape:\n ', m.weight.shape)
print('m.bias.shape:\n', m.bias.shape)
print('output.shape:\n', output.shape)

# ans = torch.mm(input,torch.t(m.weight))+m.bias 等价于下面的
ans = torch.mm(x, m.weight.t()) + m.bias   
print('ans.shape:\n', ans.shape)

print(torch.equal(ans, output))


m.weight.shape:
  torch.Size([30, 20])
m.bias.shape:
 torch.Size([30])
output.shape:
 torch.Size([128, 30])
ans.shape:
 torch.Size([128, 30])
True

为什么 m.weight.shape = (30,20)?

答:因为线性变换的公式是:

先生成一个(30,20)的weight,实际运算中再转置,这样就能和x做矩阵乘法了

nn.LinearPyTorch中的一个类,用于定义一个全连接层。它接受两个参数,输入特征数和输出特征数。通过调用该类的实例,可以创建一个全连接层模型。 引用\[1\]中的代码展示了如何使用nn.Linear创建一个全连接层模型。在这个例子中,输入特征数为1,输出特征数为2。模型的结构包括一个线性层和一个ReLU激活函数。 引用\[2\]中的代码展示了另一个例子,使用nn.Linear实现了一个全连接层。在这个例子中,输入特征数为5,输出特征数为3。 引用\[3\]中的代码演示了如何使用nn.Linear进行预测。在这个例子中,输入特征数为2,输出特征数为1。通过将输入样本传递给模型,可以得到一个输出结果。 总结来说,nn.LinearPyTorch中用于定义全连接层的类,可以根据需要设置输入特征数和输出特征数,然后使用该类创建一个全连接层模型。 #### 引用[.reference_title] - *1* *2* [Pytorch入门之一文看懂nn.Linear](https://blog.csdn.net/MR_kdcon/article/details/108918272)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Pytorch nn.Linear的基本用法与原理详解](https://blog.csdn.net/zhaohongfei_358/article/details/122797190)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值