PyTorch 基础编程教学:从零搭建深度学习代码框架

深度学习技术落地离不开代码实现,PyTorch 凭借动态图机制、简洁友好的API以及强大的生态,成为科研与工业界最主流的框架之一。很多初学者在入门时会遇到一个难题:零散学会张量、自动微分等知识点,但无法串联起来,独立写出一套完整可运行的深度学习训练代码。

本文将从最基础的概念出发,手把手带你从零搭建一套深度学习代码框架,不堆砌复杂模型,聚焦代码结构规范,让你理解深度学习项目的标准开发流程。

## 一、环境准备与PyTorch安装

在写代码之前,首先配置开发环境。推荐使用Anaconda创建独立虚拟环境,避免不同包之间版本冲突。

```bash

# 创建虚拟环境

conda create -n torch_env python=3.10

conda activate torch_env

# 安装PyTorch,可根据CUDA版本去官网修改命令

pip3 install torch torchvision torchaudio

```

安装完成后,打开Python终端验证是否安装成功:

```python

import torch

# 查看torch版本

print(torch.__version__)

# 检查GPU是否可用

print(torch.cuda.is_available())

```

如果输出`True`代表CUDA可用,可以利用GPU加速后续模型训练;如果是CPU环境,代码依然可以正常运行,只是训练速度会慢一些。

## 二、深度学习代码框架整体结构

一套标准的深度学习代码,一般分为5大模块,这也是我们本次搭建框架的核心:

1. **数据加载模块**:数据集读取、预处理、分批加载

2. **模型定义模块**:搭建神经网络结构

3. **损失函数与优化器**:定义目标函数,设置参数更新策略

4. **训练循环模块**:前向传播、计算损失、反向传播、参数更新

5. **验证模块**:在验证集评估模型效果,监控过拟合

> 核心思想:将不同功能解耦,每个模块各司其职,后续更换数据集、修改网络结构时,不需要大面积改写代码。

## 三、分步实现完整代码框架

### 1. 导入依赖库

```python

import torch

import torch.nn as nn

import torch.optim as optim

from torch.utils.data import DataLoader, TensorDataset

```

### 2. 构造数据集与DataLoader(数据模块)

DataLoader是PyTorch数据流水线的核心,负责批量读取、打乱数据,支持多线程加载。这里我们构造一份简单的模拟数据集演示流程,你后续可以替换成MNIST、CIFAR等真实数据集。

```python

# 构造模拟输入与标签

X = torch.randn(1000, 10) # 1000条样本,每条样本10个特征

y = torch.randint(0, 2, (1000,)) # 二分类标签0/1

# 划分训练集、验证集

train_dataset = TensorDataset(X[:800], y[:800])

val_dataset = TensorDataset(X[800:], y[800:])

train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)

val_loader = DataLoader(val_dataset, batch_size=32, shuffle=False)

```

`shuffle=True`代表训练集每轮epoch都会打乱顺序,防止模型记住样本顺序;验证集不需要打乱。

### 3. 定义神经网络模型(模型模块)

推荐继承`nn.Module`来定义模型,这是PyTorch标准写法。在`__init__`里定义网络层,`forward`函数实现数据前向传播逻辑。

```python

class SimpleNet(nn.Module):

  def __init__(self, input_dim):

    super().__init__()

    self.layers = nn.Sequential(

      nn.Linear(input_dim, 64),

      nn.ReLU(),

      nn.Linear(64, 32),

      nn.ReLU(),

      nn.Linear(32, 2)

    )

  def forward(self, x):

    return self.layers(x)

# 初始化模型

model = SimpleNet(input_dim=10)

```

### 4. 损失函数与优化器配置

任务是二分类,使用交叉熵损失;优化器选择Adam,学习率设置超参。

```python

# 损失函数

criterion = nn.CrossEntropyLoss()

# 优化器,传入模型参数与学习率

optimizer = optim.Adam(model.parameters(), lr=1e-3)

```

