【学习AI-相关路程-mnist手写数字分类-win-硬件:windows-自我学习AI-实验步骤-全连接神经网络(BPnetwork)-操作流程(3) 】

【学习AI-相关路程-mnist手写数字分类-win-硬件:windows-自我学习AI-实验步骤-全连接神经网络(BPnetwork)-操作流程(3) 】

1、前言

有了前车之鉴,咱们今天来做在win下的mnist手写体数字分类,知识有时候也是一层层堆叠来的,我们之前已经有了很多学习AI的相关知识了,那么在进行今天的步骤就比较方便,但是你操作的过程中,发现本质的东西其实没有太大的改变。

那么我们需要以前一篇为基础,相当与在win上复刻之前jetson orin NX 的操作。

【学习AI-相关路程-mnist手写数字分类-python-硬件:jetson orin NX-自我学习AI-实验步骤-全连接神经网络(BPnetwork)-操作流程(2) 】

2、前置学习

虽然学习了很久,但是如何对新手而言还是需要了解的步骤,认为是基础的知识,罗列在了下面,另外某种意义来说,自己不是新手了,有些东西可能也想不到,所以有什么不懂得,请评论吧。

(1)window和Linux中python寻找目录的方式。

在自己实验过程中,遇到了找不到路径的问题,才会回想起,自己之前代码是在Linux下系统的,这回迁移到window下运行,其他代码可以不用改,但是路径这块必须要改的,相关细节,我也整理另一个文章,大家可以自己翻看。

问题:OSError: Errno 22 Invalid argument: 'xx:xx'-解决方式-在window下-调用python-转义字符相关-记录

(2)训练AI应用的相关流程

虽然不敢说,所以AI都是这个样子得,但是目前尝试得两个都是相关实验"屏幕检查"和"mnist",本质上,其实还是没有跳出这个流程,就是以下这个流程,其实这也为我们提供一种解决事情思路,当你想要应用AI的时候,你可以通过什么样的路径达到你要的效果。

虽然已经有准备好的手写体训练库了,但是本质上这个步骤其实没有略过。

  • 阶段 1: 硬件设置
  • 阶段 2: 软件准备
  • 阶段 3: 数据准备
  • 阶段 4: 模型设计和训练
  • 阶段 5: 优化和部署
  • 阶段 6: 应用集成
  • 阶段 7: 监控和维护

(3)更多的基础知识补充

实际想要从事AI相关工作,前期可能大部分时候,其实都在看资料,无论是原版英文材料,还是被翻译的资料,都是一点点补充知识架构,以下有些我这里就不反复说明了,请自己看以下补充知识,或者自己找更多资料了。

【学习AI-相关路程-mnist手写数字分类-python-硬件:jetson orin NX-自我学习AI-基础知识铺垫-遇到问题(1) 】

(4)Anaconda 了解

链接:https://www.anaconda.com/

Anaconda 是一个用于科学计算和数据分析的开源 Python 和 R 语言发行版。它旨在简化包管理和部署流程,特别适合数据科学家和机器学习工程师。

主要特点:

  1. Conda 包管理器: Anaconda 自带的 Conda 是一个强大的包和环境管理器,支持跨平台使用。它可以创建独立的环境,方便管理不同项目的依赖关系。

  2. 丰富的预装库: Anaconda 预装了超过 1,500 个数据科学和机器学习相关的包,如 NumPy、Pandas、Matplotlib、Scikit-learn 等,减少了手动安装的麻烦。

  3. 集成开发环境: 包含了 Jupyter Notebook、JupyterLab、Spyder 等流行的 IDE,方便进行代码编写和数据可视化。

  4. 跨平台支持: 兼容 Windows、macOS 和 Linux 操作系统,提供一致的开发体验。

3、操作步骤

这里讲各个步骤进行总结,和实际项目不同,只是具体操作流程,操作流程相对于整个AI的做事流程,算是其中一个步骤,是想向你说明,在使用AI的过程中,训练和调试的一个过程。

相关window下,安装环境,可以看我之前文章,我这里是直接检测,不再一一列举如何补充环境了。

【学习AI-相关路程-参考学习-学习他人文章-win11上-安装cuda和cudnn-工具安装 】

(1)检查win本机各个环境

1、检查python版本

命令如下,在cmd的终端中,输入如下指令检测版本

shell 复制代码
python --version

如下为具体操作演示

2、在Anaconda 环境下检查CUDA版本

