PyTorch①---加载数据、tensorboard的使用(图像显示不出来)

STEP0

一、安装anaconde3
出现(base)则为安装成功
PyTorch①---加载数据、tensorboard的使用(图像显示不出来)_第1张图片
二、配置显卡
1、创建一个虚拟环境:pytorch是环境名
conda create -n pytorch python=3.6
2、激活这个环境
conda activate pytorch
在这里插入图片描述
3、看看pytorch中有哪些工具包
pip list
4、安装
安装torch:输入生成的指令即可PyTorch①---加载数据、tensorboard的使用(图像显示不出来)_第2张图片
安装其他的:
例如在conda环境里安装jupyter:conda install jupyter notebook
PyTorch①---加载数据、tensorboard的使用(图像显示不出来)_第3张图片

STEP1两大函数

  • dir():打开,看见里面有什么东西

  • help():该函数的使用方法(说明书)

在控制台:
dir()打开torch函数,看里面都有那些方法。
help()查看torch.cuda.is_available()函数的使用方法。
PyTorch①---加载数据、tensorboard的使用(图像显示不出来)_第4张图片
PyTorch①---加载数据、tensorboard的使用(图像显示不出来)_第5张图片
PyTorch①---加载数据、tensorboard的使用(图像显示不出来)_第6张图片

注意:is_available()后的括号要去掉
PyTorch①---加载数据、tensorboard的使用(图像显示不出来)_第7张图片

STEP2 PyTorth加载数据

Dataset和Dataloader的功能:
PyTorch①---加载数据、tensorboard的使用(图像显示不出来)_第8张图片

如何读取数据(得到自己想要的数据),主要涉及到两个类:
eg:一堆垃圾,如何获取可回收垃圾。

  • Dataset:提供一种方式去获取数据及其label。如何去获取想要的数据,例如把可回收垃圾提取出来,并且编号。【如何获取每一个数据及其label】【告诉我们总共有多少个数据】

  • Dataloader:为后面的网络提供不同的数据形式。例如送进网络时,对数据进行打包(数据不会一个一个送进去)。

Dataset的官方解释:
PyTorch①---加载数据、tensorboard的使用(图像显示不出来)_第9张图片

STEP2.1 Dataset的使用

一、准备数据集
两种方式:
方式1:图片的label是文件名字。
PyTorch①---加载数据、tensorboard的使用(图像显示不出来)_第10张图片
方式2:label放在另一个文件夹中
PyTorch①---加载数据、tensorboard的使用(图像显示不出来)_第11张图片
打开存放ants_label的文件:txt文件名和图片的文件名一致。
txt文件里存放的是label,是ants或者bees。
PyTorch①---加载数据、tensorboard的使用(图像显示不出来)_第12张图片

二、获取图片的方式
参考:https://blog.csdn.net/qq_43665602/article/details/126281393?spm=1001.2014.3001.5502

  1. PIL
  2. OpenCV
  3. torchvision.io
    1、PIL
    在控制台试一下:
    PyTorch①---加载数据、tensorboard的使用(图像显示不出来)_第13张图片
    PyTorch①---加载数据、tensorboard的使用(图像显示不出来)_第14张图片
    PyTorch①---加载数据、tensorboard的使用(图像显示不出来)_第15张图片
    os.path.join()函数:将路径进行拼接,在控制台进行尝试
    PyTorch①---加载数据、tensorboard的使用(图像显示不出来)_第16张图片
    PIL举例:
from PIL import Image
import numpy as np

path='dataset/train/ants/0013035.jpg'
img=Image.open(path)
img.show()
print('图片类型:{}'.format(type(img)))

img_arr=np.array(img)
print('ndarrary类型:{}'.format(type(img_arr)))
print('图片形状:{}'.format(img_arr.shape))

结果:
PyTorch①---加载数据、tensorboard的使用(图像显示不出来)_第17张图片
2、OpenCV
举例1:显示图片

import cv2 as cv
path='dataset/train/ants/0013035.jpg'
img=cv.imread(path)
print('ndarray类型:{}'.format(type(img)))
print('图片的形状:{}'.format(img.shape))
#显示图片
cv.imshow('rgb_img',img)
#防止图片一闪而过
cv.waitKey()

结果:
PyTorch①---加载数据、tensorboard的使用(图像显示不出来)_第18张图片

举例2:灰度转换

import cv2 as cv
#读取图片(注意图片中不能有中文路径,否则加载图片失败)
img=cv.imread('../img/img.png')
#显示图片
cv.imshow('rgb_img',img)

#灰度转换
gray_img=cv.cvtColor(img,cv.COLOR_RGB2GRAY)
cv.imshow('gray_img',gray_img)

#保存图片
cv.imwrite('../img/gray_img.png',gray_img)
#让图片一直显示:0就是一直显示,3000ms就是显示3秒
cv.waitKey(0)
#释放内存
cv.destroyAllWindows()

举例3:图片剪裁

import cv2 as cv
img=cv.imread('../img/img.png')
cv.imshow('img',img)
print('原来图片的形状{}'.format(img.shape))
resize_img=cv.resize(img,dsize=(300,300))
print('修改后图片的形状{}'.format(resize_img.shape))
cv.imshow('resize_img',resize_img)
cv.waitKey(0)
cv.destroyAllWindows()