### 5. 训练+验证循环

训练循环是整个框架的核心,每一轮训练固定流程:

1. 从DataLoader取出一批数据

2. 模型前向传播得到预测值

3. 计算损失

4. 梯度清零 → 反向传播求梯度 → 优化器更新参数

验证阶段不需要计算梯度,使用`torch.no_grad()`关闭梯度计算,节省显存。

```python

def train_one_epoch(model, loader, criterion, optimizer, device):

  model.train()

  total_loss = 0

  for batch_x, batch_y in loader:

    batch_x, batch_y = batch_x.to(device), batch_y.to(device)

    # 前向传播

    pred = model(batch_x)

    loss = criterion(pred, batch_y)

    # 反向传播更新参数

    optimizer.zero_grad()

    loss.backward()

    optimizer.step()

    total_loss += loss.item()

  return total_loss / len(loader)

def val_one_epoch(model, loader, criterion, device):

  model.eval()

  total_loss = 0

  with torch.no_grad():

    for batch_x, batch_y in loader:

      batch_x, batch_y = batch_x.to(device), batch_y.to(device)

      pred = model(batch_x)

      loss = criterion(pred, batch_y)

      total_loss += loss.item()

  return total_loss / len(loader)

# 设备自动选择

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

model = model.to(device)

# 开始训练

epoch_num = 20

for epoch in range(epoch_num):

  train_loss = train_one_epoch(model, train_loader, criterion, optimizer, device)

  val_loss = val_one_epoch(model, val_loader, criterion, device)

  print(f"Epoch[{epoch+1:2d}] | Train Loss: {train_loss:.4f} | Val Loss: {val_loss:.4f}")

```

## 四、代码框架拓展思路

上面这份代码是最小可用版本,掌握基础结构之后,你可以继续扩展功能:

1. **模型保存与加载**:使用`torch.save()`保存模型权重,训练中断后可以继续训练

```python

# 保存

torch.save(model.state_dict(), "model.pth")

# 加载

model.load_state_dict(torch.load("model.pth"))

```

2. **增加指标计算**:在验证阶段增加准确率、召回率等评估指标,不只看loss

3. **学习率调度器**:使用`torch.optim.lr_scheduler`动态调整学习率

4. **替换真实数据集**:继承`torch.utils.data.Dataset`自定义数据集,加载图片、文本等真实数据

5. **增加日志记录**:搭配TensorBoard记录训练曲线,可视化loss变化

## 五、新手常见踩坑点

1. **训练集和验证集模式混淆**:训练时`model.train()`,验证时`model.eval()`,忘记切换会影响Dropout、BN层行为。

2. **梯度累积**:每次循环必须写`optimizer.zero_grad()`,否则梯度会不断累加,参数更新异常。

3. **数据设备不匹配**:数据和模型要放到同一个设备(CPU/GPU),否则会报张量设备不匹配错误。

4. **验证阶段没有关闭梯度**:不使用`torch.no_grad()`会占用大量显存,训练大模型时容易OOM。

## 总结

本文搭建的这套PyTorch深度学习代码框架,不是针对某个特定任务的一次性脚本,而是一套可复用的基础模板。所有复杂深度学习项目,本质上都是在这个基础框架上做扩展:更换网络结构、修改数据预处理、调整损失函数、增加更多评估逻辑。

学习PyTorch,不要只停留在看懂API的阶段。动手运行这份完整代码,修改超参、观察loss变化,理解每一行代码在整个训练链路中的作用,你才能真正掌握深度学习编程。

https://github.com/cvdfsl9002/hmhgmh-45645/commit/6f88a3c356517420c368a9213f7a6400ac9c1d23

https://github.com/cvdfsl9002/hmhgmh-45645/commit/ad6f675dae2e5544623cc5047f69096a38a78936

