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

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

  • 1、前言
  • 2、前置学习
    • (1)window和Linux中python寻找目录的方式。
    • (2)训练AI应用的相关流程
    • (3)更多的基础知识补充
    • (4)Anaconda 了解
  • 3、操作步骤
    • (1)检查win本机各个环境
      • 1、检查python版本
      • 2、在Anaconda 环境下检查CUDA版本
      • 3、在Anaconda 环境下检查torchvision版本
      • 4、在Anaconda 环境下检查torch版本
    • (2)下载>数据集和运行代码
      • 1、 获取数据集包
      • 2、 放在特定位置,并解压
    • (3)安装运行代码时的必要的库
    • (4)查看数据集
    • (5)训练集数据
      • 1、更改与确认路径部分
      • 2、开始训练数据集
      • 3、尝试使用数据集测试
  • 6、代码部分链接
  • 7、细节部分
    • (1)遇到报错:No module named 'matplotlib'
    • (2)路径报错问题
    • (3)报错ERROR:Cold not find a version.... 或者 No mathcing distribution found
    • (4)python指令报错问题
  • 8、总结

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的终端中,输入如下指令检测版本

python --version

如下为具体操作演示
在这里插入图片描述

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

安装完Anaconda 后,需要打开Anaconda ,然后进行检测,在搜索里调出如下终端。
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

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


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

在这里插入图片描述

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

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

import torchvision
print(torchvision.__version__)

在这里插入图片描述

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

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

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 环境,我们能简单些。

pip install matplotlib

如下为,自己运行情况。

在这里插入图片描述

(4)查看数据集

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

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

(5)训练集数据

1、更改与确认路径部分

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

在这里插入图片描述

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\rawDownloading 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\rawDownloading 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\rawDownloading 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的。
在这里插入图片描述
更多的测试结果,可以看我前一篇文章,就不一一测试了。

以下为记录

