PYTORCH

PYTORCH

1.Dataset数据

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

​ 如何获取每一个数据及其lable

​ 告诉我们总共有多少数据

Dataloader:为后面的网络提供不同的数据类型

#找图片,最好放在一个根目录下面
from PIL import Image
img_path='D:\\005-code\\test\\pytorch\\1-昆虫\\train\\ants_image\\0013035.jpg' 
#ctrl+shift+c 是选取其图片路径——然后ctrl+v
img=Image.open('img_path')
img.show()

#创建图片列表,获取所有图片的地址
#找到图片存放的根目录
import os
dir_path='D:\\005-code\\test\\pytorch\\1-昆虫\\train\\ants_image'#根目录或者dir_path='pytorch\1-昆虫\train\ants_image'相对路径
img_path_list=os.listdir(dir_path)
#把照片的名称存储为一个列表
img_path_list[0]#'1095476100_3906d8afde.jpg'



os模块

os是Python标准库中的一个模块,提供了与操作系统交互的功能。它允许您执行与操作系统相关的操作,例如文件和目录的创建、删除和重命名,以及获取文件属性和执行系统命令等。

os模块提供了许多方法和函数来处理文件系统和操作系统相关的任务,例如:

os.listdir():列出目录中的所有文件和子目录。
os.path.join():将多个路径组合成一个完整的路径。
os.path.abspath():返回指定路径的绝对路径。
os.path.exists():检查指定路径是否存在。
os.mkdir():创建一个新的目录。
os.rmdir():删除一个空的目录。
os.remove():删除一个文件。
os.rename():重命名文件或目录。
除了文件和目录操作之外,os模块还提供了其他与操作系统相关的功能,例如获取环境变量、执行系统命令等。


#数据的加载,torch  utils是常用的功能区 ctrl+Dataset可以打开模块
from torch.utils.data import Dataset #torch.utils.data.Datsset是Pytorch中的一个类,用来创建自定义数据集,主要包括两种方法(函数)一个是__len__():返回数据集的大小,一个是__getitem__(self,item):根据索引item返回一个样本
from PIL import Image
import os
class MyData(Dataset):
    def __init__(self,root_dir,lable_dir):#都是相对路径
            self.root_dir=root_dir
            self.lable_dir=lable_dir
            self.path=os.path.join(self.root_dir,self.lable_dir)#os.path.join:将多个路径拼凑为一个完整的路径
            self.img_path=os.listdir(self.path)#将目录里的子目录转换为一个列表

    def __getitem__(self, idx):
        img_name=self.img_path[idx]#idx是索引,指向列表中每一个元素
        img_item_path=os.path.join(self.root_dir,self.lable_dir,img_name)
        img=Image.open(img_item_path)
        lable=self.lable_dir
        return img,lable
    def __len__(self):
        return len(self.img_path)

root_dir='D:\\005-code\\test\pytorch\\Dataset\\train'#windows里路径是但斜杠/或者双\\,完整路径
ants_lable_dir='ants_image'
bees_lable_dir='bees_image'
ants_Data=MyData(root_dir,ants_lable_dir)
bees_Data=MyData(root_dir,bees_lable_dir)

print(ants_Data.__getitem__(1),ants_Data.__len__())
print(bees_Data.__getitem__(0),bees_Data.__len__())

2.tensorboard使用

记录机器学习的过程,内容可视化

#出现’在使用Terminal启动tensorboard时发现终端提示'tensorboard' 不是内部或外部命令,也不是可运行的程序‘这个问题时,是缺少用户变量的设定,需在用户变量里面Path添加tensorboard的安装路径,一般默认为C盘。
Terminal:
tensorboard --logdir=logs2 --port=6008

#tensorboard --logdir='生成的路径名称'——返回网页6006,或者后加
#add_scalar
from torch.utils.tensorboard import SummaryWriter 
#SummaiyWriter相当于记录一个日志,可以反应你的训练过程
writer=SummaryWriter('logs')#创建目录为logs
for i in range(100):
    writer.add_scalar('y=3x',2*i,i)#title ,y,x   折线图
    #网页出图,Terminal中输入tensorboard --logdir='绝对地址,注意是/',得到网址点开出现所画的图
