← 全部文章

学习日志 · Learning Log

2026-09-30 · 本地环境配置和quickstart

对pytorch流程有一个基本认识

373 字

今日目标

优化并理解项目目录结构。 在本地部署pytorch并使用mps。 运行quickstart的代码。 看完tutorials并理解代码。

已运行

cd repytorch

conda create -n repytorch python=3.12
conda activate repytorch
conda update -n base -c conda-forge conda

which python
python --version
python -m pip install torch==2.12.1 torchvision==0.27.1

python scripts/check_mps.py
python tutorials/official_basics/01_tensors/walkthrough.py
python tutorials/official_basics/00_quickstart/quickstart.py

实测结果

Shape of X [N, C, H, W]: torch.Size([64, 1, 28, 28])
Shape of y: torch.Size([64]) torch.int64
Using device: mps
NeuralNetwork(
  (flatten): Flatten(start_dim=1, end_dim=-1)
  (linear_relu_stack): Sequential(
    (0): Linear(in_features=784, out_features=512, bias=True)
    (1): ReLU()
    (2): Linear(in_features=512, out_features=512, bias=True)
    (3): ReLU()
    (4): Linear(in_features=512, out_features=10, bias=True)
  )
)
Epoch 1
-------------------------------
loss: 2.302204  [   64/60000]
loss: 2.285267  [ 6464/60000]
loss: 2.267090  [12864/60000]
loss: 2.258653  [19264/60000]
loss: 2.252688  [25664/60000]
loss: 2.221283  [32064/60000]
loss: 2.229805  [38464/60000]
loss: 2.200109  [44864/60000]
loss: 2.192344  [51264/60000]
loss: 2.163999  [57664/60000]
Test Error: 
 Accuracy: 47.1%, Avg loss: 2.154489 

Epoch 2
-------------------------------
loss: 2.166452  [   64/60000]
loss: 2.152205  [ 6464/60000]
loss: 2.092613  [12864/60000]
loss: 2.109233  [19264/60000]
loss: 2.074476  [25664/60000]
loss: 2.007340  [32064/60000]
loss: 2.040023  [38464/60000]
loss: 1.962362  [44864/60000]
loss: 1.962743  [51264/60000]
loss: 1.895885  [57664/60000]
Test Error: 
 Accuracy: 57.3%, Avg loss: 1.886986 

Epoch 3
-------------------------------
loss: 1.919514  [   64/60000]
loss: 1.887475  [ 6464/60000]
loss: 1.766038  [12864/60000]
loss: 1.808597  [19264/60000]
loss: 1.711801  [25664/60000]
loss: 1.659078  [32064/60000]
loss: 1.686532  [38464/60000]
loss: 1.588109  [44864/60000]
loss: 1.610264  [51264/60000]
loss: 1.507222  [57664/60000]
Test Error: 
 Accuracy: 63.2%, Avg loss: 1.514880 

Epoch 4
-------------------------------
loss: 1.580536  [   64/60000]
loss: 1.545995  [ 6464/60000]
loss: 1.392159  [12864/60000]
loss: 1.462081  [19264/60000]
loss: 1.349674  [25664/60000]
loss: 1.347308  [32064/60000]
loss: 1.362663  [38464/60000]
loss: 1.290665  [44864/60000]
loss: 1.321513  [51264/60000]
loss: 1.223431  [57664/60000]
Test Error: 
 Accuracy: 64.7%, Avg loss: 1.241825 

Epoch 5
-------------------------------
loss: 1.315513  [   64/60000]
loss: 1.303404  [ 6464/60000]
loss: 1.132927  [12864/60000]
loss: 1.234672  [19264/60000]
loss: 1.116155  [25664/60000]
loss: 1.143451  [32064/60000]
loss: 1.163112  [38464/60000]
loss: 1.107189  [44864/60000]
loss: 1.139695  [51264/60000]
loss: 1.058778  [57664/60000]
Test Error: 
 Accuracy: 65.3%, Avg loss: 1.073788 

Done!
Saved PyTorch Model State to (local path, I have hided it)

小记

01: 设备选择

import torch
def select_device() -> torch.device:
    if torch.cuda.is_available():
        return torch.device("cuda")
    if torch.backends.mps.is_available():
        return torch.device("mps")
    return torch.device("cpu")

device = select_device()
print(f"Using device: {device}")

设备选择逻辑 NVIDIA CUDA → Apple MPS → CPU

02:基本顺序

数据处理(Download datasets; Create dataloaders;)

创建模型(Define model;)

优化模型参数(loss_fn; optimizer;)

保存模型()

03: Path基本用法

Path 是 Python 标准库 pathlib 中用于处理文件和文件夹路径的类。相比字符串拼接,它更直观,并且兼容 Windows、macOS 和 Linux。

from pathlib import Path

1. 创建路径

data_dir = Path("data")
file_path = Path("data/images/cat.jpg")

这里只是创建路径对象,不会真的创建文件或文件夹。

2. 拼接路径

使用 / 拼接路径:

data_dir = Path("data")
image_path = data_dir / "images" / "cat.jpg"

print(image_path)
# data/images/cat.jpg

这比 "data" + "/images/" + "cat.jpg" 更方便。

3. 判断路径是否存在

path = Path("data")

print(path.exists())   # 是否存在
print(path.is_file())  # 是否是文件
print(path.is_dir())   # 是否是文件夹

4. 创建文件夹

output_dir = Path("outputs/images")

output_dir.mkdir(parents=True, exist_ok=True)
  • parents=True:自动创建缺少的上级文件夹。
  • exist_ok=True:文件夹已存在时不报错。

5. 获取路径的各个部分

path = Path("data/images/cat.jpg")

print(path.name)    # cat.jpg
print(path.stem)    # cat
print(path.suffix)  # .jpg
print(path.parent)  # data/images

6. 查找文件

查找当前文件夹中的所有 JPG 文件:

image_dir = Path("data/images")

for path in image_dir.glob("*.jpg"):
    print(path)

递归查找所有子文件夹:

for path in image_dir.rglob("*.jpg"):
    print(path)

7. 读取和写入文本

file_path = Path("note.txt")

file_path.write_text("Hello, PyTorch!", encoding="utf-8")
content = file_path.read_text(encoding="utf-8")

print(content)

在 PyTorch 项目中,经常这样组织路径:

project_dir = Path("my_project")
data_dir = project_dir / "data"
model_path = project_dir / "models" / "model.pth"

04: 包

Path → 管理数据文件路径 datasets → 创建或读取数据集 v2 → 预处理和增强图像 DataLoader → 分批加载数据 nn → 定义神经网络和损失函数 torch → 提供张量、自动求导和模型训练能力

产出文件

本地mac部署:local-mac.md 模型文件:model.pth(本地运行生成,未上传)

下一步

继续从01_tensors开始继续往后复现

View the source Markdown on GitHub ↗

Conversation

评论

欢迎交流这篇文章。评论公开保存在 GitHub Discussions,发表前需要登录 GitHub。

快速去一个地方

⌘ / Ctrl + K 打开 · Esc 关闭