https://github.com/cvdfsl9002/hmhgmh-45645/commit/2cab0f77d6c49b970e19a9b887350480538d5d2b

https://github.com/cvdfsl9002/hmhgmh-45645/commit/6f65ab273143a572bb00728820a9473def7f08fc

https://github.com/cvdfsl9002/hmhgmh-45645/commit/2cedac490a3be9f61d085adaa9980abbc8fb2938

https://github.com/cvdfsl9002/hmhgmh-45645/commit/dbd2f0a191864f233e7aaa42ae9dd7115911c710

https://github.com/cvdfsl9002/hmhgmh-45645/commit/64e10a2a7b28933ff2df1b06a0512c31767a2203

https://github.com/cvdfsl9002/hmhgmh-45645/commit/7686534d0fa35cac2e6364b09623f9af7ba08dc2

https://github.com/cvdfsl9002/hmhgmh-45645/commit/748894f04e46c73129b1c30f0e11b81a0dbe8703

https://github.com/cvdfsl9002/hmhgmh-45645/commit/e62318c163798c1b2343a4af7f7f54ade596df4e

https://github.com/cvdfsl9002/hmhgmh-45645/commit/e4e5f9fe5f0a5e26bb90831dfcabb72c2595ad8a

https://github.com/cvdfsl9002/hmhgmh-45645/commit/8688bd9c16d67efc79aec9eeb5617384515008e3

https://github.com/cvdfsl9002/hmhgmh-45645/commit/0811536a17803141d37e0db827ff4f883d44e7cd

https://github.com/cvdfsl9002/hmhgmh-45645/commit/818f64b9980ace5bd267db4c8475be1442f161f5

https://github.com/cvdfsl9002/hmhgmh-45645/commit/577635bc9b6acea44fa1a2ae999318ce6ce8c575

https://www.v-tianjin.com/user/7801

https://www.v-tianjin.com/user/7586

https://www.v-tianjin.com/user/8276

https://www.v-tianjin.com/user/9042

https://www.v-tianjin.com/user/1407

https://www.v-tianjin.com/user/2367

https://www.v-tianjin.com/user/1467

https://www.v-tianjin.com/user/9957

https://www.v-tianjin.com/user/3107

https://www.v-tianjin.com/user/9303

https://www.v-tianjin.com/user/5869

https://www.v-tianjin.com/user/9878

https://www.v-tianjin.com/user/6237

https://www.v-tianjin.com/user/5491

https://www.v-tianjin.com/user/4286

https://www.v-tianjin.com/user/9447

https://www.v-tianjin.com/user/4205

https://www.v-tianjin.com/user/4290

https://www.v-tianjin.com/user/9454

https://www.v-tianjin.com/user/3216

https://www.v-tianjin.com/user/3668

https://www.v-tianjin.com/user/2859

https://www.v-tianjin.com/user/2999

https://www.v-tianjin.com/user/8315

https://www.v-tianjin.com/user/1799

https://www.v-tianjin.com/user/9054

https://www.v-tianjin.com/user/2206

https://www.v-tianjin.com/user/8818

https://www.v-tianjin.com/user/8238

https://www.v-tianjin.com/user/1487

https://www.v-tianjin.com/user/2786

https://www.v-tianjin.com/user/7880

https://www.v-tianjin.com/user/1019

https://www.v-tianjin.com/user/6937

https://www.v-tianjin.com/user/6607

https://www.v-tianjin.com/user/7342

https://www.v-tianjin.com/user/3461

https://www.v-tianjin.com/user/5778

https://www.v-tianjin.com/user/9748

https://www.v-tianjin.com/user/1856

https://www.v-tianjin.com/user/5205

https://www.v-tianjin.com/user/5862

https://www.v-tianjin.com/user/5694

https://www.v-tianjin.com/user/5752

https://www.v-tianjin.com/user/6128

https://www.v-tianjin.com/user/9223