安装完Anaconda 后,需要打开Anaconda ,然后进行检测,在搜索里调出如下终端。

命令如下,先进入python环境,输入python,

然后输入如下指令查询CUDA版本

shell 复制代码
print(torch.cuda.is_available())  # True 表示支持 CUDA
print(torch.version.cuda)         # 输出 CUDA 的版本号

3、在Anaconda 环境下检查torchvision版本

同上,命令如下,输入如下指令查询torchvision版本

shell 复制代码
import torchvision
print(torchvision.__version__)

4、在Anaconda 环境下检查torch版本

输入如下指令,进入python环境

bash 复制代码
import torch
print(torch.__version__)         # 确认 PyTorch 版本

(2)下载>数据集和运行代码

1、 获取数据集包

如下是当时在jetson下尝试的数据集和运行的python代码,有需要的可以拿走。

链接:https://download.csdn.net/download/qq_22146161/89919700?spm=1001.2014.3001.5503

下载后如下,就是如下包了

2、 放在特定位置,并解压

我们需要放在一个已知的位置,或者你自己定义的位置,这里我在D盘下,之后,就是需要解压后,然后请记住这个目录,一会需要用,因为之前是Linux环境下的,你需要更改里面的目录位置。

(3)安装运行代码时的必要的库

无论是Linux环境还是win环境,都是需要安装必要的库,因为有Anaconda 环境,我们能简单些。

shell 复制代码
pip install matplotlib

如下为,自己运行情况。

(4)查看数据集

我们拿到数据后,并不是上来,就是开始训练的,当时你这么做也行,咱们最好是先看看数据集里的图片是什么样的,它和咱们平时的照片其实不太一样的,几个名为"display_xxx"为头的都是查看图片的几种方式,根据自己背景不同,找个你喜欢的方式。

拿自己查看方式为例,其实看图片,其实更像一个大的数组,因为不是三色的,只有灰度,所以习惯如下看这样的方式。

(5)训练集数据

1、更改与确认路径部分

如下图,这块就体现了路径相关重要性,自己开始没注意,从jetson orin NX拿的代码,其实时Linux路径,就直接训练了,发现代码直接再下一次,但是路径时Linux,所以也不知道下到哪里去了,反正就开始训练。

c 复制代码
Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz
Failed to download (trying next):
<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1123)>

Downloading https://ossci-datasets.s3.amazonaws.com/mnist/train-images-idx3-ubyte.gz
Downloading https://ossci-datasets.s3.amazonaws.com/mnist/train-images-idx3-ubyte.gz to /home/wjl-linux/Desktop/mnist_ai_work/MNIST\MNIST\raw\train-images-idx3-ubyte.gz
100%|███████████████████████████████████████████████████████████████████| 9912422/9912422 [00:02<00:00, 3930244.23it/s]
Extracting /home/wjl-linux/Desktop/mnist_ai_work/MNIST\MNIST\raw\train-images-idx3-ubyte.gz to /home/wjl-linux/Desktop/mnist_ai_work/MNIST\MNIST\raw

Downloading http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz
Failed to download (trying next):
<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1123)>

Downloading https://ossci-datasets.s3.amazonaws.com/mnist/train-labels-idx1-ubyte.gz
Downloading https://ossci-datasets.s3.amazonaws.com/mnist/train-labels-idx1-ubyte.gz to /home/wjl-linux/Desktop/mnist_ai_work/MNIST\MNIST\raw\train-labels-idx1-ubyte.gz
100%|████████████████████████████████████████████████████████████████████████| 28881/28881 [00:00<00:00, 100519.04it/s]
Extracting /home/wjl-linux/Desktop/mnist_ai_work/MNIST\MNIST\raw\train-labels-idx1-ubyte.gz to /home/wjl-linux/Desktop/mnist_ai_work/MNIST\MNIST\raw

Downloading http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz
Failed to download (trying next):
<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1123)>

Downloading https://ossci-datasets.s3.amazonaws.com/mnist/t10k-images-idx3-ubyte.gz
Downloading https://ossci-datasets.s3.amazonaws.com/mnist/t10k-images-idx3-ubyte.gz to /home/wjl-linux/Desktop/mnist_ai_work/MNIST\MNIST\raw\t10k-images-idx3-ubyte.gz
100%|████████████████████████████████████████████████████████████████████| 1648877/1648877 [00:01<00:00, 967411.51it/s]
Extracting /home/wjl-linux/Desktop/mnist_ai_work/MNIST\MNIST\raw\t10k-images-idx3-ubyte.gz to /home/wjl-linux/Desktop/mnist_ai_work/MNIST\MNIST\raw

