resnet残差网络-环境配置

基本概念

混淆矩阵

confusion matrix 也叫误差矩阵,是用于评估分类模型性能的重要工具,可以展示分类准确性。用n*n的矩阵来表示,通常用于二分类,也可以扩展到多分类问题。

在二分类中,混淆矩阵包含四个条目:

  • 真正例True Positives表示模型成功检测正类别
  • 真负例True Negatives成功检测负类别
  • 假正例False Positives错误将负类别样本分类为正类别
  • 假负例False Negatives错误将正类别样本分类为负类别
预测为正例 预测为负例
实际为正例 TP FN
实际为负例 FP TN

横纵坐标对不上可以通过转置来解决

这四个条目可以用于计算分类性能指标:

  • 准确率Accuracy模型正确分类与总样本数的比例:(TP+TN)/总样本数
  • 精确率Precision表示正类别样本中被正确分类的比例:TP/(TP+FP)
  • 召回率Recall成功识别正类别样本的比例:TP/(TP+FN)
  • F1分数F1 Score:精确率和召回率的调和平均值,用于考虑模型的综合性能

导入方式:from sklearn.metrics import confusion_matrix

参数:

  • y_true:实际标签(一维数组或列表)
  • y_pred:预测标签
  • labels:默认情况下考虑所有不同类别,如果指定此参数,可以限定要考虑的类别
  • normalize:默认值为False,若设置为true,则为百分比形式,而不是计数

标签中有几种类别,那么混淆矩阵就是几维的

卷积神经网络

卷积是一个数学概念,将两个函数中的一个进行翻转然后滑动叠加,叠加是指对两个函数的乘积求积分,在不同领域有不同解释:信号分析:卷积被用来计算输入信号对系统产生影响的累计效果;概率论,卷积被用来计算二维随机变量的概率密度;经济学:卷积被用来计算连续复利……然而最有趣的还是卷积在机器学习上的应用

