python pytorch 模型构造函数、连接函数 通俗版

目录

      • 前言
      • 一、模型定义函数
        • 1. `nn.Linear`(全连接层)
        • 2. `nn.Conv2d`(卷积层)
        • 3. `nn.LSTM`(长短时记忆网络)
      • 二、连接函数
        • 1. `nn.ReLU`(激活函数)
        • 2. nn.Sigmoid
        • 3. nn.Softmax
      • 三、组合示例(搭积木)
        • . 分类模型模板
        • 2. 生成模型模板
      • **五、常见问题**
        • Q1:为什么要有激活函数?
        • Q2:全连接层和卷积层有什么区别?
        • Q3:如何选择激活函数?


前言

最近压力很大,所以没写那么细
书接上回

以下是对 PyTorch 中常见 模型构造函数(如 nn.Linear)和 连接函数(如 ReLU)的总结


一、模型定义函数

这些函数是神经网络的基本组件,用来定义数据在不同层之间的变换方式。

1. nn.Linear(全连接层)
  • 作用:把输入数据的所有特征“加权求和”,输出新的数值。
  • 参数
    • in_features:输入数据的特征数(如 10 表示输入是10个数字)。
    • out_features:输出数据的特征数(如 5 表示输出5个数字)。
  • 示例
    layer = nn.Linear(10, 5)  # 输入10维 → 输出5维
    x = torch.randn(3, 10)    # 3个样本,每个样本10个特征
    y = layer(x)              # 输出形状 [3,5]
    
  • 通俗理解:
    像一条流水线,把输入的10个数字,通过加权计算,变成5个新的数字。

2. nn.Conv2d(卷积层)
  • 作用:用“小窗口”扫描图片,提取局部特征(如边缘、纹理)。
  • 参数
    • in_channels:输入通道数(如RGB图片是3)。
    • out_channels:输出通道数(生成的特征图数量)。
    • kernel_size:卷积核大小(如 3 表示3x3的窗口)。
  • 示例
    layer = nn.Conv2d(3, 16, 3)  # 输入3通道 → 输出16通道,窗口3x3
    x = torch.randn(4, 3, 32, 32)  # 4张32x32的RGB图片
    y = layer(x)                   # 输出形状 [4,16,30,30](尺寸略缩小)
    
  • 通俗理解:
    用16种不同的滤镜扫描图片,每种滤镜负责找一种图案(比如横线、竖线)。

3. nn.LSTM(长短时记忆网络)
  • 作用:处理序列数据(如文本、时间序列),记住长期依赖。
  • 参数
    • input_size:输入的特征维度(如词向量维度是100)。
    • hidden_size:隐藏状态的维度(控制记忆容量)。
  • 示例
    layer = nn.LSTM(input_size=100, hidden_size=128)
    x = torch.randn(5, 3, 100)  # 序列长度5,批量大小3,每个词向量100维
    output, (h_n, c_n) = layer(x)  # 输出形状 [5,3,128]
    
  • 通俗理解:
    像一个有记忆的流水线,处理一句话时,能记住前几个词的信息。

二、连接函数

1. nn.ReLU(激活函数)
  • 作用:将负数变为0,正数保留,引入非线性。
  • 示例
    activation = nn.ReLU()
    x = torch.tensor([-2.0, 1.0, 0.5])
    y = activation(x)  # 输出 [0.0, 1.0, 0.5]
    
  • 通俗理解:
    像一个开关,只允许“有用”的信号通过(正数保留),过滤“噪声”(负数归零)。

2. nn.Sigmoid
  • 作用:将数值压缩到 [0, 1],常用于二分类输出概率。
  • 示例
    activation = nn.Sigmoid()
    x = torch.tensor([2.0, -1.0, 0.5])
    y = activation(x)  # 输出 [0.88, 0.27, 0.62]
    
  • 通俗理解
    把任意数值变成概率,0.5是分界线(如 >0.5 判定为“是”)。

3. nn.Softmax
  • 作用:将数值压缩到 [0,1],且所有输出和为1,用于多分类概率。
  • 示例
    activation = nn.Softmax(dim=1)
    x = torch.tensor([[1.0, 2.0, 3.0]])
    y = activation(x)  # 输出 [[0.09, 0.24, 0.67]]
    
  • 通俗理解
    把分数转化为“投票比例”,最高分对应最可能的类别。

三、组合示例(搭积木)

. 分类模型模板
model = nn.Sequential(
    nn.Linear(784, 256),  # 输入784维(如28x28图像)
    nn.ReLU(),             # 引入非线性
    nn.Linear(256, 10)    # 输出10个类别的分数
    # 无需 Softmax,CrossEntropyLoss 会处理
)
2. 生成模型模板
generator = nn.Sequential(
    nn.Linear(100, 256),   # 输入随机噪声(100维)
    nn.ReLU(),
    nn.Linear(256, 784),   # 输出784维(生成28x28图像)
    nn.Tanh()              # 将像素值压缩到 [-1, 1]
)


五、常见问题

Q1:为什么要有激活函数?

没有激活函数,神经网络只能学习线性关系(比如直线),无法处理复杂问题(如分类圆圈状数据)。

Q2:全连接层和卷积层有什么区别?
  • 全连接层:每个输入和输出都连接,适合处理表格数据。
  • 卷积层:局部连接+权重共享,适合处理图像、音频等空间/时序数据。
Q3:如何选择激活函数?
  • 默认先用 ReLU(速度快,效果好)。
  • 输出层根据任务选择:
    • 二分类 → Sigmoid
    • 多分类 → 不用激活(交给 CrossEntropyLoss
    • 回归 → 无激活(直接输出数值)

通过组合这些“积木”,你可以构建从简单到复杂的神经网络模型!

你可能感兴趣的:(python,pytorch,开发语言,人工智能)