在这一章里主要学习了以下内容:
- 矩阵的线性变换,特征向量与特征值;
- 秩:如果矩阵的各行具有相关性,一般是低秩的;通常利用秩进行数据降维(如:利用最大秩压缩图像、奇异值分解)和低秩近似(如:图像去噪,将矩阵分解为一个低秩矩阵,一个稀疏矩阵);
- 机器学习的三要素:概率形式与函数形式的关系;
- 训练误差与泛化误差;
- 欠拟合与过拟合;
- 频率学派(关注可独立重复的随机试验中单个事件发生的频率,从观测数据中估计参数值)与贝叶斯学派(关注随机事件的可信程度,可能性=假设+数据)。
1.卷积神经网络的应用
- 分类、检索、检测、分割
- 人脸识别、人脸表情识别、图像生成、图像风格转化、自动驾驶
- Step1:Neural Network(搭建神经网络结构)
- Step2:Cost Fuction(找到合适的损失函数)
- Step3:Optimization(找到合适的优化函数,更新参数)
- 反向传播(BP)
- 随机梯度下降(SGD)
(2)损失函数--用来衡量吻合度的
- 常用分类损失:交叉熵损失
- 常用回归损失:均方误差(MSE)
1.卷积(Concolutional Layer)
- Pooling:保留了主要特征,减少参数和计算量,防止过拟合,提高模型泛化能力
- Pooling类型:最大池化(Max pooling)、平均池化(Average pooling)
3.全连接(FC layer)
- 两层之间所有神经元都有权重链接
- 通常在卷积神经网络尾部
- 全连接层参数两通常最大
1.AlexNet
- 大数据训练
- 非线性激活函数
- 解决了梯度消失问题(正区间)
- 计算速度特别快,只需判断输入是否大于零
- 收敛速度远快于sigmoid
- 防止过拟合:Dropout,Data augmentation
- Dropout:随机失活,训练时随机关闭部分神经元,测试时整合所有神经元
- Data augmentation:平移、翻转、对称;改变RGB通道强度(加入高斯噪声)
2.ZFNet
- 网络结构与AlexNet相同
- 将卷积层1中的感受野和步长减小
- 卷积层3,4,5中的滤波器个数变大
- 网络总体结构:
- 网络包含22个带参数的层
- 参数量大约为AlexNet的1/12(由于没有FC层)
- Naive Inception
- 多个卷积核并行,增加特征多样性
- 经过不同的卷积层,channel的个数增大,计算量增大
- Inception V2
- 插入1×1卷积核进行降维(绝大多数1×1卷积核只起到降维的作用)
- Inception V3
- 用小的卷积核代替较大的卷积核(用两个3×3的卷积核来代替一个5×5的卷积核),降低参数量
- Stem部分:卷积-池化-卷积-卷积-池化
- Inception:多个Inception拼接
- 输出:没有额外的全连接层(除了最后的类别输出层)
- 辅助分类器:解决由于模型深度过深导致的梯度消失的问题
5.ResNet
- 残差学习网络(deep residual learning network)
- 可以训练很深的网络
代码实现 链接
显示数据集中的部分图像

定义训练和测试函数
Test set: Average loss: 0.4685, Accuracy: 8607/10000 (86%)
Test set: Average loss: 0.2028, Accuracy: 9417/10000 (94%)

在全连接网络上训练
Test set: Average loss: 0.6033, Accuracy: 8059/10000 (81%)
小结:
- 用FC网络和CNN网络对MNIST数据进行分类,CNN网络的准确率比FC网络高约8%
- 从打乱像素顺序的实验结果来看,全连接网络的性能基本上没有发生变化,但是卷积神经网络的性能明显下降。这是因为对于卷积神经网络,会利用像素的局部关系,但是打乱顺序以后,这些像素间的关系将无法得到利用。
对于视觉数据,PyTorch 创建了一个叫做 totchvision 的包,该包含有支持加载类似Imagenet,CIFAR10,MNIST 等公共数据集的数据加载模块 torchvision.datasets 和支持加载图像数据数据转换模块 torch.utils.data.DataLoader。
下面将使用CIFAR10数据集,它包含十个类别:‘airplane’, ‘automobile’, ‘bird’, ‘cat’, ‘deer’, ‘dog’, ‘frog’, ‘horse’, ‘ship’, ‘truck’。CIFAR-10 中的图像尺寸为3x32x32,也就是RGB的3层颜色通道,每层通道内的尺寸为32x32。

首先,加载并归一化 CIFAR10 使用 torchvision 。torchvision 数据集的输出是范围在[0,1]之间的 PILImage,我们将他们转换成归一化范围为[-1,1]之间的张量 Tensors。
下面展示CIFAR10里面的一些图片:

接下来定义网络,损失函数和优化器:
训练网络:
从测试集中取出8张图片:

把图片输入模型:
Accuracy of the network on the 10000 test images: 60 %
小结:
- CIFAR10经过此网络训练后,准确率为:60%
- 通过改变网络结构来提高准确率
这里的 transform,dataloader 和之前定义的有所不同
初始化网络,根据实际需要,修改分类层。因为 tiny-imagenet 是对200类图像分类,这里把输出修改为200。
Accuracy of the network on the 10000 test images: 84%
- 使用一个简化版的 VGG 网络,就能够显著地将准确率由 64%,提升到 84.92%
- 对某些代码的细节还是不太理解,比如transform,dataloader里面各个部分的具体含义,修改之后有什么作用?
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/cjjbc/44799.html