文章目录

  • 安装Pytorch
  • 在pytorch中安装jupyter
  • 两个常用函数
  • 三种方式编码的区别
  • Dataset实战
  • TensorBoard的使用
  • Transforms
  • 常见的Transforms
  • torchvision中的数据集的使用
  • DataLoader的使用
  • 参考资料


安装Pytorch

在Anaconda环境中创建pytorch环境

conda create -n pytorch python=3.6

激活环境

conda activate pytorch

查看包列表

pip list

pytorch官网:

https://pytorch.org/

pytorch的unique函数 pytorch criterion函数_python

安装命令:

conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch

出现True说明pytorch可以使用GPU。

pytorch的unique函数 pytorch criterion函数_pytorch的unique函数_02

在pytorch中安装jupyter

conda install nb_conda

启动jupyter

jupyter notebook

shift + 回车,表示跳转到另一个代码块,并且运行上一个代码块。

pytorch的unique函数 pytorch criterion函数_数据集_03

两个常用函数

(1)dir() 工具箱以及工具箱的分隔区中有什么东西;

(2)help() 每个工具是如何使用的,工具的使用方法。

三种方式编码的区别

pytorch的unique函数 pytorch criterion函数_数据集_04

Dataset实战

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

class MyData(Dataset):
    def __init__(self, root_dir, label_dir):
        self.root_dir = root_dir
        self.label_dir = label_dir
        self.path = os.path.join(self.root_dir, self.label_dir)
        self.img_path = os.listdir(self.path)


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

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

root_dir = "dataset/train"
ants_label_dir = "ants"
bees_label_dir = "bees"
ants_dataset = MyData(root_dir, ants_label_dir)
bees_dataset = MyData(root_dir, bees_label_dir)

train_dataset = ants_dataset + bees_dataset

pytorch的unique函数 pytorch criterion函数_Image_05

TensorBoard的使用

安装tensorboard

pip install tensorboard

报错:

pytorch的unique函数 pytorch criterion函数_pytorch的unique函数_06


解决:使用管理员身份运行Anaconda Prompt,重新安装。安装运行报错:

pytorch的unique函数 pytorch criterion函数_数据集_07


解决:setuptools版本有问题,将其卸载重装。

pip uninstall setuptools
pip install setuptools==59.5.0

pytorch的unique函数 pytorch criterion函数_pytorch_08


–logdir=logs中间不能加空格

指定端口:

tensorboard --logdir=logs --port=6007

如果进行绘制了y = 2x,又绘制了3x,会自动拟合图像,解决方法是删除logs下的所有文件,重新运行代码,重新运行tensorboard --logdir=logs --port=6007

显示图片:

from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image

writer = SummaryWriter("logs")
img_path = "data/train/ants_image/0013035.jpg"
img_PIL = Image.open(img_path)
img_array = np.array(img_PIL)
print(type(img_array))
print(img_array.shape)

writer.add_image("train", img_array, 1, dataformats='HWC')
# y = x
for i in range(100):
    writer.add_scalar("y = 2x", 3*i, i)

writer.close()

pytorch的unique函数 pytorch criterion函数_pytorch的unique函数_09

Transforms

pytorch的unique函数 pytorch criterion函数_pytorch的unique函数_10


安装opencv失败:

pytorch的unique函数 pytorch criterion函数_数据集_11


这个错误也解决了好久,试了好几种方法(上一篇博客有专门解决了这个问题:),最后解决方法是指定版本安装:

pytorch的unique函数 pytorch criterion函数_pytorch_12

代码:

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


img_path = "dataset/train/ants/0013035.jpg"
img = Image.open(img_path)
# print(img)

writer = SummaryWriter("logs")

# 1. transforms如何使用
tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(img)

writer.add_image("Tensor_img", tensor_img)

writer.close()

常见的Transforms

pytorch的unique函数 pytorch criterion函数_数据集_13

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

writer = SummaryWriter("logs")
img = Image.open("imgages/blue.jpg")
print(img)

#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([6, 3, 2], [9, 3, 5])
img_norm = trans_norm(img_tensor)
print(img_norm[0][0][0])
writer.add_image("Normalize", img_norm, 2)

#Resize
print(img.size)
trans_resize = transforms.Resize((512, 512))
# img PIL -> resize -> img_size PIL
img_resize = trans_resize(img)
# img_resize PIL -> totensor -> img_resize tensor
img_resize = trans_totensor(img_resize)
writer.add_image("Resize", img_resize, 0)
print(img_resize)

# Compose - resize - 2
trans_resize_2 = transforms.Resize(512)
# PIL -> PIL -> tensor
trans_compose = transforms.Compose([trans_resize_2, trans_totensor])
img_resize_2 = trans_compose(img)
writer.add_image("Resize", img_resize_2, 2)

# RandomCrop
trans_random = transforms.RandomCrop((500, 1000))
trans_compose_2 = transforms.Compose([trans_random, trans_totensor])
for i in range(10):
    img_crop = trans_compose_2(img)
    writer.add_image("RandomCropHW", img_crop, i)

writer.close()

pytorch的unique函数 pytorch criterion函数_pytorch的unique函数_14


使用transforms的注意点:

关注输入和输出,多看官方文档,关注方法需要哪些参数。

torchvision中的数据集的使用

pytorch的unique函数 pytorch criterion函数_Image_15

import torchvision
from torch.utils.tensorboard import SummaryWriter

dataset_transform = torchvision.transforms.Compose([
    torchvision.transforms.ToTensor()
])
train_set = torchvision.datasets.CIFAR10(root="./dataset", train=True, transform=dataset_transform, download=True)
test_set = torchvision.datasets.CIFAR10(root="./dataset", train=False, transform=dataset_transform, download=True)

# print(test_set[0])
# print(test_set.classes)

# img, target = test_set[0]
# print(img)
# print(target)
# print(test_set.classes[target])
# img.show()
#
# print(test_set[0])

writer = SummaryWriter("p10")
for i in range(10):
    img, target = test_set[i]
    writer.add_image("test_set", img, i)
writer.close()

DataLoader的使用

import torchvision
from torch.utils.data import DataLoader

# 准备的测试数据集
from torch.utils.tensorboard import SummaryWriter

test_data = torchvision.datasets.CIFAR10("./dataset", train=False, transform=torchvision.transforms.ToTensor())

test_loader = DataLoader(dataset=test_data, batch_size=64, shuffle=True, num_workers=0, drop_last=True)

# 测试数据集中第一张图片及target
img, target = test_data[0]
print(img.shape)
print(target)

writer = SummaryWriter("dataloader")
# step = 0

# for data in test_loader:
#     imgs, targets = data
#     # print(imgs.shape)
#     # print(targets)
#     writer.add_images("test_data", imgs, step)
#     step += 1

for epoch in range(2):
    step = 0
    for data in test_loader:
        imgs, targets = data
        # print(imgs.shape)
        # print(targets)
        writer.add_images("Epoch:{}".format(epoch), imgs, step)
        step += 1

writer.close()

dataloader相当于如何从dataset中取出数据,dataset:数据集,batch_size:每一组的最大数量,shuffle:是否打乱,num_workers:线程数量,drop_last:是否舍弃最后不被整除的图片。

参考资料

https://www.bilibili.com/video/BV1hE411t7RN