深度学习入门-08

基于小土堆学习

神经网络的搭建

神经网络pytorch官方文档:
pytorch官方说明文档

torch.nn是pytorch存放神经网络的工具箱

在这里插入图片描述

  1. Containers
    Containers(容器)在神经网络中通常不是一个特指的技术术语,但在编程和数据处理中,容器可以泛指用于存储和管理数据的结构,如列表、字典、数组等。在神经网络的上下文中,可能指的是封装了多个网络层的结构,如PyTorch中的nn.Module,它作为一个基类,用于构建所有神经网络模块。这些模块可以被视为包含(或封装)了网络层的容器。更好的叫法是骨架,也就是神经网络的骨架,后续填充不同内容既可以组成神经网络。

  2. Convolution Layers(卷积层)
    卷积层是卷积神经网络(CNN)的核心组成部分,主要用于特征提取。它通过卷积核在输入图像上滑动,进行局部区域的加权求和操作,从而提取图像的空间层次特征。卷积层的关键参数包括卷积核大小、步长(stride)、填充(padding)等。

  3. Pooling Layers(池化层)
    池化层也称为取样层,通常紧跟在卷积层之后,用于降低特征图的维度(即高度和宽度),同时保留重要的特征信息。池化操作有助于减少计算量,控制过拟合,并引入平移不变性。常见的池化方法包括最大池化(Max Pooling)和平均池化(Average Pooling)。

  4. Padding Layers(填充层)
    填充层主要用于在输入特征图的边界周围添加额外的像素值(通常是0或边界值的复制),以调整输入特征图的尺寸,从而控制卷积层或池化层的输出尺寸。填充可以增加特征图的尺寸(当填充值大于0时),也可以保持特征图的尺寸不变(通过适当的填充和步长设置)。

  5. Non-linear Activations(非线性激活)
    非线性激活函数是神经网络中引入非线性的关键,使得神经网络能够逼近复杂的非线性函数。常见的非线性激活函数包括ReLU(Rectified Linear Unit)、Sigmoid、Tanh等。这些函数作用于神经元的输出,增加网络的非线性表达能力。

  6. Normalization Layers(归一化层)
    归一化层用于对输入特征进行归一化处理,以加速网络训练过程并提高模型的泛化能力。常见的归一化方法包括BatchNorm(批量归一化)、LayerNorm(层归一化)、InstanceNorm(实例归一化)和GroupNorm(组归一化)等。这些方法通过调整特征的均值和方差,使得不同批次或不同样本之间的特征分布更加一致。

其他层或概念简述:
Recurrent Layers(循环层):如LSTM(长短期记忆网络)和GRU(门控循环单元),用于处理序列数据。
Transformer Layers:基于自注意力机制的层,广泛应用于自然语言处理任务。
Linear Layers(线性层):全连接层,用于将输入特征映射到输出空间。
Dropout Layers(丢弃层):在训练过程中随机丢弃一部分神经元,以防止过拟合。
Sparse Layers(稀疏层):设计用于处理稀疏输入数据的层。
Distance Functions(距离函数):用于计算样本间距离的函数,如欧氏距离、余弦相似度等。
Loss Functions(损失函数):用于评估模型预测值与真实值之间差异的函数,指导模型训练过程。
Vision Layers:专门用于视觉任务的层,如目标检测、分割等。
Shuffle Layers:可能指的是打乱数据顺序的层,但在标准神经网络层中不常见。
DataParallel Layers(多GPU分布式层):用于在多个GPU上并行处理数据的层,提高计算效率。
Utilities:工具类层,提供辅助功能,如数据预处理、后处理等。
Quantized Functions(量化函数):用于对模型参数或激活值进行量化的函数,以减小模型大小并提高推理速度。
Lazy Modules Initialization:懒加载模块初始化,即在需要时才初始化模块参数,以减少内存占用。

1. Containers
在神经网络框架中,如PyTorch,Containers 和 Module 是构建和管理神经网络的基础。以下是您提到的各个组件的详细解释:

  1. Module

Module 是所有神经网络模块的基类。在 PyTorch 中,torch.nn.Module 是构建神经网络的基石。它提供了很多基础功能,比如参数的注册、模块的嵌套、以及前向和后向传播的实现等。为神经网络提供基础的骨架。

  1. Sequential

Sequential 是一个顺序容器,用于按顺序包含多个子模块。在 PyTorch 中,torch.nn.Sequential 使得模型的构建变得非常简单,你只需要将各个层按顺序作为参数传递给 Sequential 即可。

  1. ModuleList
    ModuleList 是一个存储子模块的列表。与普通的 Python 列表不同,ModuleList 中的模块会被正确地注册,并且所有的参数也会被包含到整个模块的参数列表中。这使得 ModuleList 成为管理子模块列表的理想选择。

  2. ModuleDict
    ModuleDict 是一个存储子模块的字典。与普通的 Python 字典类似,但 ModuleDict 中的模块也会被正确地注册,并且所有的参数也会被包含到整个模块的参数列表中。这使得 ModuleDict 成为管理子模块字典的理想选择。

  3. ParameterList
    ParameterList 是一个存储参数的列表。与普通的 Python 列表不同,ParameterList 中的参数会被正确地注册,并且可以被整个模块识别和管理。这使得 ParameterList 成为管理参数列表的理想选择。

  4. ParameterDict
    ParameterDict 是一个存储参数的字典。与普通的 Python 字典类似,但 ParameterDict 中的参数也会被正确地注册,并且可以被整个模块识别和管理。这使得 ParameterDict 成为管理参数字典的理想选择。

总的来说,这些容器和模块类为构建和管理复杂的神经网络提供了强大的工具。通过组合使用这些组件,你可以轻松地构建出各种复杂度的神经网络模型。

import torch.nn as nn
import torch.nn.functional as F

class Model(nn.Module):#定义自己神经网络的名字
    def __init__(self):#初始化
        super().__init__()#模板调用初始化函数,是必须的
        self.conv1 = nn.Conv2d(1, 20, 5)#自己定义
        self.conv2 = nn.Conv2d(20, 20, 5)

    def forward(self, x):
    #输入是x,x会首先进行conv1(x)也就是卷积,再次经过非线性处理F.relu(self.conv2(x))
        x = F.relu(self.conv1(x))
        return F.relu(self.conv2(x))

输入送到神经网络中,神经网络会给一个输出,然后神经网络的运算步骤就是 forward。下图就是一个前向传播的例子。
在这里插入图片描述

在 PyTorch 中,forward(*input) 方法定义了每次调用模块时执行的计算。这是构建神经网络时最关键的方法之一,因为它定义了数据如何通过网络层进行前向传播。
forward 方法应该被所有子类重写,以定义特定的计算逻辑。例如,在一个简单的线性层(nn.Linear)中,forward 方法会定义输入数据如何与权重矩阵相乘并加上偏置。
重要的是要注意,虽然你需要在 forward 方法中定义前向传播的逻辑,但在实际使用中,你应该直接调用模块实例而不是 forward 方法本身。这是因为直接调用模块实例会触发所有注册的钩子(hooks),这些钩子可以用于各种目的,比如修改输入或输出、记录梯度等。而直接调用 forward 方法则不会触发这些钩子。

import torch
from torch import nn


class Test(nn.Module):
    def __int__(self):
        super(Test,self).__int__()
    def forward(self,input):
        output = input + 1
        return output

test = Test()
x = torch.tensor(1.0)
output = test(x)
print(output)

结果如下:

C:\Anaconda3\envs\pytorch_test\python.exe H:\Python\Test\nn_model.py 
tensor(2.)

进程已结束,退出代码0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值