# transform- learning **Repository Path**: newly-released_0/transform--learning ## Basic Information - **Project Name**: transform- learning - **Description**: 学习transfrom - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-07-13 - **Last Updated**: 2026-08-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Transform Learning PyTorch 深度学习入门与实践教程。 ## 项目简介 本项目是一个系统性的 PyTorch 深度学习教程,通过一系列由浅入深的代码示例,帮助初学者掌握 PyTorch 的核心概念和实战技能。 ## 教程目录 | 文件 | 内容 | |------|------| | `01_tensor.py` | PyTorch 张量操作基础 | | `02_autograd.py` | 自动求导机制 | | `03_nn_module.py` | 神经网络模块 (nn.Module) | | `04_training_loop.py` | 训练循环 | | `05_mnist.py` | MNIST 手写数字识别 | | `06_dataloader.py` | 数据加载器 (Dataset/DataLoader) | | `07_overfitting.py` | 过拟合与正则化 | | `08_save_load.py` | 模型保存与加载 | | `09_cnn.py` | 卷积神经网络 (CNN) | | `10_attention.py` | 注意力机制 | | `11_transformer.py` | Transformer 模型实现 | | `12_transformers.py` | Hugging Face Transformers 库使用 | | `13_tokenizer.py` | 分词器 | | `14_lora.py` | LoRA 低秩微调技术 | | `15_ollama.py` | Ollama 本地大模型部署 | | `16_mlx.py` | Apple MLX 框架 | | `17_local_app.py` | 本地 AI 应用开发 | | `18_qwen_lora.py` | Qwen 模型 LoRA 微调实战 | | `19_evaluate.py` | 准确率、混淆矩阵与错误样本分析 | | `20_augmented_cnn.py` | 数据增强、验证集切分与改进版 CNN | | `21_agent_loop.py` | 手写 ReAct Agent 循环与工具调用 | | `22_langgraph_agent.py` | 用 LangGraph 重写 21 课:状态图、存档、人工审批 | | `23_ddpm.py` | 手写极简 DDPM:加噪、去噪网络、反向采样 | | `24_diffusers.py` | 用 diffusers 跑 Stable Diffusion:潜空间与文本条件 | | `25_sd_lora.py` | 给 SD1.5 训一个 LoRA,教模型一个新概念 | > 21、22 课共用 `agent_tools.py` 里的工具与提示词,差别只在控制流:一个是 `while`,一个是图。 > > 23→25 是一条线:先手写去噪循环,再看真实 SD 多了哪两件事(潜空间、文本条件),最后动手改它。 ## 进阶应用 | 文件 | 内容 | |------|------| | `recognize.py` | CNN 手写数字识别 | | `recognize_multiple.py` | 多数字图像识别与分割 | | `mnist_preprocessing.py` | MNIST 图像归一化与重心校正 | | `check_env.py` | 环境检查 | ## 环境要求 - Python 3.10+ - PyTorch 2.2+ - 建议使用虚拟环境 ## 安装依赖 ```bash pip install -r requirements.txt ``` ## 使用方式 每个 `.py` 文件都可以独立运行,例如: ```bash python 01_tensor.py python 05_mnist.py python 19_evaluate.py python 20_augmented_cnn.py ``` 识别自己的手写数字(`--architecture` 需与权重文件匹配): ```bash # 第 9 课的基础 CNN python recognize.py my_digit.png python recognize_multiple.py samples/shouxie.jpeg # 第 20 课的改进版 CNN python recognize.py my_digit.png \ --architecture improved --model ./models/mnist_cnn_improved.pt ``` ## 运行测试 ```bash python -m pytest ``` ## 评估真实手写照片 `19_evaluate.py` 会分三部分报告:MNIST 测试集、MNIST 原图经预处理管线、真实手写照片。 要加入自己的手写照片,把图片和同名 `.labels.txt` 一起放进 `samples/`, 标注内容是按阅读顺序(从上到下、从左到右)的数字串: ``` samples/shouxie.jpeg samples/shouxie.labels.txt # 内容: 1627384950 ``` 真实照片的准确率通常明显低于 MNIST 测试集——这个差距才是模型实际可用性的信号。 ## 项目结构 ``` ├── 01-25_*.py # 教程代码 ├── agent_tools.py # 21/22 课共用的工具、提示词、解析器 ├── recognize*.py # 图像识别应用 ├── test_*.py # 预处理、切分与扩散调度的单元测试 ├── check_env.py # 环境检查工具 └── samples/ # 样本数据与生成结果 ``` ## 学习路径建议 1. **基础入门**: 01 → 04,掌握 PyTorch 基本操作 2. **数据处理**: 05 → 06,学会数据加载与预处理 3. **模型训练**: 07 → 08,理解训练技巧和模型管理 4. **深度网络**: 09 → 11,学习 CNN 到 Transformer 5. **大模型**: 12 → 18,掌握大模型应用与微调 6. **模型评估与优化**: 19 → 20,学习错误分析、数据增强和 CNN 正则化 7. **Agent 入门**: 21 → 22,先手写工具调用循环,再用 LangGraph 重写同一个 Agent 8. **扩散模型**: 23 → 25,手写 DDPM,再到真实 Stable Diffusion 和 LoRA 微调 ## 扩散模型三课 第 23 课把去噪循环拆开手写,第 24 课补上真实 SD 多出来的潜空间和文本条件, 第 25 课动手改模型。三课的训练目标是同一个:预测掺进去的噪声。 ```bash # 23 课:MNIST 上训一个 DDPM(M4 约 8 分钟),产出 samples/ddpm_*.png .venv/bin/python 23_ddpm.py .venv/bin/python 23_ddpm.py --epochs 1 # 只想快速跑通 .venv/bin/python 23_ddpm.py --load # 用已存权重直接采样 # 24 课:SD-Turbo 两步出图(首次运行下载约 2.5GB) .venv/bin/python 24_diffusers.py --explain # 只看结构,不下载权重 .venv/bin/python 24_diffusers.py --prompt "a red panda astronaut" .venv/bin/python 24_diffusers.py --model sd15 --steps 30 # 对比原版 # 25 课:给 SD1.5 训 LoRA(首次运行下载约 4GB) .venv/bin/python 25_sd_lora.py --explain .venv/bin/python 25_sd_lora.py # 训练 400 步 + 自动出 before/after 对比 .venv/bin/python 25_sd_lora.py --steps 100 # 快速跑通 # 训完之后用它出图(触发词 zqx pattern 要出现在提示词里) .venv/bin/python 25_sd_lora.py --generate .venv/bin/python 25_sd_lora.py --generate --prompt "a mug with zqx pattern" .venv/bin/python 25_sd_lora.py --generate --scale 0.6 # 把 LoRA 调弱 ``` 第 23 课手写的那三行采样公式,在 24 课就是 `scheduler.step()`; 第 14 课手写的低秩矩阵,在 25 课变成挂到 SD 注意力层上的 `LoraConfig`。 **LoRA 训练和出图是分开的**:训一次产出 3.2MB 权重文件,之后每次出图加载它即可 (`--generate`)。从社区下载的 LoRA 也是同一种文件,用法完全一样。 `--scale` 控制强度,触发词必须出现在提示词里才生效。 **和现在的大模型什么关系**:SD3、FLUX、Z-Image 把去噪网络从 U-Net 换成了 Transformer(MMDiT / S3-DiT),训练目标换成 Flow Matching,但"加噪 → 学着 预测噪声 → 反向逐步去噪"这个框架和第 23 课完全一样。它们画手画脸更稳, 靠的是数据、规模和架构带来的整体分布改善,不是内置了修复模块。 ## Agent 课的运行方式 21、22 两课都能在没有 Ollama 的情况下用假模型看流程: ```bash .venv/bin/python 21_agent_loop.py --demo .venv/bin/python 22_langgraph_agent.py --demo .venv/bin/python 22_langgraph_agent.py --demo --approve # 调工具前停下来问你 ``` 接真实模型(需先 `ollama serve`): ```bash .venv/bin/python 21_agent_loop.py "23 乘以 17 是多少" .venv/bin/python 22_langgraph_agent.py "23 乘以 17 是多少" --model qwen2.5:7b ``` 没有本机模型?任何 OpenAI 兼容接口都能接(DeepSeek、Kimi、硅基流动、vLLM 等): ```bash export OPENAI_API_KEY=sk-xxx .venv/bin/python 22_langgraph_agent.py "23 乘以 17 是多少" \ --api-base https://api.deepseek.com/v1 --model deepseek-chat ``` `--api-base` 留空就走本机 Ollama。Agent 只依赖一个"收消息、返字符串"的函数 (`agent_tools.make_chat`),换后端不影响循环和图的任何一行。 Agent 有 5 个工具:`calculate`、`count`、`time`、`list_files`、`read_file`。 工具越多,"选哪个、传什么参数"才真正有难度——两个工具是看不出区别的。 **安全**:工具参数来自模型输出,等于外部不可信输入。所以计算器用 AST 白名单 而不是 `eval()`,文件工具锁死在项目目录内(`../`、绝对路径、符号链接都会被 `resolve()` 之后挡掉)。提示词注入正是冲着工具来的,"模型应该不会这么干"不是理由。 **防死循环**:小模型常卡在"调工具 → 拿结果 → 又调同一个工具"的环里。`run_tool` 记住调过的"工具+参数",第二次出现时不再执行,而是把上次结果连同"你已经问过了, 请直接给答案"还给模型。光靠 `max_steps` 只能等它耗尽步数然后放弃。 默认的 `qwen2.5:0.5b` 常常不守格式、工具报错后还会编答案。这是模型能力上限, 不是代码问题——Agent 的可靠性主要由模型决定,框架只负责流程。 ## 许可证 MIT License