数据迁移

PyTorch和 Transformers 是不同层面的工具,核心区别如下:
-
PyTorch:是一个深度学习框架,类似"建造房子的工具箱",提供张量计算、神经网络搭建、模型训练等基础功能,是实现AI模型的底层工具
-
Transformers:是一个预训练模型库(由Hugging Face开发),类似"已经造好的房屋模块",基于PyTorch/TensorFlow等框架,封装了BERT、GPT等主流预训练模型,能直接用于文本生成、翻译等任务,无需从零造模型。
- 用PyTorch可以"从零造模型"
- 而用Transformers能"直接用现成的高级模型"
- 且后者依赖前者(或其他框架)才能运行。
用一个具体场景(比如文本分类)演示两者的实际用法差异吗?这样能更直观理解它们的配合关系
以"文本分类"(比如判断一句话是正面还是负面评价)为例,通过代码核心逻辑对比两者用法,不涉及复杂细节:
- 用PyTorch实现(从零搭模型)
需手动定义网络结构、处理数据,步骤繁琐:
import torch
import torch.nn as nn
1. 手动定义简单神经网络(自己造"房屋框架")
class SimpleNet(nn.Module):
def init(self):
super().init()
self.fc1 = nn.Linear(512, 256) # 全连接层1
self.fc2 = nn.Linear(256, 2) # 输出层(2类:正/负)
def forward(self, x):
x = torch.relu(self.fc1(x))
return self.fc2(x)
2. 手动加载、处理数据(自己准备"建材")
(此处省略几百行:文本转向量、划分训练/测试集、构建数据加载器...)
3. 初始化模型、训练(自己动手"盖房子")
model = SimpleNet()
optimizer = torch.optim.Adam(model.parameters())
(再省略几百行:循环训练、计算损失、反向传播...)
- 用Transformers实现(直接用现成模型)
无需定义网络,调用封装好的预训练模型,几行搞定核心逻辑:
from transformers import BertTokenizer, BertForSequenceClassification
1. 加载现成的预训练模型和分词器(直接拿"现成房屋模块")
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') # 文本转模型能懂的格式
model = BertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels=2) # 自带分类头
2. 处理数据(工具帮你做,无需手动写)
text = "这个产品超好用!"
inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True)
3. 直接推理(不用训练也能跑,或少量微调)
with torch.no_grad():
outputs = model(**inputs)
predictions = torch.argmax(outputs.logits, dim=1) # 直接得到分类结果(正/负)
核心差异很明显:
- PyTorch需要"从0到1造轮子"
- Transformers则是"直接用调好的轮子跑"