本文为:365天深度学习训练营中的学习内容
原作者为:K同学啊
P1 手写MNIST识别
提示:以下是本篇文章正文内容,下面案例可供参考
1.在anaconda安装pytorch
我参考的教程在这里
[https://zhuanlan.zhihu.com/p/672526561]()
[https://blog.csdn.net/Maaa_25/article/details/118723993]()
[https://blog.csdn.net/weixin_44261686/article/details/104241503]()
我的环境
python版本:3.11.5
pytorch版本:2.1.2
cuda版本:12.4
记录一下遇到的比较有趣的问题:
-
一开始我没有比对cuda和pytorch的版本,所以在检查是否安装成功的时候
torch.cuda.is_available()
这一句得到的结果不仅是一个false,他甚至告诉我我的cuda版本too old了!! 感觉程序都看不下去了,一定要对应好cuda python 和pytorch -
如果你在安装于base的jupyter notebook里面得到了这样的结果"No module named 'torchNo module named 'torch"请在base和pytorch的环境下分别输入这条命令
python -m ipykernel install --name pytorch
如果pytorch输入这条命令报错,就先执行这两条指令conda install ipython
conda install jupyter
后再执行上面那一条就好啦.
这样在jupyter里就有这个啦
这里是成功的证据!
2.手写数字识别
-
代码
# 设置GPU # 导入pytorch import torch # 导入pytorch中的神经网络模块nn , as关键字用于起别名,用nn代替torch.nn import torch.nn as nn # 导入matplotlib中的pylot模块 matplotlib是常用的数据可视化的库 import matplotlib.pyplot as plt # 处理计算机视觉任务的库 import torchvision # CUAD是英伟达为开发者提供的能使用GPU来进行计算运行程序的模型 # torch.cuad.is_available()是为了检查当前的计算机系统是否支持cuda也就是gpu运算 # torch.device()用来表示计算机中设备的类,指定代码是在CPU还是gpu运行 # "cuda"则是在gpu "cpu"则是在CPU运行 "cuda:0"则是制定具体的gpu # "cuda" if torch.cuda.is_available() else "cpu"这一句则是说让设备根据系统来选择cpu还是gpu device = torch.device("cuda" if torch.cuda.is_available() else "cpu") device
# 训练集 第一个参数是存储地址 默认是root train的类型是bool true是训练集 false是测试集 # transform 就是把数据转化成其他形式 这里面是转化成Tensor形式 torchvision.transforms.ToTensor() 这句话的意思就是把数据转化成Tensor的形式 # download 的类型也是bool型 true是下载 false是不下载 train_ds = torchvision.datasets.MNIST("data",train=True,transform=torchvision.transforms.ToTensor(),download=True) test_ds = torchvision.datasets.MNIST("data",train=False,transform=torchvision.transforms.ToTensor(),download=True)
# torch.utils.data.DataLoader()pytorch中处理数据集的函数 # torch.utils.data.DataLoader(dataset, batch_size=1, shuffle=None, sampler=None, batch_sampler=None, num_workers=0, collate_fn=None, pin_memory=False, drop_last=False, timeout=0, worker_init_fn=None, multiprocessing_context=None, generator=None, *, prefetch_factor=2, persistent_workers=False, pin_memory_device='') # dataset:字符串类型,是加载的数据集的名字 # batch:数据集太大,要把他分成多少批处理就是batch # batch_size:int类型,数据集划分批次一批是多少个就是batchsize,他的默认值是1 # epoch:将一个数据集中所有的样本数据都过一遍(只是过一遍)的训练过程 # shuffle:是bool类型如果是true的话,每过一次数据集都要重新排列数据 # sampler:指定数据采样器,也就是指定从数据集中抽取杨版本的策略 值可以是任何可迭代对象(iterable),和shuffle冲突,如果指定会覆盖shuffle的选择 # batch_sampler:自定义批次采样器与 batch_size、shuffle、sampler 和 drop_last 互斥 # batch_size = 32 train_dl = torch.utils.data.DataLoader(train_ds,batch_size = batch_size,shuffle = True