神经网络——线性层

发布于:2025-07-26 ⋅ 阅读:(19) ⋅ 点赞:(0)

在机器学习中,线性层(Linear Layer) 是一种基础的神经网络组件,也称为全连接层(Fully Connected Layer) 或密集层(Dense Layer)

其严格的数学定义为:对输入数据执行线性变换,生成输出向量。

具体形式为:
                Y=XW+b  
其中:

  • X 是输入张量,通常形状为 [批次大小, 输入维度]

  • W 是可学习的权重矩阵,形状为 [输入维度, 输出维度]

  • b 是可学习的偏置向量,形状为 [输出维度]

  • Y 是输出张量,形状为 [批次大小, 输出维度]

核心特性

  1. 参数共享:同一层内的所有输入神经元都通过权重矩阵 W 与输出神经元相连,权重在整个输入空间中共享。

  2. 线性变换:仅能表示线性函数,因此通常与非线性激活函数(如 ReLU)组合使用,以增强模型表达能力。

  3. 特征投影:本质上是将输入特征投影到新的特征空间,输出维度决定了新空间的维度。

线性网络: 

 


 

参数

  • in_features (int) – 每个输入样本的大小

  • out_features (int) – 每个输出样本的大小

  • bias (bool) – 如果设置为 False,该层将不学习加性偏置。默认值: True

 

 代码举例

import torch
import torchvision
from torch import nn
from torch.nn import Linear
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter

dataset = torchvision.datasets.CIFAR10("../torchvision_dataset", train=False,
                                       transform=torchvision.transforms.ToTensor(),
                                       download=True)

dataloader = DataLoader(dataset, batch_size=64)


class MyModule(nn.Module):
    def __init__(self):
        super().__init__()
        """
        下文:
        展开前:
        torch.Size([64, 3, 32, 32])
        展开后:
        torch.Size([1, 1, 1, 196608])
        """
        self.linear = Linear(196608, 10)

    def forward(self, input):
        output = self.linear(input)
        return output


module = MyModule()

for data in dataloader:
    imgs, targets = data
    print("原本图像尺寸", imgs.shape)
    # 把二维图片展开成一维的
    # imgs=torch.reshape(imgs,(1,1,1,-1))
    imgs = torch.flatten(imgs)
    print("展平后图像尺寸", imgs.shape)
    output = module(imgs)
    print("经过线性层处理后图像尺寸", output.shape)

 


网站公告

今日签到

点亮在社区的每一天
去签到