https://www.v-tianjin.com/user/25711

https://www.v-tianjin.com/user/6916

https://www.v-tianjin.com/user/9643

https://www.v-tianjin.com/user/52221

https://www.v-tianjin.com/user/7329

https://www.v-tianjin.com/user/2286

https://www.v-tianjin.com/user/4549

https://www.v-tianjin.com/user/6244

https://www.v-tianjin.com/user/1110

https://www.v-tianjin.com/user/68841

https://www.v-tianjin.com/user/7334

https://www.v-tianjin.com/user/6593

https://www.v-tianjin.com/user/8494

https://www.v-tianjin.com/user/9773

https://www.v-tianjin.com/user/6383

https://www.v-tianjin.com/user/88591

https://www.v-tianjin.com/user/5189

https://www.v-tianjin.com/user/3877

https://www.v-tianjin.com/user/9044

https://www.v-tianjin.com/user/42081

https://www.v-tianjin.com/user/1989

https://www.v-tianjin.com/user/1268

https://www.v-tianjin.com/user/6228

https://www.v-tianjin.com/user/5955

https://www.v-tianjin.com/user/8270

https://www.v-tianjin.com/user/8928

https://www.v-tianjin.com/user/9220

https://www.v-tianjin.com/user/2154

https://www.v-tianjin.com/user/6080

https://www.v-tianjin.com/user/5127

https://www.v-tianjin.com/user/7026

https://www.v-tianjin.com/user/4007

https://www.v-tianjin.com/user/8294

https://www.v-tianjin.com/user/1901

https://www.v-tianjin.com/user/9513

https://www.v-tianjin.com/user/9389

https://www.v-tianjin.com/user/9363

https://www.v-tianjin.com/user/8827

https://www.v-tianjin.com/user/5853

https://www.v-tianjin.com/user/7586/questions

https://www.v-tianjin.com/user/3877/follows

https://www.v-tianjin.com/user/9054/follows

https://www.v-tianjin.com/user/7329/follows

https://www.v-tianjin.com/user/5127/favorites

https://www.v-tianjin.com/user/1901/follows

https://www.v-tianjin.com/user/9363/follows

https://www.v-tianjin.com/user/42081/follows

https://www.v-tianjin.com/user/9363/questions

https://www.v-tianjin.com/user/9054/favorites

https://www.v-tianjin.com/user/3107/favorites

https://www.v-tianjin.com/user/6916/follows

https://www.v-tianjin.com/user/1467/favorites

https://www.v-tianjin.com/user/3107/follows

https://www.v-tianjin.com/user/7880/follows

https://www.v-tianjin.com/user/5752/favorites

https://www.v-tianjin.com/user/5694/favorites

https://www.v-tianjin.com/user/6607/questions

https://www.v-tianjin.com/user/2999/questions

https://www.v-tianjin.com/user/6916/favorites

https://www.v-tianjin.com/user/6937/favorites

https://www.v-tianjin.com/user/8827/questions

https://www.v-tianjin.com/user/9513/questions

https://www.v-tianjin.com/user/68841/favorites

https://www.v-tianjin.com/user/5853/follows

https://www.v-tianjin.com/user/9044/questions

https://www.v-tianjin.com/user/9447/questions

https://www.v-tianjin.com/user/7801/questions

https://www.v-tianjin.com/user/7342/follows

https://www.v-tianjin.com/user/68841/questions

https://www.v-tianjin.com/user/5955/questions

https://www.v-tianjin.com/user/9454/questions

https://www.v-tianjin.com/user/9220/follows

https://www.v-tianjin.com/user/8238/follows

https://www.v-tianjin.com/user/8294/follows

https://www.v-tianjin.com/user/8928/questions

https://www.v-tianjin.com/user/9447/follows

https://www.v-tianjin.com/user/9513/favorites

https://www.v-tianjin.com/user/8494/follows

https://www.v-tianjin.com/user/2367/favorites

