(一)从阅读数据进入模型实验
前面的书架已经能采集、保存、分析和展示记录。现在换一个任务:给出阅读分钟数和次数,让程序根据样本估计完成页数。我们先写一个带参数的计算式,观察误差,再让程序根据误差调整参数。第十一章已经用 NumPy 做过一次更新,这里把每一步拆开,接到 PyTorch 的自动微分和训练工具。
另一条实践线是辨认 8×8 的竖线、横线和十字图形。项目附带自拟阅读 CSV 和自行生成的图像,不需要下载数据集。读取方法、生成规则和完整入口见 训练项目 与 示例索引。
本章使用 Python 3.12、PyTorch 2.x。实际核验使用 PyTorch 2.14.1+cpu,精确依赖保存在 uv.lock。先用 CPU 完成全部实验,设备一节再解释模型和数据的迁移。
# 项目文件:training_project/pyproject.toml
# CPU 版完成本章全部实验;推理服务作为可选依赖安装。
[build-system]
requires = ["setuptools>=80,<83"]
build-backend = "setuptools.build_meta"
[project]
name = "reading-torch-lab"
version = "0.1.0"
requires-python = ">=3.12,<3.13"
dependencies = ["torch>=2.6,<3", "numpy>=2.2,<3", "matplotlib>=3.9,<4"]
[project.optional-dependencies]
serve = ["fastapi>=0.115,<1", "uvicorn>=0.34,<1", "httpx>=0.28,<1"]
[dependency-groups]
dev = ["pytest>=9.1,<10"]
[project.scripts]
reading-train = "readingtorch.cli:main"
[tool.setuptools.packages.find]
where = ["src"]
[tool.pytest.ini_options]
testpaths = ["tests"]
addopts = "-ra --import-mode=importlib"
[[tool.uv.index]]
name = "pytorch-cpu"
url = "https://download.pytorch.org/whl/cpu"
explicit = true
[tool.uv.sources]
torch = { index = "pytorch-cpu" }torch 处理张量、求导和神经网络,NumPy 读取数据,Matplotlib 输出训练图。tool.uv.sources 把 torch 指向官方 CPU 软件源,其余依赖继续由 PyPI 提供。serve 是后面推理接口使用的可选依赖。
# 在 PyTorch与模型开发/training_project 中准备环境。
uv sync --locked
uv run python -c "import torch; print(torch.__version__)"
使用 pip 时:
# 创建 Python 3.12 环境,按配套清单安装相同版本,再安装本项目。
py -3.12 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r pip-requirements.txt
.\.venv\Scripts\python.exe -m pip install --no-deps -e .配套清单包含测试与接口依赖;uv sync 默认准备主项目和测试,写接口时再加 --extra serve。CPU、CUDA 和其他设备的安装选择见 PyTorch 本机安装。