深度学习总结
2024-11-29 14:49:02 0 举报
AI智能生成
深度学习框架
作者其他创作
大纲/内容
数据处理
数据准备
数据集选择
公开数据集
tensorflow_dataset库导入数据
keras数据集
tensorflow.keras.dataset
mnist
IMDB
CIFAR10
PyTorch
.torchvision加载公开的图像
.torchtext文本数据集
OpenML
.dataset导入数据
OpenCV加载和处理图像数据
import cv2
Scikit-learn经典机器学习数据集
pandas
加载csv或其他格式的数据集
自定义数据集
torch.utils.data.Dataset
方法
继承 torch.utils.data.Dataset
实现 __len__() 方法返回数据集长度
实现 __getitem__() 方法返回单个样本
数据加载
torch.utils.data.DataLoader
创建一个批量生成样本的迭代器
参数
Dataset
batch_size
shuffle
num_workers
数据预处理
对图像
调整尺寸、归一化
torchvision.transforms
数据增强
torchvision.transforms
PyTorch图像增强
tensorflow.keras.preprocessing.image.ImageDataGenerator
图像增强
对文本
分词、去停用词、词嵌入
常用包
tensorflow.keras.preprocessing.text
文本序列化、填充
nltk.tokenize: 用于分词和句子拆分
spacy
分词和命名实体识别
jieba
中文分词
数值数据
归一化、标准化、缺失值填充、异常值检测等
sklearn.preprocessing
sklearn.preprocessing.StandardScaler
标准化
sklearn.preprocessing.MinMaxScaler
归一化
pandas
时间序列数据
去趋势、平稳化、填补缺失值等
pandas
处理时间序列
statsmodels
用于时间序列分析
格式转换
转换为tensor或其他格式
从ndarray
torch.from_numpy()
从列表
torch.tensor()
图像数据
torchvision.transforms.ToTensor()
文本数据
先转换为索引
tensorflow.keras.preprocessing.textTokenizer
再转换为张量
torch.tensor()
划分数据集
训练集
测试集
模型构建
直接使用现有模型
torchvision.models.resnet18
VGG
torch.nn.LSTM
自定义模型
方法
继承
torch.nn.Module
定义 __init__ 方法初始化网络层
CNN
层级结构
卷积计算层:CONV Layer
深度:depth
步长:stride
填充值:zero-padding
参数共享机制;每个神经元连接数据窗的权重是固定的
RELU激励层:RELU Layer
sigmod
sigmod数值越大,求导导致为0,导致梯度弥散
Tanh
ReLU
收敛快,求梯度简单,较脆弱
Leaky ReLU
不会饱和(挂掉),计算很快
ELU-指数线性单元
ReLU所有优点都有,不会挂掉,输出均值趋于0,因为指数存在,计算量略大
Maxout
多了好些参数,计算为线性的,不会饱和和挂掉,两条直线拼接而成
池化层:Pooling layer
夹在连续的卷积层中间
压缩数据和参数的量,减小过拟合
分为max pooling和average layer
全连接层:FC Layer
两层之间所有神经元都有权重连接
通常全连层在卷积神经网络的尾部
典型CNN
LeNet
Input -> cov(5*5) -> polling(2*2) -> cov(5*5) -> pooling(2*2) -> FC -> RELU -> FC -> soft max
AlexNet
Input -> conv1(11*11) -> max pool1(3*3) -> conv2(5*5) -> max pool2(3*3) -> norm2 -> conv3(3*3) -> conv4(3*3) -> conv4(3*3) -> conv5(3*3) -> max pool3(3*3) -> FC(4096) -> FC(4096) -> FC(1000)
VGG
Input -> [conv3]*2 -> pool2 -> [conv3]*2 -> pool2 -> [conv3]*3 -> pool2 -> [conv3]*3 -> pool2 -> [conv3]*3 -> pool2 ->FC(4096) -> FC(4096) -> FC(1000) -> soft-max
GoogleNet
Intercept module
1*1卷积核进行低成本计算
Input -> [conv(3*3)]*3 -> pool -> [conv(3*3)]*3 -> inception模块组 -> inception模块组 -> Inception 模块组 -> pool(8*8) -> logit(线性) -> softmax
ResNet
如果距离输入层太远,残查传回来的信号太弱,如果每一层学习一个独立的f(x)太难,直接打通皇城到蜀地的快速通道,把input直接送到后面的层次,每次只要比原始数据学习一个残查即可
全连接层占据Alexnet,VGGNet90%的参数量,googlenet减少全连接层,用全局平均池化层来代替
定义 forward 方法实现前向传播逻辑
CNN为例
Input
[[CONV->RELU]*N -> Pool?]*M
[FC -> ReLU]*K
FC
CNN
训练模块
Batch Normalization
做法
期望激励过后的结果为高斯分布,那么手动修正一下;
根据均值和方差做归一化
通常在激励层之后做
损失函数
交叉熵损失
nn.CrossEntropyLoss()
均方误差
nn.MSELoss
优化
过拟合
正则化
L1正则化,加入l|w|,不相关的输入因为得不到权重被抑制,截断效应
L2正则化,加入lw2,减小每个特征的权重,稀疏性效应
L2+L1正则化
最大范数约束
Dropout
torch.nn.Dropout
每次关掉一部分感知器,得到一个新模型,最后做融合,不至于听一家之言
tensorflow.keras.layers.Dropout
模型优化
torch.optim
SGD
torch.optim.SGD
采样一个batch的数据
反向传播计算梯度(一个batch上的)
用这部分梯度迭代更新权重参数
向前计算得到损失loss
Adam
torch.optim.Adam
RMSprop
tensorflow.keras.optimizers
SGD
Adam
RMSprop
训练过程
前向传播
model()
梯度更新
optimizer.zero_grad()清除梯度
反向传播
loss..backward()
参数更新
optimizer.step()
模型评估
model.eval()模式
torch原生方法
correct = (preds == target).sum().item()
total = target.size(0)
accuracy = correct / total
print(f'Accuracy: {accuracy * 100:.2f}%')
total = target.size(0)
accuracy = correct / total
print(f'Accuracy: {accuracy * 100:.2f}%')
torchmetrics库
准确率Accuracy
torchmetrics.classification.Accuracy()
F1 Score
torchmetrics.classification.F1Score
精度Precision
torchmetrics.classification.Precision
召回率Recall
torchmetrics.classification.Recall
混淆矩阵(Confusion Matrix)
sklearn.metrics.confusion_matrix
模型保存
torch.save
torch.save(model.state_dict(), 'model.pth')
参数1为模型参数,参数2为保存模型参数的文件名
模型加载
load_state_dict
将加载的参数应用到模型中
torch.load
加载模型参数
model.load_state_dict(torch.load('model.pth'))
可视化
Matplotlib
TensorBoard
0 条评论
下一页