机器学习分为监督学习和非监督学习,监督学习应用广泛
监督学习的两种主要类型是分类和回归
非监督学习:1、聚类:没有标签,即没有正确的答案,我们尝试从数据中找到某种规律(聚类算法:这是一种非监督学习算法,获取没有标签的数据并尝试自动将他们分组到类中),互联网推荐相关的文章(关键词Panda、Zoo),市场群体细分(类似市场分析) unsupervised
Jupyter的使用
J->代价函数(成本函数)
J(w)的目的就是找到一个最小J(成本)
Alpha是学习率(0~1之间),太小->收敛慢,太大->无法收敛、发散
到weak2-Day3
机器学习:找到函数
输入->向量,矩阵,序列
标记是十分费事的
Pre-train:训练没有标注的训练集,在下游任务中实现较好的结果
强化学习:不知道如何标注资料的时候(下围棋:人也不知道最优解是哪个)
异常检测:具备回答“我不知道”的能力。
可解释性AI:得出结果并得出原因
基础能力:微积分、线性代数、概率论、编写程序能力
课程专注于众多模型中的深度学习,
Kaggle:就是一个线上平台,机器学习的比赛平台
机器学习的两大任务:
Regression回归,得到明天的pm2.5的数值
Classification分类,yes/no
棋盘上19X19个位置
- 写出一个带有未知数的函数 y=wx1+b
- 定义损失函数Loss,L(b,w),例如L(0.5k,1)->y=0.5k+x1,将已知的数据x带入后得到y,算出残差,label->正确的数值,算出每一个误差e,求和取平均==L
- 最佳化的问题,找出w,b让L最小,先只看w,随机选取一个w的值,w = w -(学习率)η * (L对w的偏导),
学习率又称为步长,这是一种梯度下降的方法。
机器学习中需要自己定义的参数:hyperparameters
Loss是自己定义的(所以loss曲线可以是一个负数),是估测的值和正确的值的差的绝对值,当偏导的值==0的时候,确定w,有可能并不能找到使loss最小的w,
局部最优->Local minima
全局最优->global minima
Linear model:线性模型
Bias:偏差
将数据集加载的函数
Batch_size->打包的大小
.shape():查看数据维度
降维
升维
合并
机器学习
2022.08.11
torch.backends.cudnn.benchmark有什么用?
针对网络模型固定、输入参数固定的场景,将上述变量设置为True可以增加训练效率。
cuDNN是英伟达为深度神经网络(DNN)设计的GPU加速库,针对卷积等操作进行了很多优化,Pytorch等深度学习框架会使用cuDNN加速。
卷积有多种实现方式,每种卷积算法都有特定的优势。一种简单的优化方式是针对神经网络中不同的层使用不同的卷积实现方式。决定了每层最快的实现方式后,在运行整个网络就会提升算法效率。
将上面的值设置为True,Pytorch就会针对模型的卷积层进行预先的优化,即针对每一层卷积都寻找最快的实现算法,进而提升整体效率。如此,便可在模型启动的时候额外增加一点预处理时间,而大幅度减少整体训练时间。
影响卷积运算速度的因素有
卷积层本身的参数,如卷积核尺寸,步长,填充,输出通道个数。
输入的参数,如输入的通道数,宽,高等
因此如果上面影响卷积速度的参数频繁的变化,则将torch.backends.cudnn.benchmark设置为True就不是明智的选择。因为在每次变化之后,算法都会重新预处理,预处理如果做太多次,也是很浪费时间的。
大部分的卷积神经网络的模型卷积层参数和输入参数都是固定的,因此可以利用上述方式提高效率。
代码加在哪里?
torch.backends.cudnn.benchmark=True
这行代码加在开头就好
激活函数
一、sigmoid(最经典的激活函数)
最经典的激活函数
输出范围(0,1)
它把输入值做非线性映射为0到1的值,保证了严格单调递增。
缺点也很明显,1.如果输入的值绝对值过大,该函数的输出值将逼近0或1,反向传递时将导致梯度消失,2.幂运算求解耗时严重,3.深层网络收敛缓慢(均值不为0)
二、tanh
输出范围(-1,1)
相比sigmoid,解决了0均值的问题,但另外两个缺点仍然存在
三、Relu
不会在输入为正数时出现饱和,faster(计算速度和收敛速度)
缺点
1.不是0均值,2.dead relu problem由于输入为负值时梯度为0,参数不会更新,没初始化或者lr设置过大时发生(解决方法:初始化和设置一个较好的learning rate)
2022.08.28
先进行一层神经网络然后激活然后经过一层神经网络再加上x求和,再把和去进行激活
用Relu函数激活
线性层:没有激活函数Linear()
残差分支至少有两层,一层的话就会像线性层
下采样可以用池化层或者卷积操作等方法
Resnet用global average pooling layer(全局平均池化层)和1000的类别的全连接层来代替vgg最多参数众多的全连接层,FLOPs(每秒钟需要的浮点运算次数)
如上图
1X1的卷积:降维、升维、减少参数量
1X1的卷积->卷积核是1X1,通过增大或降低输出通道的大小来进行升维和降维
Dropout和bn层(batch normalization)不能同时存在
Fully-convolutional for:不是一个全卷积的网络,而是将图像缩放到不同的尺度,将不同尺度的图像进行融合
模型结果本身决定模型上限,训练调参只是在逼近这个上限
Zero-padding:对多出来的地方进行补零
残差网络比不带残差网络收敛速度快
标准差是衡量数据分布的离散程度,标准差越大,数据越离散
0表示y方向上的拼接,1表示x方向上的拼接