Torchtext 0.12+ API构造训练用DataLoader与词向量的Embedding(2)

torchtext的详细用法请参考上一期:Torchtext 0.12+新版API学习与使用示例(1)

构造embedding的思路也很简单:

  1. 把语料训练成torchtext对应的vocab
  2. 然后对于输入的句子,进行如下转换:文本->vocab id->embedding(这里借助nn.Embedding进行转换)

构造DataLoader之前要先构造DataSetDataSetDataLoader的基础内容请参考:使用Pytorch DataLoader快捷封装训练数据、测试数据的X与Y

示例代码

from torchtext.vocab import vocab
from collections import Counter, OrderedDict
from torch.utils.data import Dataset, DataLoader
from torchtext.transforms import VocabTransform
import torch.nn as nn
import torch


class TextDataSet(Dataset):
    def __init__(self, text_list, word_hidden=6):
        """
        使用新版API的一个简单的TextDataSet
        :param text_list: 语料的全部句子
        :param word_hidden: 词向量的长度
        """
        total_word_list = []
        for _ in text_list:  # 将嵌套的列表([[xx,xx],[xx,xx]...])拉平 ([xx,xx,xx...])
            total_word_list += _.split(" ")
        counter = Counter(total_word_list)  # 统计计数
        sorted_by_freq_tuples = sorted(counter.items(), key=lambda x: x[1], reverse=True)  # 构造成可接受的格式:[(单词,num), ...]
        ordered_dict = OrderedDict(sorted_by_freq_tuples)
        # 开始构造 vocab
        my_vocab = vocab(ordered_dict, specials=["<UNK>", "<SEP>"])  # 单词转token,specials里是特殊字符,可以为空
        vocab_transform = VocabTransform(my_vocab)
        # 开始构造DataSet
        self.text_list = text_list  # 原始文本
        self.vocab = my_vocab
        self.vocab_transform = vocab_transform
        self._len = len(text_list)  # 文本量
        self.embedding = nn.Embedding(len(my_vocab), word_hidden)  # 为每个词准备的词向量

    def __getitem__(self, id_index):  # 每次循环的时候返回的值
        sentence = self.text_list[id_index]
        word_ids = self.vocab_transform(sentence.split(' '))
        word_embedding = self.embedding(torch.Tensor(word_ids).long())
        return word_embedding, sentence

    def __len__(self):
        return self._len


def main():
    sentence_list = [  # 假设这是全部的训练语料
        "nlp is natural language processing strives",
        "nlp build machines that understand",
        "nlp model respond to text or voice data and respond with text",
    ]
    text_dataset = TextDataSet(sentence_list)  # 构造 DataSet
    data_loader = DataLoader(text_dataset, batch_size=1)  # 将DataSet封装成DataLoader
    for word_embedding, sentence in data_loader:
        print("====================================")
        print("原句是:", sentence)
        print("对应的Embedding:", word_embedding)


if __name__ == '__main__':
    main()
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要使用Dataloader读取Tiny ImageNet数据集并训练网络,你可以按照以下步骤进行: 1. 下载并解压Tiny ImageNet数据集,将其分为训练集、验证集和测试集。 2. 创建一个自定义的数据集类,该类继承自PyTorch的Dataset类。这个类应该实现__len__和__getitem__方法。__len__方法应该返回数据集中的样本数量,而__getitem__方法应该返回给定索引的样本及其标签。 3. 创建训练、验证和测试数据集的实例。你可以使用PyTorch的SubsetRandomSampler来创建一个随机子采样器,以便从完整数据集中选择一部分样本。 4. 创建一个Dataloader,该Dataloader可以迭代数据集中的所有样本。Dataloader可以指定批量大小、线程数、是否混洗数据等参数。 5. 定义一个神经网络模型,例如ResNet、VGG等。 6. 定义损失函数和优化器,例如交叉熵损失和随机梯度下降优化器。 7. 在训练循环中,使用Dataloader迭代训练数据集中的所有批次。对于每个批次,将其输入到神经网络中进行前向传递,并计算损失。然后使用反向传播和优化器更新网络参数。 8. 在验证循环中,使用Dataloader迭代验证数据集中的所有批次。对于每个批次,将其输入到神经网络中进行前向传递,并计算损失和准确性。 9. 在测试循环中,使用Dataloader迭代测试数据集中的所有批次。对于每个批次,将其输入到神经网络中进行前向传递,并预测每个样本的标签。 10. 评估模型的性能,例如计算准确率、精确率、召回率等指标。 注意:由于Tiny ImageNet数据集较大,需要使用GPU进行训练和推理。同时,由于数据集中的图像大小不一致,需要进行预处理和数据增强。可以使用PyTorch的transforms模块来进行这些操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆萌的代Ma

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值