(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库了
在这里插入图片描述
需要使用如下命令安装下。

pip install matplotlib

(2)路径报错问题

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

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

如下为报错的时的记录。

  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 openfp = 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环境下运行。

C:\Users\Admin>import torch
'import' 不是内部或外部命令,也不是可运行的程序
或批处理文件。C:\Users\Admin>print(torch.__version__)
无法初始化设备 PRNC:\Users\Admin>python
Python 3.9.1 (default, Dec 11 2020, 09:29:25) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32Warning:
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/activationType "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、总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/466922.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ客户端应用开发实战

这一章节我们将快速完成RabbitMQ客户端基础功能的开发实战。 一、回顾RabbitMQ基础概念 这个RabbitMQ的核心组件&#xff0c;是进行应用开发的基础。 二、RabbitMQ基础编程模型 RabbitMQ提供了很多种主流编程语言的客户端支持。这里我们只分析Java语言的客户端。 上一章节提…

一文了解Android SELinux

在Android系统中&#xff0c;SELinux&#xff08;Security-Enhanced Linux&#xff09;是一个增强的安全机制&#xff0c;用于对系统进行强制访问控制&#xff08;Mandatory Access Control&#xff0c;MAC&#xff09;。它限制了应用程序和进程的访问权限&#xff0c;提供了更…

python画图|hist()函数深层体验

【1】引言 前述学习已经掌握hist()函数的基本运用技巧&#xff0c;可通过下述链接直达&#xff1a; python画图|hist()函数画直方图初探-CSDN博客 python画图|hist()函数画直方图进阶-CSDN博客 我们已经理解hist()函数本质上画的是概率分布图&#xff0c;相关知识属于数理统…

火狐浏览器同源策略禁止解决方案

前言 火狐浏览器同源策略禁止解决方案_同源策略禁止读取远程资源怎么办-CSDN博客 在使用Firefox火狐浏览器进行Web开发时&#xff0c;有时会遇到因为同源策略&#xff08;Same-Origin Policy&#xff09;导致的跨域请求被拦截的问题。例如&#xff0c;控制台可能会显示如下错…

计算机网络——TCP篇

TCP篇 基本认知 TCP和UDP的区别? TCP 和 UDP 可以使用同一个端口吗&#xff1f; 可以的 传输层中 TCP 和 UDP在内核中是两个完全独立的软件模块。可以根据协议字段来选择不同的模块来处理。 TCP 连接建立 TCP 三次握手过程是怎样的&#xff1f; 一次握手:客户端发送带有 …

解决ImportError: DLL load failed while importing _message: 找不到指定的程序。

C:\software\Anoconda\envs\yolov5_train\python.exe C:\Project\13_yolov5-master\train.py C:\software\Anoconda\envs\yolov5_train\lib\site-packages\torchvision\io\image.py:13: UserWarning: Failed to load image Python extension: [WinError 127] 找不到指定的程序…

AOSP沙盒android 11

这里介绍一下aosp装系统 什么是aosp AOSP&#xff08;Android Open Source Project&#xff09;是Android操作系统的开源版本。 它由Google主导&#xff0c;提供了Android的源代码和相关工具&#xff0c;供开发者使用和修改。 AOSP包含了Android的核心组件和API&#xff0c;使…

git提交冲突的原因及解决方案

一、场景一 1.冲突原因 提交者的版本库 < 远程库 要保障提交者的版本库信息和远程仓库是一致的 2.解决方案 实现本地同步git pull,再提交代码&#xff08;最好每次git push之前都git pull一下&#xff0c;防止这种情况的出现&#xff09; 场景二 1.冲突原因 别人跟你…

第十五届蓝桥杯C/C++B组题解——数字接龙

题目描述 小蓝最近迷上了一款名为《数字接龙》的迷宫游戏&#xff0c;游戏在一个大小为N N 的格子棋盘上展开&#xff0c;其中每一个格子处都有着一个 0 . . . K − 1 之间的整数。游戏规则如下&#xff1a; 从左上角 (0, 0) 处出发&#xff0c;目标是到达右下角 (N − 1, N …

得物多模态大模型在重复商品识别上的应用和架构演进

重复商品治理介绍 根据得物的平台特性&#xff0c;同一个商品在平台上不能出现多个链接&#xff0c;原因是平台需要保证一品一链的特点&#xff0c;以保障商品的集中竞价&#xff0c;所以说一个商品在整个得物平台上只能有一个商详链接&#xff0c;因此我们需要对一品多链的情…

盘点2024年惊艳的10款录屏工具!!

你是否经常需要捕捉电脑屏幕上的精彩瞬间&#xff1f;或者想要记录自己操作某个应用程序的流程&#xff1f;这时候你就需要一款录屏工具啦&#xff01;在学习、工作和娱乐中&#xff0c;录屏工具都能成为你的得力助手。无论你是做教学视频、游戏解说还是分享精彩瞬间&#xff0…

vue+websocket实现即时聊天平台

目录 1 什么是websocket 2 实现步骤 2.1 导入依赖 2.2 编写代码 1 什么是websocket WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它主要用于在客户端和服务器之间建立持久的连接&#xff0c;允许实时数据交换。WebSocket 的设计目的是为了提高 Web 应用程序的…

软件设计师-上午题-15 计算机网络(5分)

计算机网络题号一般为66-70题&#xff0c;分值一般为5分。 目录 1 网络设备 1.1 真题 2 协议簇 2.1 真题 3 TCP和UDP 3.1 真题 4 SMTP和POP3 4.1 真题 5 ARP 5.1 真题 6 DHCP 6.1 真题 7 URL 7.1 真题 8 浏览器 8.1 真题 9 IP地址和子网掩码 9.1 真题 10 I…

C++:map 和 set 的使用

前言 平衡二叉搜索树 ( AVL树 ) 由于二叉搜索树在特殊情况下&#xff0c;其增删查的效率会降低到 O ( N )&#xff0c;因此对二叉搜索树进行改良&#xff0c;通过旋转等方式将其转换为一个左右均衡的二叉树&#xff0c;这样的树就称为平衡二叉搜索树&#xff0c;又称 AVL树。…

Vue 自定义icon组件封装SVG图标

通过自定义子组件CustomIcon.vue使用SVG图标&#xff0c;相比iconfont下载文件、重新替换更节省时间。 子组件包括&#xff1a; 1. Icons.vue 存放所有SVG图标的path 2. CustomIcon.vue 通过icon的id索引对应的图标 使用的时候需要将 <Icons></Icons> 引到使用的…

面相小白的php反序列化漏洞原理剖析

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理反序列化漏洞的一些成因原理 建议学习反序列化之前 先对php基础语法与面向对象有个大体的了解 (我觉得我整理的比较细致&#xff0c;了解这俩是个啥就行) 漏洞实战情况 这个漏洞黑盒几乎不会被发现&am…

ReactPress:深入解析技术方案设计与源码

ReactPress Github项目地址&#xff1a;https://github.com/fecommunity/reactpress 欢迎提出宝贵的建议&#xff0c;欢迎一起共建&#xff0c;感谢Star。 ReactPress是一个基于React框架开发的开源发布平台&#xff0c;它不仅仅是一个简单的博客系统&#xff0c;更是一个功能全…

canal1.1.7使用canal-adapter进行mysql同步数据

重要的事情说前面&#xff0c;canal1.1.8需要jdk11以上&#xff0c;大家自行选择&#xff0c;我这由于项目原因只能使用1.1.7兼容版的 文章参考地址&#xff1a; canal 使用详解_canal使用-CSDN博客 使用canal.deployer-1.1.7和canal.adapter-1.1.7实现mysql数据同步_mysql更…

SpringBoot之定时任务

1. 前言 本篇博客是个人的经验之谈&#xff0c;不是普适的解决方案。阅读本篇博客的朋友&#xff0c;可以参考这里的写法&#xff0c;如有不同的见解和想法&#xff0c;欢迎评论区交流。如果此篇博客对你有帮助&#xff0c;感谢点个赞~ 2. 场景 我们讨论在单体项目&#xff0c…

绿色能源发展关键:优化风电运维体系

根据QYResearch调研团队最新发布的《全球风电运维市场报告2023-2029》显示&#xff0c;预计到2029年&#xff0c;全球风电运维市场的规模将攀升至307.8亿美元&#xff0c;并且在接下来的几年里&#xff0c;其年复合增长率&#xff08;CAGR&#xff09;将达到12.5%。 上述图表及…