writer.close()
#add_image()
from torch.utils.tensorboard import SummaryWriter
from PIL import Image#Pillow 这里可能会报错,Pillow安装在10.0.0版本上会出现AttributeError: module ‘PIL.Image’ has no attribute ‘ANTIALIAS’
#将删掉新版本,安装旧版本 pip uninstall -y Pillow,pip install Pillow=9.5.0
import numpy as np#这是因为照片的提取使用需要转换成numpy的数组

#SummaiyWriter相当于记录一个日志,可以反应你的训练过程
writer=SummaryWriter('logs')#创建目录为logs
image_path='D:/005-code/test/pytorch/Dataset/train/ants_image/0013035.jpg'
img_PIL=Image.open(image_path)#此时的照片类型是PIL
img_numpy=np.array(img_PIL)#将PIL类型转换成numpy可以使用
print(type(img_numpy))
print(img_numpy.shape)#.shape是输出numpy数据的长宽高,对应dataformats=''
writer.add_image('test',img_numpy,1,dataformats='HWC')#HWC=高、宽、通道数,彩色照片的通道数是三
for i in range(100):
    writer.add_scalar('y=3x',2*i,i)#title ,y,x
writer.close()

3.transform使用

1.ToTensor的使用

图像变化

主要作用l:数据类型转换为tensor类型:transform.ToTensor()

from torchvision import transforms

img_tensor=transforms.ToTensor()
img_ten=img_tensor(img)

#练习,PIL打开照片
#打开一张照片,PIL 里的Image使用Image.open(’路径‘):路径中需要注意绝对路径是ctrl+shift+c,再ctrl+V,注意反斜的问题
from PIL import Image
image_path='D:/005-code/test/pytorch/Dataset/train/ants_image/0013035.jpg'
img=Image.open(image_path)
img.show()
#transforms中的ToTensor是将PIL或者numpy类型转换成tensor类型,   opencv是的cv2.imread()的类型是numpy类型
#介绍PIL类型转换成tensor类型
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
from PIL import Image
image_path='D:/005-code/test/pytorch/Dataset/train/ants_image/0013035.jpg'
img=Image.open(image_path)
print(type(img))
img_tensor=transforms.ToTensor()
img_ten=img_tensor(img)
print(type(img_ten))
#<class 'PIL.JpegImagePlugin.JpegImageFile'>
# <class 'torch.Tensor'>
writer=SummaryWriter('logs2')
writer.add_image('image_tensor',img_ten)
writer.close()

2.常见的Transform

主要介绍了四种方法

 #transforms的使用
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
from PIL import Image

#ToTensor的使用
img_path='D:/005-code/test/pytorch/transforms/yyl-test.png'
img=Image.open(img_path)
print(img)
print(type(img))
#<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=970x537 at 0x1485EE6BEE0>
#PIL>  size:970*537
img_train=transforms.ToTensor()
img_to=img_train(img)
print(type(img_to))
writer=SummaryWriter('logs')
writer.add_image('ToTensor',img_to)#方法中需要的tensor类型,故需先将PIL类型转换成totensor类型
writer.close()#关闭
'''
默认transboard 和transflow都是下载好且版本兼容
在使用tensorboard无法打开所需照片的时候需要注意:tensorboard --logdir=绝对路径
     1.将日志文件放在总目录下面
     2.绝对路径不要加''
     3.以上都不行考虑换端口 tensorboard --logdir=绝对路径 --port=6009 #默认是6006
'''

#Normalize >归一化处理
img_normal=transforms.Normalize([9,5,3],[5,5,8])
#Normalize的用法:n是通道数,(mean,std)-均值和标准差,均值3个通道数有三个,列表给出,输入的是tensor(张量)
img_nor=img_normal(img_to)
writer.add_image('Normalize1',img_nor)
writer.close()



#Resize >调整图像大小(h,w)
print(img_to.size())#.size()返回的是一个元组,代表每一个维度上的大小
print(img_to.shape)
tran_resize=transforms.Resize((512,512))#(h,w) >(高度,宽度)
img_resize=tran_resize(img)#PIL Image
print(img_resize)
img_rel=img_train(img_resize)#PIL数据转化为tensor
print(img_rel)
writer.add_image('Resize',img_rel)
writer.close()

#compose >组合变换列表
tran_resize_2=transforms.Resize((256,256))
tran_compose=transforms.Compose([tran_resize_2,img_train])#将resize和totensor组合在一起
img_resize_2=tran_compose(img)
writer.add_image('compose',img_resize_2)
writer.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值