21.神经网络-线性层及其他层介绍

一、神经网络其他结构

1. 正则化层

神经网络中的正则化(Regularization)主要作用是‌防止模型过拟合(Overfitting),提高模型的泛化能力‌。

‌抑制过拟合‌:通过惩罚复杂的模型结构或过大的权重值,避免模型对训练数据中的噪声过度敏感。

‌提高泛化能力‌使模型在面对新数据时也能保持稳定的预测性能,缩小训练误差与测试误差之间的差距。

BatchNorm2d

BatchNorm2d-With Learnable Parameters

m = nn.BatchNorm2d(100)

BatchNorm2d-Without Learnable Parameters

m = nn.BatchNorm2d(100, affine=False)

input = torch.randn(20, 100, 35, 45)

output = m(input)

2.循环神经网络层(Recurrent)

包含RNN、LSTM等,适用于文字识别等序列任务

3.Dropout层

随机置零输入元素以防止过拟合

4.线性层(Linear)torch.nn.Linear

神经网络图示例

X1到Xd 的个数是in_features

out_features是g的个数,也就是L个。

关于是否有b,是根据torch.nn.Linear的参数bias是true还是false决定的。

weight是k,bias是b.

VGG16网络结构(线性层使用)

如上图,新绿色部分,是全连接层。

比如,我们有5 X 5 的图片,首先将其展平为1 X 25的,然后降低维度将25个变成3个。

将特征展平,可以使用flatten或者reshape.

1. 使用flatten

output = torch.flatten(images) # 自动展平

2. 使用reshape

output = torch.reshape(images, (1,1,1,-1)) # 显式指定形状

使用reshape展平代码示例
python 复制代码
# -*- coding: utf-8 -*-
# 作者:小土堆
# 公众号:土堆碎念
import torch
import torchvision
from torch import nn
from torch.nn import Linear
from torch.utils.data import DataLoader

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

dataloader = DataLoader(dataset, batch_size=64, drop_last=True)

class Tudui(nn.Module):
    def __init__(self):
        super(Tudui, self).__init__()
        self.linear1 = Linear(196608, 10)

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

tudui = Tudui()

for data in dataloader:
    imgs, targets = data
    print(imgs.shape)
    output = torch.reshape(imgs,(1,1,1,-1))
    print(output.shape)
    output = tudui(output)
    print(output.shape)

torch.Size(64, 3, 32, 32)

torch.Size(1, 1, 1, 196608)

torch.Size(1, 1, 1, 10)

如上,注意,由于我们reshape展平操作后打印出来的图片的shape的宽度尺寸是196608,所以我们在调用线性函数的时候,传入的in_features参数是196608,因为我们希望维度降低到10,所以传入的out_features参数是10.

执行完成线性降低维度后,我们打印出来的输出图片的size就是10的宽度尺寸了。

通过reshape展平后,输出的是四维张量,四维张量的定义如下

使用flatten展平代码示例

flatten的示例使用如下:

python 复制代码
# -*- coding: utf-8 -*-
# 作者:小土堆
# 公众号:土堆碎念
import torch
import torchvision
from torch import nn
from torch.nn import Linear
from torch.utils.data import DataLoader

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

dataloader = DataLoader(dataset, batch_size=64, drop_last=True)

class Tudui(nn.Module):
    def __init__(self):
        super(Tudui, self).__init__()
        self.linear1 = Linear(196608, 10)

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

tudui = Tudui()

for data in dataloader:
    imgs, targets = data
    print(imgs.shape)
    output = torch.flatten(imgs)
    print(output.shape)
    output = tudui(output)
    print(output.shape)

torch.Size(64, 3, 32, 32)

torch.Size(196608)

torch.Size(10)

我们发现使用flatten降低维度,与reshape输出的维度是4维的不同,flatten输出的图片的维度是1维的。

相关推荐
志尊宝2 分钟前
AI原生前端开发(025):端侧AI实战项目:智能笔记助手
人工智能·笔记·ai-native
白日放歌须纵久4 分钟前
Claude Skills 升级后行为漂移?用快照基线与黄金任务集做回归验证
人工智能
虎鲸不是鱼12 分钟前
AI 自动化逆向(二十六)「已解出」和「已解析」是两回事
人工智能·自动化·大模型·逆向·ai逆向
2601_9556624618 分钟前
搞笑视频配音怎么做?如何选择有辨识度的声音
大数据·人工智能·音视频·语音识别·媒体
云上先途121 分钟前
企业 AI 服务部署周期多久,会不会影响原有业务运转?
大数据·运维·人工智能
专注仿真41 分钟前
知识问答大模型-rag算法详解
人工智能·python·控制算法
汤姆宝库42 分钟前
收官深拆:第一性原理、产业电网与未来推演
大数据·人工智能·算法
u13013044 分钟前
GitHub 热榜项目:日榜(2026-10-27)
人工智能·github
AAA小肥杨1 小时前
transformer库中的kv cache分析与调试
人工智能