前情提要:
因为有鞍点的存在,可能会导致深度学习在循环中共,无法继续往梯度下降的方向进行。
所以我们选择了随机梯度下降算法,而不是求平均loss的梯度下降算法。
我的理解就是使用不确定性的好来对抗确定性的差

00:04:34.963
image.png

把所有样本进行了前馈,和反向传播
就是一轮epoch
00:04:45.488
image.png
image.png
每次训练中所用的样本数量
image.png
这里没有上上上图中的for i in range
所以这里就是所有的数据都进行随机梯度下降计算

00:05:09.337
image.png
iteration(这块理解比较抽象)
batch分了多少个
比如有1000个数据
100是batch-size
经过了10次的迭代,以100 batch-size的方式实现了1000个数据训练

shuffle 打乱顺序
00:07:09.352
image.png
00:07:53.784
image.png
00:08:41.339
image.png

00:09:51.557
image.png
00:10:05.801
image.png

用来加载数据,可以实例化一个dataloader

dataset是一个抽象类,不能实例化

00:10:45.689
image.png

getitem是实例化之后,可以进行下标搜索
00:11:46.675
image.png
len返回数据条数
1.
self.len = xy.shape[0] # shape(多少行,多少列)

00:14:13.005
image.png

构造数据集的选择:

  1. 把所有数据data中,通过init加载进来,通过getiemc传出去
    适用于图像数据集不大
  2. init中只是进行初始化,定义一个列表,把数据的文件名放到列表中。可能还会涉及到读取标签,如果标签不大也可以直接用init读
    图像语音-》无结构的数据

dataloader
00:17:55.684
image.png
四个参数
传入数据集
batchsize容量是多少
是否打乱(最好还是打乱
是否使用并行进程

windows中编程与linux在使用多线程的区别
如果选择num_worker,其实也就是多线程,windows中则需要加入 if_name_=…

00:21:27.746
image.png

00:21:53.647
image.png
00:22:57.977
image.png

这个是方法1,把所有的数据都保存到内存当中了

00:24:18.609
image.png
00:27:12.228
image.png
使用enumerate为了获取迭代次数
trainloader中的数据放到data中
然后经过inputs和label分割成xy

剩的东西都没啥区别

00:28:02.535
image.png

00:28:14.598
image.png

00:28:25.829
image.png

00:28:31.901
image.png

  1. 准备数据集
  2. 设计模型
  3. 构造损失和优化器
  4. 训练循环
    这一节在训练循环中加入了mini-batch

trainloader就是构建了batch

00:30:32.101
*image.png

一些提供的数据集

00:33:15.926
image.png

不做shuffle为了便于观察

00:34:38.705
image.png

作业
kaggle
使用dataloader构造一个分类器