人工智能安全与计算机视觉_研究报告1

研究报告(7.6-7.12)

致访客:
您可以根据引用部分来判断此文章是否包含您需要的知识。
本次研究报告涉及的问题有:

  1. 在anaconda环境下安装pytorch可能出现的问题;
  2. pytorch神经网络代码结构分析;
  3. 神经网络基本的参数对比分析。

研究目标

  1. 安装cuda、cudnn、pytorch,并验证。
  2. 运行Pytorch的示例代码,并思考代码各个部分的含义,以及如何修改可以提高模型性能。

研究过程

安装

  1. 因为平时的习惯是在conda环境中写代码,所以将所有库安装到conda环境中。
  2. 在Anaconda的base环境中,选择cuda、cudnn、pytorch 3个库,点击安装即可。
  3. 验证:
  • 在Anaconda界面中,可以看到base环境中已经安装了cuda、cudnn、pytorch三个库。
    在这里插入图片描述

在这里插入图片描述

  • 打开命令提示框,输入conda list,可以找到3个库对应的位置

    在这里插入图片描述

在这里插入图片描述

运行

  1. 在Pycharm中新建Project,选择虚拟环境为conda的base环境,这样就可以直接使用已经下载好的库。

  2. 复制代码并运行。

代码分析

  1. 在框架上,代码主要可以分为以下几个结构:
  • 准备训练集:从开放数据集中下载数据集
  • 准备测试集:从开放数据集中下载
  • 设置样本数
  • 加载数据集
  • 定义模型
  • 设置损失函数
  • 设置优化函数
  • 定义训练方法
  • 定义测试方法
  • 设置迭代数
  • 实例化定义好的模型,并加载已训练好的模型文件
  • 进行预测
  1. 定义测试集与训练集 Datasets:
  • 数据集需要通过类来定义,继承了torchvision.datasets.minist,重载def getitem(self, index):def len(self):
  • 其中len返回数据集的大小,getitem接受index,返回图片数据和标签,其中index通常指的是一个list的index,这个list的每个元素就包含了图片数据的路径和标签信息。
  • 而对于制作这个list,通常的方法是将图片的路径和标签信息存储在一个txt中,然后从该txt中读取。
  1. 加载数据集 Data Loader:
  • Dataset类的核心是,读入数据集数据并且对读入的数据进行了索引
  • 加载器需要类来定义,继承了torch.util.data.dataloader.DataLoader,由此我们可以得出结论:定义数据集需要我们自己设计代码,而加载器不需要。
  • batch_size: 分批次读取
  • num_workers = 可以并行加载数据(利用多核处理器加快载入数据的效率)
  1. 损失函数 loss function

    pytorch中有不同的损失函数,例如:
  • L1 范数损失 L1Loss
  • 均方误差损失 MSELoss
  • 交叉熵损失 CrossEntropyLoss
  • 负对数似然损失函数 NLL Loss
  1. 优化器 optimizer

    pytorch中有很多优化器,例如
  • SGD (stochastic gradient descent)
  • Adam
  • AdaGrad
  • RMSprop
  1. 时期、批大小与迭代 Epoch, Batch size & Iteration :
  • Epoch: 样本集内所有的数据经过了一次训练
  • Batch Size: 使用训练集中的一小部分样本对模型权重进行一次反向传播的参数更新,这一小部分样本被称为“batch”。
  • Iteration: 迭代是 batch 需要完成一个 epoch 的次数。
  1. 定义测试方法与训练方法

  2. 实例化与测试:

  • 实例化:model = NeuralNetwork()
  • 加载模型参数: model.load_state_dict(torch.load("model.pth"))
    其中,load_state_dict,表示加载模型的参数,这个函数返回一个包含模型状态信息的字典。

参数调节

可以通过改变以下参数,调整模型性能:

  1. 调节batch size
batch sizeAccuracyAvg loss
181.8%0.526808
569.4%0.996658
1062.1%1.168192
3245.7%1.204643
5043.5%2.214385
10039.2%2.240298
  1. 调节epoch
EpochAccuracyAvg loss
139.6%2.185659
545.7%1.204643
1055.81%1.334948
  1. 调节loss fuction
Loss functionAccuracyAvg loss
Cross Entropy Lost45.7%1.204643
NLL Lost10%
  1. 调节optimizer
OptimizerAccuracyAvg loss
SGD45.7%1.204643
Adam54.66%1.225095
AdaGrad43.5%1.463934
RMSprop10%2.302585
  1. 调节lr (learning rate 学习率)
Learning RateAccuracyAvg loss
1e-175.98%0.635123
1e-255.4%1.310048
1e-345.7%1.204643
1e-458.2%2.198819
1e-520.6%2.291760

讨论

安装

  1. 浅显了解了cuda、cudnn的作用:
  • CUDA(ComputeUnified Device Architecture),是显卡厂商NVIDIA推出的运算平台。CUDA是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。
  • NVIDIA cuDNN是用于深度神经网络的GPU加速库。
  • cuDNN是基于CUDA的深度学习GPU加速库,有了它才能在GPU上完成深度学习的计算。
    出处。
  1. 对Pycharm中虚拟环境的使用有了更深刻的理解。
  2. 在新建项目时选择conda的base环境,每次即可直接使用已经下载好的第三方库。
  3. pip install下载到Python库中,而conda install下载到conda的库中。
  4. 学习到了如何解决安装中可能出现的问题,如current channel is unavailable:可以通过指定库从镜像网站下载解决。

代码与参数调节

  1. 了解了pytorch的代码框架、流程。例如,在第一次已经下载好DataSet后,可以在DataLoader注释掉download = true,直接加载本地数据集即可。
  2. batch sizeepoch有最优值,使得模型性能最好。经过观察可以发现,Accuracy随着epoch的增加而提高。
  3. 通过调节不同的参数可以改变模型的性能,但不同的参数的适用范围有限,比如在修改loss function参数时,L1LossMSELoss仅对二分类问题有效,本次运行的代码是多分类,需要对张量进行转换,但还没有具体实现。

问题与思考

  1. 后面的学习中可以更深入地学习每个模块对应的代码,如定义自己的数据集与数据集类按照实际需求定义张量等。
  2. 对于衡量模型性能的指标,本次利用了AccuracyAverage Loss,可以学习如何利用其他方式衡量模型性能。
  3. 对于loss function的选取,可以学习如何经过转换(如softmax)后,使用不同种类的损失函数。
  4. 可以更深入了解不同的损失函数和优化器在实际问题中的选择。

代码运行问题

在首次运行代码后,我遇到了如下问题,希望有小伙伴解答一下~
尝试过:删除数据集并重新下载,使用IP代理下载。

引用&致谢

  1. 源代码:pytorch官网tutorial-quickstart
  2. 研究过程-安装:
  3. 研究过程-代码分析:
  4. 研究过程-参数调节:

(待补充)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值