https://www.v-tianjin.com/user/3668/follows

https://www.v-tianjin.com/user/1901/questions

https://www.v-tianjin.com/user/6128/questions

https://www.v-tianjin.com/user/1467/follows

https://www.v-tianjin.com/user/1268/favorites

https://www.v-tianjin.com/user/8270/favorites

https://www.v-tianjin.com/user/4205/questions

https://www.v-tianjin.com/user/8270/follows

https://www.v-tianjin.com/user/9748/questions

https://www.v-tianjin.com/user/2786/favorites

https://www.v-tianjin.com/user/9748/follows

https://www.v-tianjin.com/user/2286/questions

https://www.v-tianjin.com/user/9643/questions

https://www.v-tianjin.com/user/2286/follows

https://www.v-tianjin.com/user/9389/favorites

https://www.v-tianjin.com/user/5694/follows

https://www.v-tianjin.com/user/5189/follows

https://www.v-tianjin.com/user/3461/favorites

https://www.v-tianjin.com/user/5491/questions

https://www.v-tianjin.com/user/3877/questions

https://www.v-tianjin.com/user/7026/questions

https://www.v-tianjin.com/user/5127/questions

https://www.v-tianjin.com/user/1856/questions

https://www.v-tianjin.com/user/5853/favorites

https://www.v-tianjin.com/user/6228/follows

https://www.v-tianjin.com/user/52221/favorites

https://www.v-tianjin.com/user/2367/questions

https://www.v-tianjin.com/user/5189/favorites

https://www.v-tianjin.com/user/8238/favorites

https://www.v-tianjin.com/user/2206/favorites

https://www.v-tianjin.com/user/9773/follows

https://www.v-tianjin.com/user/8818/follows

https://www.v-tianjin.com/user/1407/questions

https://www.v-tianjin.com/user/5127/follows

https://www.v-tianjin.com/user/1268/follows

https://www.v-tianjin.com/user/5205/favorites

https://www.v-tianjin.com/user/9389/follows

https://www.v-tianjin.com/user/2206/questions

https://www.v-tianjin.com/user/5955/favorites

https://www.v-tianjin.com/user/2999/follows

https://www.v-tianjin.com/user/9773/questions

https://www.v-tianjin.com/user/2786/questions

https://www.v-tianjin.com/user/1487/favorites

https://www.v-tianjin.com/user/4007/follows

https://www.v-tianjin.com/user/9447/favorites

https://www.v-tianjin.com/user/9303/questions

https://www.v-tianjin.com/user/3461/questions

https://www.v-tianjin.com/user/7026/favorites

https://www.v-tianjin.com/user/4290/follows

https://www.v-tianjin.com/user/8827/follows

https://www.v-tianjin.com/user/9223/favorites

https://www.v-tianjin.com/user/6080/follows

https://www.v-tianjin.com/user/4205/follows

https://www.v-tianjin.com/user/9454/follows

https://www.v-tianjin.com/user/6593/questions

https://www.v-tianjin.com/user/9044/favorites

https://www.v-tianjin.com/user/3216/follows

https://www.v-tianjin.com/user/8928/favorites

https://www.v-tianjin.com/user/8270/questions

https://www.v-tianjin.com/user/6607/favorites

https://www.v-tianjin.com/user/8494/questions

https://www.v-tianjin.com/user/25711/questions

https://www.v-tianjin.com/user/1799/questions

https://www.v-tianjin.com/user/1856/follows

https://www.v-tianjin.com/user/52221/follows

https://www.v-tianjin.com/user/5491/favorites

https://www.v-tianjin.com/user/9042/questions

https://www.v-tianjin.com/user/9878/follows

https://www.v-tianjin.com/user/2859/questions

https://www.v-tianjin.com/user/1019/favorites

https://www.v-tianjin.com/user/9878/favorites

https://www.v-tianjin.com/user/4286/favorites