核函数(卷积核)需要人为构建,一般是个3*3的矩阵。图像卷积在不同的卷积核下具有不同意义:(设计卷积核是一门艺术

  • 若卷积核数值全为1/9(即3*3矩阵,每个位置的权重相等,卷积核内的每个像素对输出像素的贡献相同),相当于取九个数的平均值作为中间值,起到平滑和模糊的效果,降低图像细节和噪声,这叫做均值滤波,此时的卷积核是一种线性滤波器,滤波器越大(5*5矩阵),图像细节就损失越多。在python中对应的是cv2.blur函数
  • 高斯卷积核:用于实现高斯模糊。权重不均匀,根据高斯分布(正态分布)来分配。高斯分布有两个参数:均值和标准差(方差),完全描述了分布的形状,即中心像素的权重最高,周围像素权重逐渐减小。相较于均值滤波,有着更好的平滑效果
  • 边缘增强卷积核:中间数值是9,用于放大中心像素的强度,其他都为-1:用于减少周围像素的强度。通过增强像素周围的对比度,实现锐化或边缘增强的效果,可用于图像增强和特征增强的任务
  • 第一列1,第二列0,第三列-1卷积核:相当于求了图像水平方向的一阶导数,可得图像的轮廓

在机器学习中,不管是图像、语音还是本文,都会被计算机转换为矩阵或矩阵的序列。机器学习算法会用卷积核提取图像特征,即特征矩阵,再用另外的卷积核,对特征矩阵进一步简化,最后得到含义更简单的特征

组成部分:

  • 卷积层Convolutional Layer提取特征:卷积操作是将一个小的滤波器(卷积核)在输入数据上滑动并执行元素级的乘法并累加来实现的,可以捕捉数据的局部特征
  • 池化层Pooling Layer:在保留重要特征的基础上,减小特征图的空间尺寸以降低计算复杂性。
  • 激活函数Activation Function:在卷积层和全连接层之间应用非线性激活函数,如ReLURectified Linear Unit,帮助网络捕捉更复杂的模式
  • 全连接层Fully Connected Layer:在网络的末尾通常包括一个或多个全连接层,用于将前面卷积和池化操作得到的特征映射转换为最终的输出。一般与softmax函数结合,用于多类别分类任务

特点:

  • 权重共享:在卷积层中,同一卷积核会被应用到输入数据的不同位置,减少了网络参数数量,提高模型的拟合能力
  • 层级结构:CNN具有多个卷积层和池化层,底层的卷积层捕捉低级特征,深层次的卷积层捕捉更抽象和高级的特征

搭建虚拟环境

使用Anaconda进行环境管理:

  1. 进入默认的base环境,cmd输入activate或直接打开Anaconda Prompt都行
  2. 创建环境conda create -n yyyy python=3.7,在pycharm添加解释器时,也可以创建虚拟环境
  • conda info --envs查看环境
  • conda activate "name"进入环境
  • conda deactivate退出环境
  • conda remove -n yyyy --all删除名为yyyy的虚拟环境及其所有依赖项

可以进入Anaconda进行可视化管理,创建的环境默认有11个包

CUDA介绍

Compute Unified Device Architecture是NVIDIA开发的并行计算平台和应用程序编程接口,允许使用英伟达显卡的计算能力来加速程序运行,特别是大规模数据处理(深度学习)领域的应用。在开发深度学习模型时使用支持CUDA的框架(Pytorch或Tensorflow),那么就可以将训练从CPU转移到GPU上。理解:就是给GPU运算提供一个平台

虚拟环境和CUDA的关系

在Anaconda中,安装的CUDA是全局安装,并不是特定于某个虚拟环境。在环境中使用框架时,会自动检测系统是否安装CUDA

CUDA是系统级组件,虚拟环境是Python环境的隔离容器,主要用于管理包的依赖关系,而不涉及系统组件的安装。想要在虚拟环境中使用CUDA,只需确保在环境中安装支持CUDA的深度学习框架

安装CUDA需要考虑的兼容性

  • GPU类型:不同的GPU支持不同的CUDA

cmd运行nvidia-smi

检查本机显卡支持的最高CUDA版本,即12.0,这里安装11.7.1:CUDA下载官网,选择11.7.1,安装时,第一次会让设置临时解压目录(默认即可,安装结束后自动删除),第二次设置安装目录,所以:不要把临时解压目录和安装目录设置为相同的,否则会找不到安装目录。安装选项取消VS,然后安装

验证:cmd运行nvcc -V,输出版本号即代表安装成功

  • 深度学习框架版本:在pytorch的github官网发布页,每个发布都对应了其支持的CUDA版本

使用注意

简单的print语句不需要利用GPU,只有训练模型或进行复杂张量运算才能用到。最起码要编写一个涉及深度学习操作的脚本

cuDNN

CUDA Deep Neural Network library是GPU加速库,可以加速卷积操作,池化操作等

安装:

  1. 官网(要注册账号)
  2. 找到适配CUDA11.x的,下载
  3. 解压,复制三个文件夹,粘贴到CUDA的安装目录

Pytorch

  1. 官网
  2. 运行命令conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia,报错:ClobberError,原因:conda和pip的版本太低,解决:
  • conda clean --all conda update --all或者:
  • 重新创建环境,指定python=3.10

查看torch版本:print(torch.__version__)

最后检查GPU是否可用:(即是否正确安装了CUDA和Torch

1
2
3
4
5
import torch
if torch.cuda.is_available():
print("GPU 可用")
else:
print("GPU 不可用")

但是在只有torch的虚拟环境中运行,其他的一些import就会找不到,需要在此环境中单独安装,已安装:

  • pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorboard tqdm matplotlib scikit-learn PyQt5 pyqt5-tools qt-material pandas openpyxl

安装pyqt5-tools工具包后,就可以使用qt designer

至此,虚拟环境,以及在独显上跑神经网络就已经配置好了