PyTorch的生态简介

一,pytorch生态简介

PyTorch的强大并不仅局限于自身的易用性,更在于开源社区围绕PyTorch所产生的一系列工具包(一般是Python package)和程序。
比如对于计算机视觉,有TorchVision、TorchVideo等用于图片和视频处理;
对于自然语言处理,有torchtext;对于图卷积网络,有PyTorch Geometric ····。每个领域还有很多优秀的工具包供社区使用。这些工具包共同构成了PyTorch的生态(EcoSystem)

1,torchvision

torchvision中包含计算机视觉常用的数据集,模型和图像处理方式
我们常用以下几个库:

  • torchvision.datasets:主要包含计算机视觉常见的数据集
  • torchvision.models :预训练好的模型
  • torchvision.tramsforms:数据预处理
  • torchvision.io:提供视频,图片,文件的IO操作
  • torchvision.ops:提供计算机视觉的特定操作
  • torchvision.utils:提供可视化方法
    参考链接:
    https://pytorch.org/vision/stable/transforms.html
    https://github.com/pytorch/vision/tree/main/torchvision/models

2,pytorchvideo简介

有关视频的深度学习模型仍然有着许多缺点:
计算资源耗费更多,并且没有高质量的model zoo,不能像图片一样进行迁移学习和论文复现。
数据集处理较麻烦,但没有一个很好的视频处理工具。
随着多模态越来越流行,亟需一个工具来处理其他模态。
部署优化等问题。
为了解决这些问题,Meta推出了PyTorchVideo深度学习库。PyTorchVideo 是一个专注于视频理解工作的深度学习库。PytorchVideo 提供了加速视频理解研究所需的可重用、模块化和高效的组件。PyTorchVideo 是使用PyTorch开发的,支持不同的深度学习视频组件,如视频模型、视频数据集和视频特定转换。
PytorchVideo 提供了加速视频理解研究所需的模块化和高效的API。它还支持不同的深度学习视频组件,如视频模型、视频数据集和视频特定转换,最重要的是,PytorchVideo也提供了model zoo,使得人们可以使用各种先进的预训练视频模型及其评判基准。主要亮点如下:

  • 基于pytorch
  • model zoo
  • 数据预处理和常见数据
  • 模块化设计
  • 支持多模态
  • 移动端部署优化
    参考链接:
    https://pytorchvideo.readthedocs.io/en/latest/index.html

3,torchtext简介

自然语言处理(NLP)的工具包torchtext
torchtext可以方便的对文本进行预处理,例如截断补长、构建词表等。torchtext主要包含了以下的主要组成部分:

  • 数据处理工具 torchtext.data.functional、torchtext.data.utils
  • 数据集 torchtext.data.datasets
  • 词表工具 torchtext.vocab
  • 评测指标 torchtext.metrics
    安装
    torchtext可以直接使用pip进行安装:
pip install torchtext

构建数据集
Field及其使用
Field是torchtext中定义数据类型以及转换为张量的指令。torchtext 认为一个样本是由多个字段(文本字段,标签字段)组成,不同的字段可能会有不同的处理方式,所以才会有 Field 抽象。定义Field对象是为了明确如何处理不同类型的数据,但具体的处理则是在Dataset中完成的。

tokenize = lambda x: x.split()
TEXT = data.Field(sequential=True, tokenize=tokenize, lower=True, fix_length=200)
LABEL = data.Field(sequential=False, use_vocab=False)

sequential设置数据是否是顺序表示的;
​ tokenize用于设置将字符串标记为顺序实例的函数
​ lower设置是否将字符串全部转为小写;
​ fix_length设置此字段所有实例都将填充到一个固定的长度,方便后续处理;
​ use_vocab设置是否引入Vocab object,如果为False,则需要保证之后输入field中的data都是numerical的
构建dataset