https://www.v-tianjin.com/user/7334/favorites

https://www.v-tianjin.com/user/6593/follows

https://www.v-tianjin.com/user/9054/questions

https://www.v-tianjin.com/user/4007/questions

https://www.v-tianjin.com/user/7342/favorites

https://www.v-tianjin.com/user/5853/questions

https://www.v-tianjin.com/user/1019/follows

https://www.v-tianjin.com/user/5869/questions

https://www.v-tianjin.com/user/6228/questions

https://www.v-tianjin.com/user/1110/questions

https://www.v-tianjin.com/user/9223/follows

https://www.v-tianjin.com/user/9042/follows

https://www.v-tianjin.com/user/7586/favorites

https://www.v-tianjin.com/user/5205/questions

https://www.v-tianjin.com/user/9957/follows

https://www.v-tianjin.com/user/8238/questions

https://www.v-tianjin.com/user/5869/follows

https://www.v-tianjin.com/user/4205/favorites

https://www.v-tianjin.com/user/1110/follows

https://www.v-tianjin.com/user/5189/questions

https://www.v-tianjin.com/user/9223/questions

https://www.v-tianjin.com/user/4549/favorites

https://www.v-tianjin.com/user/3216/questions

https://www.v-tianjin.com/user/9044/follows

https://www.v-tianjin.com/user/1989/favorites

https://www.v-tianjin.com/user/4290/questions

https://www.v-tianjin.com/user/5778/favorites

https://www.v-tianjin.com/user/1799/follows

https://www.v-tianjin.com/user/5491/follows

https://www.v-tianjin.com/user/5869/favorites

https://www.v-tianjin.com/user/1487/questions

https://www.v-tianjin.com/user/2859/follows

https://www.v-tianjin.com/user/52221/questions

https://www.v-tianjin.com/user/4549/follows

https://www.v-tianjin.com/user/9957/favorites

https://www.v-tianjin.com/user/6244/favorites

https://www.v-tianjin.com/user/7342/questions

https://www.v-tianjin.com/user/7801/follows

https://www.v-tianjin.com/user/3461/follows

https://www.v-tianjin.com/user/88591/favorites

https://www.v-tianjin.com/user/8818/questions

https://www.v-tianjin.com/user/2286/favorites

https://www.v-tianjin.com/user/25711/favorites

https://www.v-tianjin.com/user/1856/favorites

https://www.v-tianjin.com/user/2999/favorites

https://www.v-tianjin.com/user/7026/follows

https://www.v-tianjin.com/user/6080/favorites

https://www.v-tianjin.com/user/5862/follows

https://www.v-tianjin.com/user/6228/favorites

https://www.v-tianjin.com/user/6607/follows

https://www.v-tianjin.com/user/1799/favorites

https://www.v-tianjin.com/user/7801/favorites

https://www.v-tianjin.com/user/3107/questions

https://www.v-tianjin.com/user/5955/follows

https://www.v-tianjin.com/user/8928/follows

https://www.v-tianjin.com/user/7880/favorites

https://www.v-tianjin.com/user/9389/questions

https://www.v-tianjin.com/user/7334/follows

https://www.v-tianjin.com/user/2154/favorites

https://www.v-tianjin.com/user/9957/questions

https://www.v-tianjin.com/user/6244/follows

https://www.v-tianjin.com/user/68841/follows

https://www.v-tianjin.com/user/7329/questions

https://www.v-tianjin.com/user/88591/questions

https://www.v-tianjin.com/user/6593/favorites

https://www.v-tianjin.com/user/4286/questions

https://www.v-tianjin.com/user/6128/favorites

https://www.v-tianjin.com/user/6383/follows

https://www.v-tianjin.com/user/3216/favorites

https://www.v-tianjin.com/user/2154/follows

https://www.v-tianjin.com/user/1268/questions

https://www.v-tianjin.com/user/9773/favorites

