pytorch加载自己的数据集,通过读取train.txt、test.txt文件(附数据集txt生成完整代码,注释详细)

pytorch读取指定train.txt、test.txt文件加载自己的数据集

txt生成脚本完整代码如下:

读取自己的数据集,打乱并划分,生成train.txt、test.txt (每一行为图片的绝对路径+标签,完整代码,注释详细)
https://blog.csdn.net/weixin_44414948/article/details/110205546

train.txt、test.txt示例如下图所示:

先占坑,回去补图

pytorch数据集加载完整代码:

import torch
from torchvision import transforms
from torch.utils.data import Dataset, DataLoader
from PIL import Image

root = r"C:\Users\hq\Desktop\HoldingObject"

# 自定义图片图片读取方式,可以自行增加resize、数据增强等操作
def MyLoader(path):
    return Image.open(path).convert('RGB')
    
class MyDataset (Dataset):
    # 构造函数设置默认参数
    def __init__(self, txt, transform=None, target_transform=None, loader=MyLoader):
        with open(txt, 'r') as fh:
            imgs = []
            for line in fh:
                line = line.strip('\n')  # 移除字符串首尾的换行符
                line = line.rstrip()  # 删除末尾空
                words = line.split( )  # 以空格为分隔符 将字符串分成
                imgs.append((words[0], int(words[1]))) # imgs中包含有图像路径和标签
        self.imgs = imgs
        self.transform = transform
        self.target_transform = target_transform
        self.loader = loader

    def __getitem__(self, index):
        fn, label = self.imgs[index]
        #调用定义的loader方法
        img = self.loader(fn)
        if self.transform is not None:
            img = self.transform(img)
        return img, label

    def __len__(self):
        return len(self.imgs)


train_data = MyDataset(txt=root + '\\' + 'train.txt', transform=transforms.ToTensor())
test_data = MyDataset(txt=root + '\\' + 'test.txt', transform=transforms.ToTensor())

#train_data 和test_data包含多有的训练与测试数据,调用DataLoader批量加载
train_loader = DataLoader(dataset=train_data, batch_size=64, shuffle=True)
test_loader = DataLoader(dataset=test_data, batch_size=64)

print('加载成功!')

注:支持pytorch的transforms操作

  • 12
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
下面是一个使用PyTorch加载自己的数据集并进行训练的完整代码示例: ```python import torch from torchvision import datasets, transforms from torch.utils.data import DataLoader import torch.nn as nn import torch.optim as optim # 定义数据集的预处理转换 transform = transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,)) ]) # 定义自己的数据集类 class CustomDataset(torch.utils.data.Dataset): def __init__(self, ...): # 读取数据集并进行必要的预处理操作 def __len__(self): # 返回数据集的长度 def __getitem__(self, index): # 返回指定索引处的数据样本 # 创建数据集实例 train_dataset = CustomDataset(...) test_dataset = CustomDataset(...) # 创建数据加载器 batch_size = 64 train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True) test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False) # 定义模型 class MyModel(nn.Module): def __init__(self): super(MyModel, self).__init__() # 定义模型结构 def forward(self, x): # 定义前向传播过程 model = MyModel() # 定义损失函数和优化器 criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=0.001) # 训练模型 num_epochs = 10 device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model.to(device) for epoch in range(num_epochs): train_loss = 0.0 model.train() for images, labels in train_loader: images = images.to(device) labels = labels.to(device) optimizer.zero_grad() outputs = model(images) loss = criterion(outputs, labels) loss.backward() optimizer.step() train_loss += loss.item() * images.size(0) train_loss /= len(train_loader.dataset) print(f"Epoch {epoch+1}/{num_epochs}, Training Loss: {train_loss}") # 在测试集上评估模型 model.eval() test_loss = 0.0 correct = 0 with torch.no_grad(): for images, labels in test_loader: images = images.to(device) labels = labels.to(device) outputs = model(images) loss = criterion(outputs, labels) test_loss += loss.item() * images.size(0) _, predicted = torch.max(outputs.data, 1) correct += (predicted == labels).sum().item() test_loss /= len(test_loader.dataset) accuracy = correct / len(test_loader.dataset) print(f"Test Loss: {test_loss}, Accuracy: {accuracy}") ``` 请注意,上述代码中有一些需要替换为你自己数据集和模型的部分,如`CustomDataset`类的定义、数据集实例的创建、模型的定义和前向传播过程等。你需要根据你自己的数据集和模型来进行相应的修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值