从0开始深度学习(18)——层和块

1 层和块

1.1层

层是神经网络的基本组成单位。每一层由多个神经元(或单元)组成,这些神经元在前一层的输出上执行某种计算,并将结果传递给下一层。根据功能,层可以分为以下几种类型:

  • 输入层(Input Layer):接收外部数据并将其传递给网络。
  • 隐藏层(Hidden Layer):位于输入层和输出层之间,执行特征提取和表示学习。深度学习模型通常包含多个隐藏层。
  • 输出层(Output Layer):生成最终的输出,例如分类结果或预测值。

1.2 块

块通常指的是一组层的组合,具有特定功能或结构,能够执行某种复杂的操作或特征提取。块的设计目的是为了重用和组织模型的部分。例如:

  • 卷积块(Convolutional Block):通常包括卷积层、激活函数和归一化层的组合。
  • 残差块(Residual Block):包含跳跃连接(skip connections),可以帮助模型训练更深的网络。
  • 循环块(Recurrent Block):包含一个或多个循环层(如LSTM或GRU),用于处理序列数据。

1.3 以多层感知机为例

在这里插入图片描述
多个层组合成块,然后块又与块组合形成更大的模型。

从编程的角度来看,块由类(class)表示。 它的任何子类都必须定义一个将其输入转换为输出的前向传播函数, 并且必须存储任何必需的参数。 注意,有些块不需要任何参数。 最后,为了计算梯度,块必须具有反向传播函数。

2 自定义块

在实现我们自定义块之前,我们简要总结一下每个块必须提供的基本功能:

  1. 将输入数据作为其前向传播函数的参数。
  2. 通过前向传播函数来生成输出。请注意,输出的形状可能与输入的形状不同。
  3. 计算其输出关于输入的梯度,可通过其反向传播函数进行访问。通常这是自动发生的。
  4. 存储和访问前向传播计算所需的参数。
  5. 根据需要初始化模型参数。

在下面的代码片段中,我们从零开始编写一个块。 它包含一个多层感知机,其具有256个隐藏单元的隐藏层和一个10维输出层。

自定义的MLP 类继承自 nn.Module,这是 PyTorch 中所有神经网络模块的基类,通过继承 nn.Module,可以利用 PyTorch 提供的很多功能,如参数管理和自动求导。

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

class MLP(nn.Module):
    def __init__(self):# 类的构造函数,用于初始化网络结构。
        super().__init__() # 调用父类的构造函数,确保父类 nn.Module 得到正确初始化。
        self.hidden=nn.Linear(20,256)
        self.out=nn.Linear(256,10)

    def forward(self,x):
        a=self.hidden(x)
        re=self.out(F.relu(a))
        return re

整段代码实现了一个基本的多层感知机模型,具有以下特点:

  1. 输入层接受 20 维特征。
  2. 隐藏层由一个线性层(输出 256 维)和 ReLU 激活函数组成。
  3. 输出层由另一个线性层(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青石横刀策马

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值