Downloading http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz
Failed to download (trying next):
<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1123)>

Downloading https://ossci-datasets.s3.amazonaws.com/mnist/t10k-labels-idx1-ubyte.gz
Downloading https://ossci-datasets.s3.amazonaws.com/mnist/t10k-labels-idx1-ubyte.gz to /home/wjl-linux/Desktop/mnist_ai_work/MNIST\MNIST\raw\t10k-labels-idx1-ubyte.gz
100%|██████████████████████████████████████████████████████████████████████████| 4542/4542 [00:00<00:00, 114461.59it/s]
Extracting /home/wjl-linux/Desktop/mnist_ai_work/MNIST\MNIST\raw\t10k-labels-idx1-ubyte.gz to /home/wjl-linux/Desktop/mnist_ai_work/MNIST\MNIST\raw

所以如下图这个文件"new_python_demo_minst_model1.py"

中的这个部分,已经要改成之前已知的路径。

那么在训练的时候,即使没有数据集,也会给你下到对应位置,也就是如下这个位置。

2、开始训练数据集

下完后,就会开始自己自动训练,会先让你看一组数字和标签对应的。

确认没问题,就可以关掉了,就可以往下训练了。

训练完成之后,就会保存为mnist_bpnetwork.pth的模型。

3、尝试使用数据集测试

我们之后就是将模型文件mnist_bpnetwork.pth的这个,放到test_image2里面去,那里我准备了一些测试文件,当然你可以自己准备一些进行测试。

(1)移动模型

如下我们需要将训练模型拿进来,如下图所示。

这里对几个文件进行说明

  • test_iamge_ai文件夹:就是存的用于训练的图片。
  • mnist_bpnetwork.pth是训练好的模型。
  • python_ai_test_image.py文件是对于符合28x28的jpg或者png图片识别的python代码
  • python_ai_test_image_dif_size.py文件是可以不服28x28的图片识别代码
  • testNum7.jpg图片是其中一个样例,用来测试路径问题。

(2)更改测试用例的文件路径

如下图,在win下,我尝试了几种,发现在当前目录下,是可以找到照片的,但是使用绝对路径不行,所以应该是写发问题,具体如何解决,请看细节部分,需要更改一下路径写法。

同时以下也是自己的尝试。

可以看到模型是可以识别符合要求大小的图片,图片里面的数字为1的。

更多的测试结果,可以看我前一篇文章,就不一一测试了。

以下为记录

bash 复制代码
(base) PS D:\py_work\mnist_ai_bp\AI_test_mnist_demo_BP\test_image2> python .\python_ai_test_image.py
使用设备: cuda
D:\py_work\mnist_ai_bp\AI_test_mnist_demo_BP\test_image2\python_ai_test_image.py:34: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.
  model.load_state_dict(torch.load('mnist_bpnetwork.pth', map_location=device))
D:\py_work\mnist_ai_bp\AI_test_mnist_demo_BP\test_image2\python_ai_test_image.py:66: UserWarning: Glyph 39044 (\N{CJK UNIFIED IDEOGRAPH-9884}) missing from font(s) DejaVu Sans.
  plt.show()
D:\py_work\mnist_ai_bp\AI_test_mnist_demo_BP\test_image2\python_ai_test_image.py:66: UserWarning: Glyph 22788 (\N{CJK UNIFIED IDEOGRAPH-5904}) missing from font(s) DejaVu Sans.
  plt.show()
D:\py_work\mnist_ai_bp\AI_test_mnist_demo_BP\test_image2\python_ai_test_image.py:66: UserWarning: Glyph 29702 (\N{CJK UNIFIED IDEOGRAPH-7406}) missing from font(s) DejaVu Sans.
  plt.show()
D:\py_work\mnist_ai_bp\AI_test_mnist_demo_BP\test_image2\python_ai_test_image.py:66: UserWarning: Glyph 21518 (\N{CJK UNIFIED IDEOGRAPH-540E}) missing from font(s) DejaVu Sans.
  plt.show()
D:\py_work\mnist_ai_bp\AI_test_mnist_demo_BP\test_image2\python_ai_test_image.py:66: UserWarning: Glyph 30340 (\N{CJK UNIFIED IDEOGRAPH-7684}) missing from font(s) DejaVu Sans.
  plt.show()
