• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

tintin7790

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

PyTorch 深度学习基础

PyTorch 深度学习基础 01

2.4 神经网络常见层与数据处理流程

本阶段主要学习 PyTorch 中常见的神经网络组件,包括卷积层、池化层、激活函数、循环层以及全连接层。

学习重点不是简单记忆 API,而是理解:

  • 数据在神经网络中的流动过程
  • 每一层对 Tensor 形状和数据内容产生的变化
  • 不同网络结构适合处理的数据类型

预处理的流程大概是:plt读取,灰度化再转numpy,tensor,其次通过卷积或者池化得到特征,接着使用激活函数。

import torch
import torch.nn as nn
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image

img=Image.open("temp_1.jpg")
print(type(img))#<class 'PIL.JpegImagePlugin.JpegImageFile'>

gray=img.convert("L")
gray=gray.resize((512,512))

img_array=np.array(gray,
                   dtype=np.float32)


print(img_array.shape)
print(img_array.dtype)
#(512, 512)
#float32
plt.imshow(img_array,cmap="gray")
plt.axis("off")
plt.show()

H,W=img_array.shape

x=torch.from_numpy(img_array.reshape(1,1,H,W))

print(f"input shape {x.shape} ")#input shape torch.Size([1, 1, 512, 512]) 

maxpool2=nn.MaxPool2d(kernel_size=2,
                      stride=2)
y=maxpool2(x)

print(f"output shape {y.shape}")#output shape torch.Size([1, 1, 256, 256])

out=y.squeeze()

plt.imshow(out,cmap="gray")
plt.axis("off")
plt.show()

整体流程:

输入数据
   ↓
Tensor
   ↓
神经网络层
   ↓
特征表示
   ↓
输出结果

2.4.1 卷积层 Conv2d

基本概念

卷积层是 CNN(Convolutional Neural Network)的核心,用于从图像中提取局部特征。

图像本质上是一个二维数字矩阵:

Height × Width

其中每一个数字代表像素亮度。

卷积层通过卷积核(Kernel)在图像上滑动,对局部区域进行计算,从而提取:

  • 边缘
  • 纹理
  • 形状
  • 局部结构

Conv2d 输入格式

PyTorch 中:

nn.Conv2d()

要求输入格式:
这里因为比如卷积的conv2d要求的输入就是4的参数

[N, C, H, W]

分别表示:

参数 含义
N batch size,输入图片数量
C channel,通道数
H height,高度
W width,宽度

例如灰度图片:

torch.Size([1,1,512,512])

表示:

  • 1张图片
  • 1个灰度通道
  • 高512
  • 宽512

手动实现卷积

使用:

kernel = torch.tensor([
    [1,0],
    [0,1]
])

模拟卷积核。

卷积过程:

输入区域:

1 2
3 4

卷积核:

1 0
0 1

计算:

1×1 + 2×0 + 3×0 + 4×1

=5

通过滑动窗口,可以得到完整的 Feature Map。

Conv2d 参数

参数 作用
in_channels 输入通道数
out_channels 输出特征图数量
kernel_size 卷积核大小
stride 步长
padding 边缘填充
bias 是否加入偏置

2.4.2 池化层 Pooling

为什么需要池化?

池化层用于降低特征图尺寸,主动压缩特征图,更稳定的特征,减少计算量,本质是采样。

常见:

nn.MaxPool2d()
nn.AvgPool2d()

作用:

  • 降低计算量
  • 减少无关细节
  • 提高模型鲁棒性

CNN 中:

图片

↓

Conv2d

↓

Feature Map

↓

Pooling

↓

更小的 Feature Map

MaxPool2d

最大池化:

在窗口范围内选择最大值。

例如:

输入:

1 2
5 6

结果:

max(1,2,5,6)=6

代码:

nn.MaxPool2d(
    kernel_size=2,
    stride=2
)

含义:

  • kernel_size=2

使用 2×2 窗口

  • stride=2

每次移动两个像素


AvgPool2d

平均池化:

计算窗口内平均值。

例如:

1 2
5 6

结果:

(1+2+5+6)/4=3.5

区别:

类型 操作
MaxPool 取最大值
AvgPool 取平均值

池化尺寸变化

输出公式:

[
H_

\left\lfloor
\frac{H_{in}+2P-K}{S}
\right\rfloor+1
]

例如:

输入:

512×512

使用:

kernel=2
stride=2

输出:

256×256

图片预处理流程

CNN 输入图片前,需要进行数据转换:

图片文件

↓

PIL.Image

↓

灰度化

↓

numpy数组

↓

Tensor

↓

[N,C,H,W]

↓

CNN

示例:

img = Image.open("temp.png")

gray = img.convert("L")

array = np.array(
    gray,
    dtype=np.float32
)

tensor = torch.from_numpy(
    array.reshape(1,1,H,W)
)

2.4.3 激活函数 Activation Function

为什么需要激活函数?

如果神经网络只有:

Linear
Linear
Linear

无论多少层,本质仍然是线性变换。
如果没有激活函数,多层相当于一层,都是Wx+b

激活函数提供:

非线性能力

使网络可以学习复杂模式:

  • 图像分类
  • 语音识别
  • NLP任务

ReLU

最常见激活函数:

[
f(x)=max(0,x)
]

输入:

[-3,-1,0,5]

输出:

[0,0,0,5]

作用:

  • 删除负响应
  • 保留有效特征
  • 加快训练

注意:

ReLU 修改的是:

Feature Map

不是原始图片。


CNN过程:

图片

↓

Conv2d

↓

Feature Map

↓

ReLU

卷积后的数字表示:

某种特征出现的强度

而不是像素亮度。


常见激活函数

函数 特点
Sigmoid 输出0~1
Tanh 输出-1~1
ReLU CNN最常用
Softplus ReLU平滑版本

2.4.4 循环层 RNN

为什么需要循环网络?

CNN主要处理空间关系:

例如:

图片中的像素关系

但是很多数据具有顺序:

  • 文本
  • 语音
  • 时间序列

例如:

我 喜欢 吃 苹果

词语顺序影响含义。


RNN

RNN:

Recurrent Neural Network

循环神经网络。

核心思想:

网络保存过去的信息。

公式:

[
h_t=f(x_t,h_{t-1})
]

其中:

  • x_t:当前输入
  • h_(t-1):之前隐藏状态
  • h_t:当前隐藏状态

隐状态 Hidden State

隐藏状态可以理解为:

神经网络的记忆。

例如:

小明今天去银行,因为他需要取钱

读到:

他

模型需要知道:

"他" 指的是小明。

这种上下文信息就是:

hidden state

LSTM

Long Short-Term Memory

普通 RNN 的问题:

长距离信息容易丢失。

LSTM 引入门机制:

  • 遗忘门
  • 输入门
  • 输出门

控制:

  • 什么信息保留
  • 什么信息删除
  • 什么信息输出

GRU

Gated Recurrent Unit

GRU 是 LSTM 的简化版本。

特点:

  • 参数更少
  • 训练更快

PyTorch 对应层

结构 PyTorch
RNN nn.RNN()
LSTM nn.LSTM()
GRU nn.GRU()

常见参数:

参数 意义
input_size 每个时间步输入维度
hidden_size 隐藏状态维度
num_layers 循环层数量
batch_first 是否batch优先

学习总结

本阶段理解了神经网络中的数据流动:

图片

↓

Tensor [N,C,H,W]

↓

Conv2d

↓

Feature Map

↓

Activation

↓

Pooling

↓

更高级特征


序列数据:

↓

RNN/LSTM/GRU

↓

Hidden State

↓

序列预测

核心理解:

  • Conv2d 负责提取局部特征
  • Pooling 负责压缩特征
  • Activation 提供非线性能力
  • RNN 负责处理具有顺序关系的数据
  • Hidden State 保存历史信息

深度学习模型本质:

数据

↓

数学变换

↓

越来越抽象的特征表示

↓

最终预测结果

posted on 2026-08-09 12:02  tintin7790  阅读(4)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3