深度学习数据处理API记录

line.strip()  #去除txt文件中每一行首尾的空格和换行符

处理多张图片,最关键的是.stack()函数。

    images = []
    labels = []
    for img_path, class_name in label_info:
        # read img
        img = Image.open(img_path).convert("RGB")
        label_index = int(class_indices[class_name])

        # preprocessing
        img = transform(img)
        images.append(img)
        labels.append(label_index)

    # batching images
    images = torch.stack(images, dim=0).to(device)

    # inference
    with torch.no_grad():
        output = net(images)
        probs, preds = torch.max(torch.softmax(output, dim=1), dim=1)
        probs = probs.cpu().numpy()
        preds = preds.cpu().numpy()

tensor图片的数据格式为CHW,正常图片格式为HWC,使用.transpose接口调换CHW顺序

npimg = images[i].cpu().numpy().transpose(1, 2, 0)

cv2.imshow函数输入参数需要转换为主机内存中numpy()格式

image.cpu().numpy()

2-文件路径

深度学习中,文件路径至关重要,绝对路径方法简单,不容易出错,但是可移植性差,此次记录一下相对路径的常用API。

2.1 os.path.join是一个文件路径拼接函数,导入os模块,

import os

path1 = "D:\path"
path2 = "pythondata\dataset\data.txt"
path = os.path.join(path1, path2)
print(path)

输出为:

D:\path\pythondata\dataset\data.txt

如果不显示地添加斜杠‘/’,那么程序会自动添加反斜杠‘\’

print(os.path.join('dataset', 'images','val.txt'))
输出:dataset\images\val.txt

2.2 获取当前脚本的绝对路径

两种方式,一是import os,二是from pathlib import Path,推荐法二

法1:filepath = os.path.abspath(__file__)

法2:filepath = Path(__file__).resolve()

2.3 获取上级目录

法1:os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

法2: Path(__file__).resolve().parents[0]

2.4 获取当前文件对于基准路径的相对路径 os.path.relpath(file_path,base_path)

Path(os.path.relpath(ROOT, Path.cwd()))  # relative,将绝对路径转换成相对路径

3-数据加载

若文件结构是这样的:train文件夹和val文件夹并列,他们下面都有cat和dog文件夹,但是没有真实类别标签文件,ImageFolder 数据集类会自动根据文件夹的名称为每个图像分配一个类别标签。在上述目录结构中,'cat' 文件夹的图像将被分配为类别 0,'dog' 文件夹的图像将被分配为类别 1。

4-迭代器返回的值

train_dataset = ImageFolder(ROOT_TRAIN, transform=train_transform)

该函数返回的数据集train_dataset是一个元组(x,y),其中x是图像数据,y是标签。

train_dataloader = DataLoader(train_dataset, batch_size=32, shuffle=True)

该迭代器train_dataloader从数据集 train_dataset取得的数据也是一个元组(x,y),其中x是图像数据,y是标签。

有一个2*2的tensor张量pred,

# 创建一个示例张量
pred = torch.tensor([[0.1, 0.5, 0.9], [0.2, 0.6, 1.0]])

# 访问第一个元素(i=0)
element_0 = pred[0]

# 访问第二个元素(i=1)
element_1 = pred[1]

输出:element_0:[0.1, 0.5, 0.9]
      element_1:[0.2, 0.6, 1.0]

pred[0]指的是去掉最外面维度后的第一个元素。这里有两个很关键的API:

torch.max() 函数被用于找到张量 tensor 中的最大值及其索引

 torch.argmax仅返回最大值的索引。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值