--------------------------------------------------------------------------------------------------------------
pytorch模型构建流程
在我们要用pytorch构建自己的深度学习模型的时候,
基本上都是下面这个流程步骤,无论是从自己写,还是阅读他人代码,按照这个步骤思想:
1、找数据定义 2、找model定义 3、找损失函数、优化器定义 4、主循环代码逻辑
直接去找对应的代码块,会简单很多
四大步骤:
1、输入处理模块 (X 输入数据,变成网络能够处理的Tensor类型)
2、模型构建模块 (主要负责从输入的数据,得到预测的y^, 这就是我们经常说的前向过程)
3、定义代价函数和优化器模块 (注意,前向过程只会得到模型预测的结果,并不会自动求导和更新,是由这个模块进行处理)
4、构建训练过程 (迭代训练过程,就是上图表情包的训练迭代过程)
这几个模块分别与上图的数字标号1,2,3,4进行一一对应!
--------------------------------------------------------------------------------------------------------------
- 机器学习四大分支:监督学习(序列生成、语法树预测、目标检测、图像分割)、
非监督学习(其目标在于数据可视化、数据压缩、数据去噪 降维、聚类)、
自监督学习、
强化学习 (智能体agent接收环境信息,学会选择使奖励最大化)
- 分类与回归术语:样本/输入、预测/输出、目标:真实值、预测误差/损失值、类别、标签、真值/标注、二分类/多分类、
多标签分类、标量回归、向量回归、小批量、批量:模型同时处理的一小部分样本。 - 模型评估:数据划分:训练集、验证集、测试集
- 打乱数据:简单留出验证、K折验证、带有打乱数据的重复K折验证
- 注意事项:数据代表性、8:2原则
时间箭头、时序数据不随机打乱
数据冗余、确保训练集和验证集无交集
- 数据预处理、特征工程、特征学习
- 数据预处理:
- 向量化
- 标准化--对每个特征分别标准化,使其均值为0、标准差为1
- 处理缺失值
- 特征提取
- 特征工程feature engineering---指将数据输入模型之前,利用算法对数据进行硬编码的变换,以改善模型效果。
本质:用更简单的表达方式表述问题,使得问题变得容易。--对于现代深度学习大部分特征工程是不需要的。 - 过拟合和欠拟合:降低过拟合的方法--正则化
- 减少过拟合方法:获取更多的训练数据、减少网络容量、添加权重正则化、添加dropout
- L1正则化 添加成本与权重系数的绝对值
- L2正则化/权重衰减 添加成本与权重系数的平方
- Dropout比率 是被设为0的特征所占的比例
- 减少过拟合方法:获取更多的训练数据、减少网络容量、添加权重正则化、添加dropout
- 数据预处理:
--------------------------------------------------------------------------------------------------------------
keras
model=models.Sequential( )
model.add(layers.Dense(16,activation='relu',input_shape=(10000,)))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(16,activation='relu'))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(1,activation='sigmoid'))
--------------------------------------------------------------------------------------------------------------
- 开发比基准更好的模型
- 最后一层的激活--sigmoid/不用
- 损失函数 分类-binary——crossentropy 回归——mse
- 优化配置——哪种优化器,学习率多少,使用rmsprop、默认学习率是稳妥的
- 模型正则化与调节超参数
- 添加dropout
- 尝试不同的架构:增加或减少层数
- 添加L1和L2正则化
- 尝试不同的超参数——比如每层的单元个数或者优化器的学习率
----------------------------------------------------------------------------------------------------------------
在编译和训练模型钱,一定要冻结卷积基,冻结一个或多个层是指在训练过程中保持其权重不变。