重生之从零开始的神经网络算法学习之路——序篇(环境搭建)
- 自重生以来,已恍惚许久,但前世的记忆却突然如潮水般涌上心头:不错,你就是那曾经的大明皇帝!但话又说回来,相比于此生如今境遇,亦或许,你不该再甘于平庸下去?
环境选择
-
操作系统:Windows 11 家庭中文版 版本号:26100.4946
(重生后的你竟不知道何时电脑被更新了Windows 11,听说bug很多不过还没遇到过) -
IDE选择:VSCode 版本号:1.103.1
(开源免费,通过插件便捷集成各种环境)
下载地址:https://code.visualstudio.com/ -
语言选择:Python 版本号:3.11.9
(你并没有贸然选择最新的版本,很理智的选择,据说最新的版本已经不支持某些低版本的操作系统了,为了环境的兼容性,你决定先选择一个较低的版本)
下载地址:https://www.python.org/downloads/release/python-3119/
安装完以上软件后
1. 配置VSCode插件
- 打开VSCode,下载所需插件:Python、Pylance、Python Debugger、Python Environments
- 正确安装后会在INSTALLED目录下出现:
- 安装完插件后基本使用默认配置,按需修改
2. 创建工作空间
- 点击 File → Open Folder,选择新建文件夹打开
- 点击 File → Save Workspace As,保存为工作空间
- 打开名为"神经网络算法"的文件夹并保存为工作空间:
3. 创建Python虚拟环境
- 在VSCode上方搜索框中输入
>Python:Create Environment
- 点击确定后选择 Venv
- 初次创建时选择Python 3.11.9版本:
- 如果已经创建过了,再次使用>Python:Create Environment输入点击确定后,点击Venv,如下:
- 可见,可以选择使用当前已存在的虚拟环境,或者删除原来的虚拟环境并新建一个虚拟环境
4. 理解Python虚拟环境
- 满足代码在当前工作目录运行的依赖环境
- 包括:基础模块、第三方模块、系统环境配置脚本、Python可执行文件等
5. 在终端运行虚拟环境
- 输入
>Python:Create Terminal
PS C:\Users\666\Desktop\python练习\神经网络算法> & C:/Users/666/Desktop/python练习/神经网络算法/.venv/Scripts/Activate.ps1 (.venv) PS C:\Users\666\Desktop\python练习\神经网络算法>
- 终端头部出现
(.venv)
表示进入虚拟环境模式 - 在此模式下操作不影响本地Python环境
可见本质上就是运行了一个脚本,使得当前终端进入了一个venv虚拟终端的模式下,你心想以后有机会再慢慢研究这个脚本里的具体内容吧,你决定本地的Python你就暂时不做任何操作了,方便未来创建新的虚拟环境时都是一个初始的相对干净的环境
6. 安装和卸载第三方模块
安装Pytorch尝试:
- 注:以下为错误示范,用于演示该类报错出现时的处理方法
- 你想安装一个学习人工智能可能会用到的经典模块Pytorch,在虚拟环境输入了pip install pytorch,开始的时候很顺,如下:
(.venv) PS C:\Users\666\Desktop\python练习\神经网络算法> pip install pytorch
Collecting pytorch
Downloading pytorch-1.0.2.tar.gz (689 bytes)
Installing build dependencies ... done
Getting requirements to build wheel ... done
Preparing metadata (pyproject.toml) ... done
- 但很遗憾最后还是报错了,如下:
Building wheels for collected packages: pytorch
Building wheel for pytorch (pyproject.toml) ... error
error: subprocess-exited-with-error
× Building wheel for pytorch (pyproject.toml) did not run successfully.
│ exit code: 1
╰─> [23 lines of output]
...
Exception: You tried to install "pytorch". The package named for PyTorch is "torch"
...
- 你很敏锐地注意到在一串输出的最后,有一行如下:
- Exception: You tried to install "pytorch". The package named for PyTorch is "torch"
- 以上错误常出现于模块名称变更导致的安装时报错
- 所以你决定重新输入pip install torch,如下:
正确安装Torch:
(.venv) PS C:\Users\666\Desktop\python练习\神经网络算法> pip install torch
Collecting torch
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ReadTimeoutError...
- 你发现下载速度非常慢,你又没有神秘力量的加持,你决定Ctrl+C中断下载,重新输入:
- pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple
- 如下:
使用清华镜像加速:
(.venv) PS C:\Users\666\Desktop\python练习\神经网络算法> pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting torch
Downloading https://pypi.tuna.tsinghua.edu.cn/packages/84/57/.../torch-2.8.0-cp311-cp311-win_amd64.whl (241.4 MB)
- 然后你就舒服了,下载速度快得飞起,于是你记住了每次下载第三方模块的时候都要加上-i https://pypi.tuna.tsinghua.edu.cn/simple , 确实好使(在没有神秘力量的加持时)
- 安装时你也可以看见.venv/Lib/site-packages目录下会不停新增文件,其实就是下载的模块和依赖已经都安装到该目录下了
- 并非漫长的等待后,安装成功的话最后会输出如下:
安装成功输出:
Installing collected packages: mpmath, typing-extensions, sympy, networkx, MarkupSafe, fsspec, filelock, jinja2, torch
Successfully installed MarkupSafe-3.0.2 filelock-3.19.1 ... torch-2.8.0
- 可见除了torch,还会自动安装其它依赖模块,包括mpmath等,以及各模块的版本号也会显示
卸载Torch:
- 注:当环境中不需要某模块时,可以用以下方式卸载指定模块
- 在虚拟终端中输入pip uninstall torch,如下:
(.venv) PS C:\Users\666\Desktop\python练习\神经网络算法> pip uninstall torch
Found existing installation: torch 2.8.0
Uninstalling torch-2.8.0:
Would remove:
c:\users\666\desktop\python练习\神经网络算法\.venv\lib\site-packages\functorch\*
...
Proceed (Y/n)? y # 这里输入Y或y然后回车
Successfully uninstalled torch-2.8.0
- 当然这里只卸载了torch模块,至于刚刚下载的依赖模块mpmath等还没被卸载,你决定以后再卸载吧
7. 测试mpmath模块
在以后mpmath被卸载之前,你还是想先试一下该模块的调用,毕竟这也是你幸幸苦苦花费流量下载下来的,于是你在神经网络算法文件夹下新建了一个demo.py文件,编辑该文件,输入以下内容:
# -*- coding: utf-8 -*-
# demo.py
from mpmath import mp, mpf, sqrt, sin, pi, nstr, matrix, quad, findroot
# 1. 基本设置:设置精度(小数位数)
mp.dps = 50 # 设置50位小数精度
print("="*60)
print(f"当前计算精度: {mp.dps} 位小数\n")
# 2. 高精度数值创建与计算
a = mpf('0.1') # 精确表示0.1(避免浮点误差)
b = mpf('0.2')
c = a + b
print("精确计算 0.1 + 0.2:")
print(f"标准浮点: 0.1 + 0.2 = {0.1 + 0.2}")
print(f"mpmath : 0.1 + 0.2 = {nstr(c, 20)}") # 输出20位有效数字
print()
# 3. 数学函数计算
print("高精度数学函数计算:")
print(f"sqrt(2) = {nstr(sqrt(2), 50)}")
print(f"sin(pi) = {nstr(sin(pi), 10)}") # 应接近0
print()
# 4. 数值积分
def integrand(x):
return 4 / (1 + x**2)
pi_calc = quad(integrand, [0, 1]) # 积分计算π
print("数值积分计算π:")
print(f"mpmath的pi值: {nstr(pi, 50)}")
print(f"积分计算结果: {nstr(pi_calc, 50)}")
print(f"两者差值 : {nstr(pi - pi_calc, 10)}")
print()
# 5. 方程求解
def equation(x):
return x**3 - 2*x - 5
root = findroot(equation, 2) # 在x=2附近找根
print("方程求解 x^3 - 2x - 5 = 0:")
print(f"近似解: {nstr(root, 25)}")
print(f"验证解: {nstr(equation(root), 10)} (应接近0)")
print()
# 6. 矩阵运算
print("高精度矩阵运算:")
A = matrix([[2, -1], [1, 3]])
B = matrix([[pi], [sqrt(2)]])
print("矩阵 A:")
print(nstr(A, 5))
print("\n向量 B:")
print(nstr(B, 10))
solution = A**-1 * B # 解线性方程组 AX = B
print("\n解向量 X = A^-1 * B:")
print(nstr(solution, 25))
编辑好后,你在该文件的右上方看见了如下按钮,你直接点击就会运行了,如下:
8. 调试代码
还来不及为你写的demo.py文件得到完美的输出感到高兴,在你喝杯茶上个厕所的功夫回来,你再次运行该文件,却得到了部分输出如下:
精确计算 0.1 + 0.2:
标准浮点: 0.1 + 0.2 = 0.30000000000000004
mpmath : 0.1 + 0.2 = -0.1
看到如此异样的输出,成年人的崩溃几乎就在一瞬之间,但回想起前世和众爱妃嘻笑调戏的种种,看着旁边捂嘴偷笑的现任女友,你觉得或许这也还算不上什么,所以你决定调试一下,在关键部位添加断点,并点击调试运行代码,如下:
你一步步地操作,胆颤心惊,如下:
直到问题解决后,望着身边的人儿,或许你也找回了一些曾经的悸动?正当你一阵胡思乱想、久久不能释怀的时候,突然你的美女上司不知何时竟从房门外进来,笑意盈盈地对你说道:义人,你也不想你的代码经常这样出bug吧?说罢,还不经意地将眼眸飘向那身边人,你不由得惊出一身冷汗,四肢仿佛无法动弹,你害怕再失去些什么,刹那间,你的嘴角连一句话竟也说不出来。看你愣住了,你那上司竟不由分说向着旁边那人走去,一时间,你在心中歇斯底里地呐喊:不要...
啊!!!你错愕地在电脑屏幕前醒来,原来刚刚那一幕竟只是黄粱一梦么?