D:\py_work\mnist_ai_bp\AI_test_mnist_demo_BP\test_image2\python_ai_test_image.py:66: UserWarning: Glyph 22270 (\N{CJK UNIFIED IDEOGRAPH-56FE}) missing from font(s) DejaVu Sans.
  plt.show()
D:\py_work\mnist_ai_bp\AI_test_mnist_demo_BP\test_image2\python_ai_test_image.py:66: UserWarning: Glyph 29255 (\N{CJK UNIFIED IDEOGRAPH-7247}) missing from font(s) DejaVu Sans.
  plt.show()
模型预测的数字是: 1

6、代码部分链接

如下为本次学习使用的代码链接:
https://download.csdn.net/download/qq_22146161/89954021

7、细节部分

(1)遇到报错:No module named 'matplotlib'

这个说就是运行python代码的时候,忘记安装matplotlib库了

需要使用如下命令安装下。

shell 复制代码
pip install matplotlib

(2)路径报错问题

在Linux转到win下,需要注意注意一下路径拼写问题,具体请看如下文章。

问题:OSError: Errno 22 Invalid argument: 'xx:xx'-解决方式-在window下-调用python-转义字符相关-记录

如下为报错的时的记录。

bash 复制代码
  File "D:\py_work\mnist_ai_bp\AI_test_mnist_demo_BP\test_image2\python_ai_test_image.py", line 49, in <module>
    image = Image.open(image_path)
  File "C:\ProgramData\Miniconda3\lib\site-packages\PIL\Image.py", line 3247, in open
    fp = builtins.open(filename, "rb")
FileNotFoundError: [Errno 2] No such file or directory: 'D:/py_work/mnist_ai_bp/AI_test_mnist_demo_BP/test_image2/test_image_ai/testNum8.jpg'

(3)报错ERROR:Cold not find a version... 或者 No mathcing distribution found

总之如下图,找不到这个库,我这里其实挂了梯子,需要检测一下网路,如果不行需要自己手动去下载安装了。

(4)python指令报错问题

在开始的时候,不是很会使用指令,直接在终端敲写python命令,后来才知道,需要在Anaconda 的python环境下运行。

bash 复制代码
C:\Users\Admin>import torch
'import' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

C:\Users\Admin>print(torch.__version__)
无法初始化设备 PRN

C:\Users\Admin>python
Python 3.9.1 (default, Dec 11 2020, 09:29:25) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32

Warning:
This Python interpreter is in a conda environment, but the environment has
not been activated.  Libraries may fail to load.  To activate this environment
please see https://conda.io/activation

Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> print(torch.__version__)
2.4.0+cu121
>>> print(torch.cuda.is_available())  # True 表示支持 CUDA
True
>>> print(torch.version.cuda)         # 输出 CUDA 的版本号
12.1
>>> import torchvision
>>> print(torchvision.__version__)
0.19.0+cu121
>>>

8、总结

很大程度上,我们要是先能安装教程操作一遍,哪怕其中遇到问题,但是最后成功了,其实能学到很多东西,如何从头自己学着做,确实很扎实,但也确实会很慢。

相关推荐
Guofu_Liao40 分钟前
大语言模型---LoRA简介;LoRA的优势;LoRA训练步骤;总结
人工智能·语言模型·自然语言处理·矩阵·llama
Swift社区3 小时前
LeetCode - #139 单词拆分
算法·leetcode·职场和发展
Kent_J_Truman4 小时前
greater<>() 、less<>()及运算符 < 重载在排序和堆中的使用
算法
IT 青年4 小时前
数据结构 (1)基本概念和术语
数据结构·算法
ZHOU_WUYI4 小时前
3.langchain中的prompt模板 (few shot examples in chat models)
人工智能·langchain·prompt
Dong雨4 小时前
力扣hot100-->栈/单调栈
算法·leetcode·职场和发展
如若1235 小时前
主要用于图像的颜色提取、替换以及区域修改
人工智能·opencv·计算机视觉
SoraLuna5 小时前
「Mac玩转仓颉内测版24」基础篇4 - 浮点类型详解
开发语言·算法·macos·cangjie
老艾的AI世界5 小时前
AI翻唱神器,一键用你喜欢的歌手翻唱他人的曲目(附下载链接)
人工智能·深度学习·神经网络·机器学习·ai·ai翻唱·ai唱歌·ai歌曲
DK221515 小时前
机器学习系列----关联分析
人工智能·机器学习