PyTorch学习笔记1

部署运行你感兴趣的模型镜像

目录

预备知识

PyTorch入门

1. 加载数据 Dataset && Dataloader

2. Tensorboard的使用

3. torchvision中Transforms的使用

Transform该如何使用:

为什么我们需要Tensor数据类型

常见的Transforms


预备知识

1. Python学习中的两大法宝函数:

  • dir()函数,能让我们知道工具箱以及工具箱中的分隔区有什么东西

  • help()函数,能让我们知道每个工具是如何使用的,工具的使用方法

2. Pycharm及Juputer对比:

PyTorch入门

1. 加载数据 Dataset && Dataloader

数据常见的组织方式:

  • 组织方式一:二分类问题,把data分成两个文件夹,文件夹名就是它的lable。比如蚂蚁和蜜蜂的分类,下图中ants就是这个文件夹中这些图片的lable。

  • 组织方式二:

                train_lable对应形式如下图

  • 组织方式三:直接把lable写在图片的名称上

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

  • 如何获取每一个数据及其lable
  • 告诉我们总共有多少个数据

Dataloader:为后面的网络提供不同的数据形式

自己的练习:

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

class MyData(Dataset):

    def __init__(self, root_dir, img_dir, label_dir):
        self.root_dir = root_dir
        self.img_dir = img_dir
        self.label_dir = label_dir
        self.i_path = os.path.join(self.root_dir, self.img_dir)
        self.l_path = os.path.join(self.root_dir, self.label_dir)
        self.img_path = os.listdir(self.i_path)
        self.label_path = os.listdir(self.l_path)

    def __getitem__(self, idx):
        img_name = self.img_path[idx]
        label_name = self.label_path[idx]
        img_item_path = os.path.join(self.root_dir, self.img_dir, img_name)
        label_item_path = os.path.join(self.root_dir, self.label_dir, label_name)
        img = Image.open(img_item_path)
        f = open(label_item_path)
        label = f.read()
        return img, label

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

root_dir = "train"
ants_img_dir = "ants_image"
ants_label_dir = "ants_label"
bees_img_dir = "bees_image"
bees_label_dir = "bees_label"
ants_dataset = MyData(root_dir, ants_img_dir, ants_label_dir)
bees_dataset = MyData(root_dir, bees_img_dir, bees_label_dir)

train_dataset = ants_dataset + bees_dataset

代码放到Python Console上运行,可以看到数据如下图:

把蚂蚁和蜜蜂的dataset合并后, 前0-123组数据是蚂蚁,124及以后组的数据是蜜蜂。分别输出train_dataset[123]和train_dataset[124],结果如下:

2. Tensorboard的使用

  • SummaryWriter类的使用——可以用来显示train_loss的一个Function。

The SummaryWriter class provides a high-level API to create an event file

in a given directory and add summaries and events to it. The class updates the file contents asynchronously. This allows a training program to call methods to add data to the file directly from the training loop, without slowing down training.

运行以上代码后,生成log目录下的一个events文件,在Terminal中使用tensorboard --logdir=logs指令打开这个文件,默认端口号为6006(如果显示tensorboard : 无法将“tensorboard”项识别为 cmdlet、函数、脚本文件或可运行程序的名称,需要把环境变量配置好):

点击链接可以查看生成的图像:

  • add_image()的使用——Add image data to summary. Note that this requires the pillow package.

3. torchvision中Transforms的使用

Transform主要是对图片进行一些变换。

  • Transform该如何使用:

from PIL import Image from torchvision import transforms from torch.utils.tensorboard import SummaryWriter img_path = "data/train/ants_image/0013035.jpg" img = Image.open(img_path) # 1.transform该如何使用 tensor_trans = transforms.ToTensor() tensor_img = tensor_trans(img)

  • 为什么我们需要Tensor数据类型

运行上面代码得到的tensor数据tensor_img的内容如下,Tensor数据类型可以理解为一个包装了神经网络的一些理论基础所需要的一些参数的数据类型。

  • 常见的Transforms

使用Transforms,就是使用Transforms这个python文件当中各种各样的类,不同的类有不同的作用。在使用Transforms时,我们要关注输入、输出、作用这三个点。图片会有不同的格式,所以输入和输出是比较容易错的点。图片不同格式对应的打开方式如下:

Compose() —— Composes several transforms together. This transform does not support torchscript.

        Compose()中的参数需要是一个列表。Python中,列表的表示形式为[数据1,数据2,...]。在Compose中,数据需要是 transforms类型,所以得到,Compose([transforms参数1, transforms参数2,...])。

ToTensor() —— Convert a "PIL Image" or "numpy.ndarray" to tensor. This transform does not support torchscript.

from torchvision import transforms
from PIL import Image

img = Image.open("data/train/ants_image/0013035.jpg")
print(img)

# ToTensor实例
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
print(img_tensor)

Normalize() —— Normalize a tensor image with mean and standard deviation.

        Given mean: "(mean[1],...,mean[n])" and std: "(std[1],..,std[n])" for "n" channels, this transform will normalize each channel of the input "torch.*Tensor" i.e., "output[channel] = (input[channel] - mean[channel]) / std[channel]"

from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
from PIL import Image

writer = SummaryWriter("logs")
img = Image.open("data/train/ants_image/0013035.jpg")

# ToTensor实例
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
writer.add_image("Totensor", img_tensor)

# Normalize实例
print(img_tensor[0][0][0])
trans_norm = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
img_norm = trans_norm(img_tensor)
print(img_norm[0][0][0])
writer.add_image("Normalize",img_norm)

writer.close()

        分别对Normalize前的img_tensor[0][0][0]和Normalize后的img_norm[0][0][0]输出,得到以下不同的数值

        在TensorBoard中输出Normalize前的图片和Normalize后的图片,对比如下:

Resize() —— Resize the input image to the given size.

# Resize实例
trans_resize = transforms.Resize((512, 512))
# img是PIL类型的数据
img_resize = trans_resize(img)
# 把img从PIL类型变成tensor类型的数据
img_resize = trans_totensor(img_resize)

        用compose()可以把resize和图片类型变换(PIL→tensor)这两个操作一步做到位,如下图:

RandomCorp() —— Crop the given image at a random location.

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值