https://www.v-tianjin.com/user/9363/favorites

https://www.v-tianjin.com/user/42081/questions

https://www.v-tianjin.com/user/6383/favorites

https://www.v-tianjin.com/user/9643/favorites

https://www.v-tianjin.com/user/7329/favorites

https://www.v-tianjin.com/user/1407/follows

https://www.v-tianjin.com/user/9748/favorites

https://www.v-tianjin.com/user/8276/questions

https://www.v-tianjin.com/user/1901/favorites

https://www.v-tianjin.com/user/6937/follows

https://www.v-tianjin.com/user/5694/questions

https://www.v-tianjin.com/user/3877/favorites

https://www.v-tianjin.com/user/8276/follows

https://www.v-tianjin.com/user/9220/questions

https://www.v-tianjin.com/user/8494/favorites

https://www.v-tianjin.com/user/6244/questions

https://www.v-tianjin.com/user/1019/questions

https://www.v-tianjin.com/user/9303/follows

https://www.v-tianjin.com/user/9878/questions

https://www.v-tianjin.com/user/3668/favorites

https://www.v-tianjin.com/user/2859/favorites

https://www.v-tianjin.com/user/8818/favorites

https://www.v-tianjin.com/user/1407/favorites

https://www.v-tianjin.com/user/1467/questions

https://www.v-tianjin.com/user/9513/follows

https://www.v-tianjin.com/user/5862/questions

https://www.v-tianjin.com/user/4549/questions

https://www.v-tianjin.com/user/4290/favorites

https://www.v-tianjin.com/user/6937/questions

https://www.v-tianjin.com/user/42081/favorites

https://www.v-tianjin.com/user/1989/questions

https://www.v-tianjin.com/user/6237/questions

https://www.v-tianjin.com/user/9303/favorites

https://www.v-tianjin.com/user/8315/questions

https://www.v-tianjin.com/user/6916/questions

https://www.v-tianjin.com/user/8276/favorites

https://www.v-tianjin.com/user/2786/follows

https://www.v-tianjin.com/user/1487/follows

https://www.v-tianjin.com/user/8294/favorites

https://www.v-tianjin.com/user/8315/follows

https://www.v-tianjin.com/user/7334/questions

https://www.v-tianjin.com/user/2206/follows

https://www.v-tianjin.com/user/25711/follows

https://www.v-tianjin.com/user/9454/favorites

https://www.v-tianjin.com/user/4286/follows

https://www.v-tianjin.com/user/8827/favorites

https://www.v-tianjin.com/user/5778/questions

https://www.v-tianjin.com/user/8315/favorites

https://www.v-tianjin.com/user/4007/favorites

https://www.v-tianjin.com/user/5752/follows

https://www.v-tianjin.com/user/6237/follows

https://www.v-tianjin.com/user/9042/favorites

https://www.v-tianjin.com/user/6128/follows

https://www.v-tianjin.com/user/9220/favorites

https://www.v-tianjin.com/user/1110/favorites

https://www.v-tianjin.com/user/6237/favorites

https://www.v-tianjin.com/user/5778/follows

https://www.v-tianjin.com/user/2154/questions

https://www.v-tianjin.com/user/6080/questions

https://www.v-tianjin.com/user/5205/follows

https://www.v-tianjin.com/user/7586/follows

https://www.v-tianjin.com/user/3668/questions

https://www.v-tianjin.com/user/9643/follows

https://www.v-tianjin.com/user/8294/questions

https://www.v-tianjin.com/user/5752/questions

https://www.v-tianjin.com/user/2367/follows

https://www.v-tianjin.com/user/5862/favorites

https://www.v-tianjin.com/user/88591/follows

https://www.v-tianjin.com/user/6383/questions

https://www.v-tianjin.com/user/1989/follows

https://www.v-tianjin.com/user/7880/questions

查看全文
我的头像
默认 最新