Pytorch学习日记02-线性层及其他层简单实现应用

正则化层-BatchNorm2d

  引入正则化的目的:研究表明,正则化层的引入能够加快神经网络的训练速度。
torch.nn.BatchNorm2d(num_features, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True, device=None, dtype=None)
  该层使用简单,仅需考虑第一个参数 num_features。参数设置为输入数据的通道数即可。

#简单示例:
m = nn.BatchNorm2d(100)
# Without Learnable Parameters
m = nn.BatchNorm2d(100, affine=False)
input = torch.randn(20, 100, 35, 45)
output = m(input)

在这里插入图片描述

线形层

线性网络调参过程:

参数构成
torch.nn.Linear(in_features, out_features, bias=True, device=None, dtype=None)

  • in_features (int) – 输入的维度大小(形状大小)
  • out_features (int) – 输出的维度大小(形状大小)
  • bias (bool) – False, 没有偏执。
import torch
import torchvision.datasets
from torch import nn
from torch.utils.data import DataLoader

dataset = torchvision.datasets.CIFAR10("../DataSet/dataset", train=False, transform=torchvision.transforms.ToTensor(),
                                       download=False)
dataloader = DataLoader(dataset, 64)


class MyModule(nn.Module):
    def __init__(self):
        super().__init__()
        # 定义网络层接受的数据大小,输出的数据大小。拿一个具体规格的工具。像32号扳手一样
        self.Linear = nn.Linear(196608, 10)

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

mymodule = MyModule()

for data in dataloader:
    imgs, targets = data
    print(imgs.shape)
    input = torch.reshape(imgs, (1, 1, 1, -1))
    # 用于数据的展平 n维度变成一维度 和上面改变形状的功能一样。
    # input = torch.flatten(imgs)
    print(input.shape)
    output = mymodule(input)
    print(output.shape)
    break
 结果:
 	torch.Size([64, 3, 32, 32])
	torch.Size([1, 1, 1, 196608])
	torch.Size([1, 1, 1, 10])
切换后:
	torch.Size([64, 3, 32, 32])
	torch.Size([196608])
	torch.Size([10])

给一个长度

Dropout层

 能够随机使一些inputsut数据进行随机的变成0;有定的P的概率。主要为了防止过拟合,主要用于NLP。
torch.nn.Dropout2d(p=0.5, inplace=False)

  • p (float, optional)参数p为数据失活概率是多少!。
  • 需要的传输格式
### SENet 架构中的线性层功能 在SENet架构中,线性层主要存在于Squeeze-Excitation (SE) 模块内部。该模块旨在通过自适应地重新校准通道特性的重要性来改进网络性能[^2]。 #### Squeeze操作 在网络的特征图经过基础卷积处理之后进入SE模块,在此阶段会先执行全局平均池化(Global Average Pooling, GAP),这一步骤可以视为一种特殊的线性变换过程。GAP将每个空间位置上的响应压缩成单一数值表示整个特征映射的空间维度信息,从而实现从三维张量(C×H×W)到一维向量(C)的变化。这种转换本质上是一种降维方式,有助于后续计算资源的有效利用并减少过拟合风险[^3]。 #### Excitation操作 紧接着上述squeeze步骤得到的一维特征描述子会被送入两个全连接(FC)/线性层组成的mini-network中: 1. **第一个线性层**:负责将输入特征数C缩减至r倍较小的比例(r<C),即\( C/r \),其中r是一个超参数用于控制瓶颈效应的程度。这一设计不仅降低了计算复杂度还引入了额外的学习能力让模型能够聚焦于更重要的通道上。 ```python reduction_ratio = 16 # 假设比例因子为16 bottleneck_channels = input_channels // reduction_ratio fc1 = nn.Linear(input_channels, bottleneck_channels) ``` 2. **第二个线性层**:再由先前压缩后的状态恢复回原始大小C,最终输出一组与初始输入相同长度但携带更多语义意义权重值的新序列。这些权值随后被激活函数(如ReLU/Sigmoid)进一步加工形成最终的重加权系数应用于原特征图之上完成excite动作。 ```python fc2 = nn.Linear(bottleneck_channels, input_channels) sigmoid = torch.sigmoid(fc2(output_of_fc1)) ``` 因此,这两个连续排列的线性层共同构成了SE模块的核心部分之一,其目的在于动态调整各个通道间相对贡献程度以突出那些对于当前任务更为关键的信息片段,进而提升整体识别精度和泛化表现[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值