from torchtext import data
def get_dataset(csv_data, text_field, label_field, test=False):
    fields = [("id", None), # we won't be needing the id, so we pass in None as the field
                 ("comment_text", text_field), ("toxic", label_field)]       
    examples = []

    if test:
        # 如果为测试集,则不加载label
        for text in tqdm(csv_data['comment_text']):
            examples.append(data.Example.fromlist([None, text, None], fields))
    else:
        for text, label in tqdm(zip(csv_data['comment_text'], csv_data['toxic'])):
            examples.append(data.Example.fromlist([None, text, label], fields))
    return examples, fields

使用数据csv_data中有"comment_text"和"toxic"两列,分别对应text和label

train_data = pd.read_csv('train_toxic_comments.csv')
valid_data = pd.read_csv('valid_toxic_comments.csv')
test_data = pd.read_csv("test_toxic_comments.csv")
TEXT = data.Field(sequential=True, tokenize=tokenize, lower=True)
LABEL = data.Field(sequential=False, use_vocab=False)

# 得到构建Dataset所需的examples和fields
train_examples, train_fields = get_dataset(train_data, TEXT, LABEL)
valid_examples, valid_fields = get_dataset(valid_data, TEXT, LABEL)
test_examples, test_fields = get_dataset(test_data, TEXT, None, test=True)
# 构建Dataset数据集
train = data.Dataset(train_examples, train_fields)
valid = data.Dataset(valid_examples, valid_fields)
test = data.Dataset(test_examples, test_fields)

可以看到,定义Field对象完成后,通过get_dataset函数可以读入数据的文本和标签,将二者(examples)连同field一起送到torchtext.data.Dataset类中,即可完成数据集的构建。使用以下命令可以看下读入的数据情况:

# 检查keys是否正确
print(train[0].__dict__.keys())
print(test[0].__dict__.keys())
# 抽查内容是否正确
print(train[0].comment_text)

词汇表
在NLP中,将字符串形式的词语(word)转变为数字形式的向量表示(embedding)是非常重要的一步,被称为Word Embedding。这一步的基本思想是收集一个比较大的语料库(尽量与所做的任务相关),在语料库中使用word2vec之类的方法构建词语到向量(或数字)的映射关系,之后将这一映射关系应用于当前的任务,将句子中的词语转为向量表示。

# 在torchtext中可以使用Field自带的build_vocab函数完成词汇表构建
TEXT.build_vocab(train)

数据迭代器:就是torchtext中的DataLoader,torchtext支持只对一个dataset和同时对多个dataset构建数据迭代器

from torchtext.data import Iterator, BucketIterator
# 若只针对训练集构造迭代器
# train_iter = data.BucketIterator(dataset=train, batch_size=8, shuffle=True, sort_within_batch=False, repeat=False)

# 同时对训练集和验证集进行迭代器的构建
train_iter, val_iter = BucketIterator.splits(
        (train, valid), # 构建数据集所需的数据集
        batch_sizes=(8, 8),
        device=-1, # 如果使用gpu,此处将-1更换为GPU的编号
        sort_key=lambda x: len(x.comment_text), # the BucketIterator needs to be told what function it should use to group the data.
        sort_within_batch=False
)

test_iter = Iterator(test, batch_size=8, device=-1, sort=False, sort_within_batch=False)

评测指标
NLP中部分任务的评测不是通过准确率等指标完成的,比如机器翻译任务常用BLEU (bilingual evaluation understudy) score来评价预测文本和标签文本之间的相似程度。torchtext中可以直接调用torchtext.data.metrics.bleu_score来快速实现BLEU,如下例程:

from torchtext.data.metrics import bleu_score
candidate_corpus = [['My', 'full', 'pytorch', 'test'], ['Another', 'Sentence']]
references_corpus = [[['My', 'full', 'pytorch', 'test'], ['Completely', 'Different']], [['No', 'Match']]]
bleu_score(candidate_corpus, references_corpus)

0.8408964276313782

参考链接:
https://pytorch.org/text/stable/index.html
https://github.com/atnlp/torchtext-summary

本文参与DataWhale-深入浅出pytorch小组学习项目!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值