神经网络入门实战:(十三)全连接层(线性层)搭建
简要介绍了神经网络中全连接层的使用
·
全连接层(线性层Linear Layers)搭建(Fully Connected Layer)
其作用及在神经网络中的最后一层中,具体是如何工作的,后面再详细解释
1)作用
- 特征提取:在卷积神经网络(CNN)中,线性层通常用于提取卷积层输出的高级特征,并将其映射到分类或回归任务所需的输出空间。
- 分类任务:在图像分类、文本分类等任务中,线性层通常作为网络的最后一层,用于输出每个类别的得分或概率。
- 回归任务:在回归任务中,线性层可以输出连续值的预测结果。
torch.nn.Linear(in_features, out_features, bias=True, device=None, dtype=None)
可以简单看成,in_features
指的是输入矩阵的列数(表示横向组合的每个向量的元素个数,即维度),out_features
指的是输出矩阵的列数。
线性层的线性变换是通过矩阵乘法和加上偏置来实现的,其数学表达式通常为:y = Wx + b
,W
的维度会根据 x
和 y
变化。其中:
- y: 是输出向量。
- W(weight): 是权重矩阵,其中的每个元素都是可学习的参数。会按照公式初始化
- x: 是输入向量。
- b(bias): 是偏置向量,也是一个可学习的参数。会按照公式初始化。
2)示例:
import torch
from torch import nn
import torchvision
from torchvision import transforms
from torch.utils.data import DataLoader
dataclass_transform = transforms.Compose([
transforms.ToTensor(),
])
test_dataset = torchvision.datasets.CIFAR10(root='E:\\4_Data_sets\\species recognition', train=False,transform=dataclass_transform, download=True)
test_dataloader = DataLoader(dataset=test_dataset,batch_size=64)
class testNet(nn.Module):
def __init__(self, in_channels, out_channels):
super(testNet, self).__init__()
self.Linear = nn.Linear(in_channels, out_channels)
def forward(self, input):
output = self.Linear(input)
return output
testNet_Instance = testNet(196608,10)
for data in test_dataloader:
imgs, labels = data
print(imgs.shape)
imgs_new = torch.flatten(imgs) # 将imgs摊平,变成一维数组
print(imgs_new.shape)
outputs = testNet_Instance(imgs_new)
print(outputs.shape)
------------------------------------------------------------------------------------------------------------------
# 运行结果
Files already downloaded and verified
torch.Size([64, 3, 32, 32])
torch.Size([196608])
torch.Size([10])
torch.Size([64, 3, 32, 32])
torch.Size([196608])
torch.Size([10])
......
上述代码最后会报错,不过不用管
3)注意
如果线性层的输入 size
不知道,一般会先不写线性层,前面的层写好之后,打印一下输出,就能获取其 size
。
上述代码可以先注释掉网络模型,在 for
循环中,先不写 outputs = testNet_Instance(imgs_new)
这行代码,将 imgs_new
打印出来看看其 size
。(灵活)
上一篇 | 下一篇 |
---|---|
神经网络入门实战(十二) | 神经网络入门实战(十四) |
更多推荐
所有评论(0)