- Module 6: 人工智能神经网络基础-3 训练神经网络,深度神经网络
推荐教学时长:15分钟
- 区分于
可训练参数
,超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。通常情况下,需要对超参数进行优化,给学习机选择一组最优超参数,以提高学习的性能和效果。 - 比如:模型的学习率 learning rate,深层神经网络隐藏层数 hidden layers(在本章后面会介绍)
- 训练集:用来训练模型内参数的数据集
- 验证集:验证集通常用于调整超参数,根据几组模型验证集上的表现决定哪组超参数拥有最好的性能。
- 测试集:评估模型的泛化能力(看模型有没有出现过拟合)
- 欠拟合: 欠拟合是指模型不能在训练集上获得足够低的误差。换句换说,就是模型复杂度低,模型在训练集上就表现很差,没法学习到数据背后的规律。
- 过拟合: 过拟合是指训练误差和测试误差之间的差距太大。换句换说,就是模型复杂度高于实际问题,模型在训练集上表现很好,但在测试集上却表现很差。模型对训练集"死记硬背"(记住了不适用于测试集的训练集性质或特点),没有理解数据背后的规律,泛化能力差。
- 一个Epoch就是将所有训练样本训练一次的过程
- 目的:在神经网络中传递完整的数据集一次是不够的,而且我们需要将完整的数据集在同样的神经网络中传递多次。但请记住,我们使用的是有限的数据集,并且我们使用一个迭代过程即梯度下降来优化学习过程。如下图所示。因此仅仅更新一次或者说使用一个epoch是不够的。
- 随着epoch数量增加,神经网络中的权重的更新次数也在增加,曲线从欠拟合变得过拟合。
- 所谓Batch就是每次送入网络中训练的一部分数据,而Batch Size就是每个batch中训练样本的数量,这是另一个
超参数
- 优点:通过并行化提高内存的利用率,提高训练速度。适当Batch Size使得梯度下降方向更加准确。
- Extra: 其他分类模型评估指标请同学自行阅读 https://easyai.tech/ai-definition/accuracy-precision-recall-f1-roc-auc/
推荐教学时长:15分钟
- 训练,测试数据
- 使用 torch.utils.data 模块的 Dataset
- 将整个数据集分成训练集和测试集
- 定义神经网络结构
- 设置训练模型,参数
- optimizer 就是优化器,包含了需要优化的参数有哪些,
- loss_func 就是我们设置的损失函数
- epoch 是指所有数据被训练的总轮数
- 训练模型
- 使用当前模型 <训练的参数> 去预测数据相对应的标签 (label),即
前向传播
criterion()
计算【损失函数】结果, (output, target) 作为输入 (output为网络的输出,target为实际值)loss.backward
反向传播 - 利用损失函数反向传播计算梯度optimizer.step
梯度下降,更新模型参数 - 用我们定义的优化器将每个需要优化的参数进行更新- 在训练过程中print出来训练中的损失函数结果(观察损失函数的变化)
- 使用当前模型 <训练的参数> 去预测数据相对应的标签 (label),即
- 测试模型
- 模型在 <训练集> 和 <测试集> 上的表现可视化
推荐教学时长:10分钟
图一是perceptron(浅层神经网络);图二是深度神经网络(有>=1个隐层)
引导学生回答下列问题:
- 多层神经网络有什么作用?
- 观察overfit, underfit (打开test data的distribution)
- 过度fit原始数据集
用代码搭建,训练深度神经网络(对于图片数据进行分类)。卷积神经网络introduction
Extra:对于python如何写面向对象编程,这里是一个参考网站:https://www.runoob.com/python/python-object.html