3、torchvision.io
举例:

from torchvision.io import image

path='dataset/train/ants/0013035.jpg'
img=image.read_image(path)
print('图片类型:{}'.format(type(img)))
print('图片形状:{}'.format(img.shape))

结果:
PyTorch①---加载数据、tensorboard的使用(图像显示不出来)_第19张图片

注意事项:在后续神经网络的训练及训练中,要确保其中涉及到的图像数据Tensor,并且Tensor的数据类型为浮点型。
一、PIL或者OpenCV读取后数据类型转换为Tensor
二、torch.io读取的数据为Tensor,但数据类型为ByteTensor

#一
torchvision.transforms.ToTensor()
#二
from torchvision.io import image
import torch
path='dataset/train/ants/0013035.jpg'
img=image.read_image(path)
print('转换前的图片类型:{}'.format(type(img)))
print('图片形状:{}'.format(img.shape))
img=img.type(torch.FloatTensor)
print('转换后的图片类型:{}'.format(type(img)))

结果:
torchvision读取的类型直接就是Tensor数据类型???
PyTorch①---加载数据、tensorboard的使用(图像显示不出来)_第20张图片

from torch.utils.data import Dataset
from PIL import Image
import os
#继承Dataset类
class MyData(Dataset):
    def __init__(self,root_dir,label_dir):
        '''初始化类:根据一个类创建实例。为整个class/后面的函数提供全局变量'''
        '''获取图片的步骤
        1、创建图片的列表:获取文件夹;获取文件夹下所有的图片root_dir
        2、label:这里的label是图片上一级的名称(文件夹的名字)
        '''
        # self:指定了类里面的一个全局变量
        #获取图片的列表和label
        #dataset/train
        self.root_dir=root_dir
        #ants或bees,注意:文件名就是label
        self.label_dir=label_dir
        #将路径连接起来,就是ants或bees的路径
        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:从路径打开图片
        img=Image.open(img_item_path)
        #获取label
        label=self.label_dir
        return img,label
    def __len__(self):
        '''返回数据集的长度'''
        return len(self.img_path)

#获取蚂蚁的数据集
root_dir="dataset/train"
ants_label_dir="ants"
ants_dataset=MyData(root_dir,ants_label_dir)
#获取蜜蜂的数据集
bees_label_dir="bees"
bees_dataset=MyData(root_dir,bees_label_dir)

#整个数据集:对象可以相加
train_dataset=ants_dataset+bees_dataset

注: 一个函数里的变量不能给另外一个函数使用,使用self.后就可以在另一个函数里使用该变量

STEP2.2 Dataloader的使用

待定

STEP3 tensorboard的使用

使用场景:loss的变化,找出符合预期的模型
输出某一步的图像

  • add_scalar()函数:可视化
  • add_image()函数:加载图片

小例子

from torch.utils.tensorboard import SummaryWriter
import numpy as np
writer=SummaryWriter("../logs_test")
for i in range(100):
    writer.add_scalar("y=2x",i,i)
writer.close()

logs文件如果和py文件放在同级,有时候会出来图像,有时候无法出来。
但是将logs文件放到根目录下,不管py文件在哪里放着,tensorboard的文件都可以出来。
PyTorch①---加载数据、tensorboard的使用(图像显示不出来)_第21张图片
在terminal输入:

结果:
PyTorch①---加载数据、tensorboard的使用(图像显示不出来)_第22张图片
多次输入的时候图像会重合:删掉logs文件或者重新新建一个logs文件。

加载图片

tensorboard可以读取numpy或者tensor类型的图片。
作用:观察在不同阶段的输出结果

  • 用transform转为tensor型(后续几乎都使用该方法)
  • 使用OpenCV读取为numpy型
  • 直接使用numpy将PIL变量转为numpy
from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image
#创建一个实例
writer=SummaryWriter("../logs_test")
image_path= "data/train/ants_image/6743948_2b8c096dda.jpg"
img_PIL=Image.open(image_path)
print('img_PIL的类型:{}'.format(type(img_PIL)))
img_array=np.array(img_PIL)
print('img_array的类型:{}'.format(type(img_array)))

writer.add_image("test1",img_array,3,dataformats='HWC')


#y=x
for i in range(100):
    writer.add_scalar("y=x",i,i)
writer.close()

输出:
在这里插入图片描述

【注意事项】
writer.add_image(“test1”,img_array,3,dataformats=‘HWC’)

  • test1:为标题。可修改,修改后图片变位置
  • img_array:图片,为ndarray形式。torch.Tensor, numpy.array, or string/blobname
  • 3:第几步。可修改,修改后图片变位置
  • dataformats=‘HWC’:图片的长、宽、通道

在这里插入图片描述
在这里插入图片描述
PyTorch①---加载数据、tensorboard的使用(图像显示不出来)_第23张图片
运行结果:
PyTorch①---加载数据、tensorboard的使用(图像显示不出来)_第24张图片
如果要显示别的图片,修改图片的相对地址和步数,即可拖动显示。
运行一下py文件,刷新网站即可。

你可能感兴趣的:(笔记,PyTorch_learn,pytorch,深度学习,python)