Dataset类实战

Dataset:

提供一种方式获取数据及其label

如何获取每一个数据及其label

告诉我们总共有多少个数据

1.首先导入包

from torch.utils.data import Dataset
from PIL import Image
import os

2.写一个类 ,继承Dataset。

class Mydata(Dataset):

    def __init__(self, root_dir, laber_dir):
        self.root_dir = root_dir
        self.laber_dir = laber_dir
        self.data_path = os.path.join(root_dir, laber_dir)
        self.data_list = os.listdir(self.data_path)

    def __getitem__(self, index):
        return os.path.join(self.root_dir, self.laber_dir, self.data_list[index])
   
     def __len__(self):
        return len(self.data_list)

①def __init__(self, root_dir, laber_dir): 在创建类的时候,实现初始化。

root_dir:根目录

laber_dir:目标目录

通过data_path=os.path.join(root_dir,laber_dir)实现路径组合连接,使windows和linux都可以使用。

os.listdir[data_path]:会生成该文件夹内所有图片的"集合"

②重写def __getitem__(self, index):

返回下标为index图片的详细说明“路径+文件名”

实例化:

①根据下标查找单个数据集

ants_data = Mydata("dataset/train", "ants")
ants_data .__getitem__(2)返回第三张图片的信息
ants_data[2]。返回第三张图片的信息。[] 运算符取值时,会调用它的方法__getitem__

② 数据集的拼接

ants_data = Mydata("dataset/train", "ants")

bees_data = Mydata("dataset/train", "bees")

new_data = ants_data + bees_data

new_data就是拼接后两个的数据集。

③图片打开并查看

img = Image.open(my[5])
img.show()

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BERT是目前自然语言处理领域最先进的模型之一,拥有强大的语言理解能力和处理文本任务的能力。其中BERT多分文本分的应用广泛,可以用于情感分析、垃圾邮件过滤、新闻分等。 在实现BERT多分文本分时,需要完成以下步骤: 1.数据预处理:将原始文本数据进行清洗、分词、标注等操作,将其转换为计算机能够处理的数字形式。 2.模型构建:使用BERT预训练模型作为基础,将其Fine-tuning到目标任务上,生成一个新的分模型。 3.模型训练:使用标注好的训练集对模型进行训练,通过反向传播算法不断调整模型参数,提高模型的分精度。 4.模型评估:使用验证集和测试集对模型进行验证和评估,选择最优模型。 下面附上一份BERT多分文本分Python源码,供参考: ``` import torch import torch.nn as nn from transformers import BertModel, BertTokenizer class BertClassifier(nn.Module): def __init__(self, num_classes): super(BertClassifier, self).__init__() self.bert = BertModel.from_pretrained('bert-base-chinese') self.dropout = nn.Dropout(0.1) self.fc = nn.Linear(self.bert.config.hidden_size, num_classes) def forward(self, input_ids, attention_mask): outputs = self.bert(input_ids=input_ids, attention_mask=attention_mask) pooled_output = outputs[1] # 获取[CLS]对应的向量作为分 logits = self.fc(self.dropout(pooled_output)) return logits tokenizer = BertTokenizer.from_pretrained('bert-base-chinese') model = BertClassifier(num_classes=2) optimizer = torch.optim.AdamW(model.parameters(), lr=1e-5) loss_fn = nn.CrossEntropyLoss() def train(model, optimizer, loss_fn, train_dataset, val_dataset, epochs=5): for epoch in range(epochs): model.train() for step, batch in enumerate(train_dataset): input_ids = batch['input_ids'].to(device) attention_mask = batch['attention_mask'].to(device) labels = batch['label'].to(device) optimizer.zero_grad() logits = model(input_ids, attention_mask) loss = loss_fn(logits, labels) loss.backward() optimizer.step() if step % 100 == 0: print(f"Epoch:{epoch}, Step:{step}, Loss:{loss}") model.eval() correct = 0 total = 0 with torch.no_grad(): for batch in val_dataset: input_ids = batch['input_ids'].to(device) attention_mask = batch['attention_mask'].to(device) labels = batch['label'].to(device) logits = model(input_ids, attention_mask) pred = torch.argmax(logits, dim=-1) correct += (pred == labels).sum().item() total += labels.size(0) acc = correct / total print(f"Epoch:{epoch}, Val Acc:{acc}") device = torch.device("cuda" if torch.cuda.is_available() else "cpu") num_classes = 2 # 根据具体任务设定 train_dataset = # 根据具体情况构建训练集dataset val_dataset = # 根据具体情况构建验证集dataset train(model=model, optimizer=optimizer, loss_fn=loss_fn, train_dataset=train_dataset, val_dataset=val_dataset, epochs=5) ``` 在该源码中,我们基于BERT预训练模型和PyTorch框架构建了一个多分模型。该模型可以通过Fine-tuning到不同的分任务上,实现高精度的多分文本分

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值