首页 > 其他分享 >Pytorch

Pytorch

时间:2023-09-16 16:33:06浏览次数:47  
标签:__ img self writer Pytorch trans dir

创建项目的方式

image-20230914203600059 image-20230914203736282 image-20230914203817868

DataSet类代码实战

read_data.py

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)

    # 在python中__getitem__(self, key):方法被称为魔法方法,这个方法返回所给键对应的值。
    # 1 当对象是序列时,键是整数。当对象是映射时(字典),键是任意值
    # 2 在定义类时,如果希望能按照键取类的值,则需要定义__getitem__方法
    # 3 如果给类定义了__getitem__方法,则当按照键取值时,可以直接返回__getitem__方法执行的结果
    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

rename_dataset.py

import os
root_dir = "dataset/train"
target_dir = "ants_image"
img_path = os.listdir("D:\\workspace\\learn_pytorch\\" + os.path.join(root_dir, target_dir))
print(img_path)
label = target_dir.split('_')[0]
print(label)
out_dir = "ants_label"
for i in img_path:
    file_name = i.split('.jpg')[0]
    # with open("D:\\workspace\\learn_pytorch\\" + os.path.join(root_dir, out_dir, "{}.txt").format(file_name), 'w') as f:
    with open("D:\\workspace\\learn_pytorch\\" + os.path.join(root_dir, out_dir+f'{file_name}.txt'), 'w') as f:
        f.write(label)

TensorBoard的使用

image-20230913200758155

tensorboard的用途

tensorboard可以用来查看loss是否能够按照我们预想的变化,或者查看训练到某一步输出的图像时什么样子的。

tensorboard写日志

from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter("logs") # 创建一个logs文件夹,writer写的文件都在该文件夹下
#writer.add_image()
for i in range(100):
    writer.add_scalar("y=2x",2*i,i)
writer.close()

tensorboard读日志

① 在 Anaconda 终端里面,激活py环境(conda activate pytorch),再输入 tensorboard --logdir=D:\workspace\pytorch\transform\logs 命令,将网址赋值浏览器的网址栏,回车,即可查看tensorboard显示日志情况。

② 为避免多人使用端口导致冲突,也可以在后面加上后缀,使得端口独立,tensorboard --logdir=D:\workspace\pytorch\transform\logs

③ 输入网址可得Tensorboard界面。

tensorboard读取图片

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

img_path1 = "Data/FirstTypeData/train/ants/0013035.jpg" 
img_PIL1 = Image.open(img_path1)
img_array1 = np.array(img_PIL1)

img_path2 = "Data/SecondTypeData/train/bees_image/17209602_fe5a5a746f.jpg" 
img_PIL2 = Image.open(img_path2)
img_array2 = np.array(img_PIL2)

writer = SummaryWriter("logs") 
writer.add_image("test",img_array1,1,dataformats="HWC") # 1 表示该图片在第1步
writer.add_image("test",img_array2,2,dataformats="HWC") # 2 表示该图片在第2步                   
writer.close()

在terminal中输入tensorboard --logdir=D:\workspace\pytorch\transboard\logs --port=6007后运行效果如下:

image-20230916162402543 image-20230916162419216

torchvision中的transforms

transforms结构及用法

from PIL import Image
from torchvision import transforms
# from torch.utils.tensorboard import SummaryWriter
from tensorboardX import SummaryWriter
# python的用法->tensor数据类型

img_path = "D:/workspace/pytorch-learn/dataset/train/bees_image/16838648_415acd9e3f.jpg"
img = Image.open(img_path)
writer = SummaryWriter("logs")
# 1、transforms该如何使用(python)
# 2、为什么我们需要tensor数据类型
tensor_trans = transforms.ToTensor()  # 创建transforms.ToTensor类的实例化对象
tensor_img = tensor_trans(img)   # 调用transforms.ToTensor类的__call__的魔术方法
print(tensor_img)
writer.add_image("Tensor_img", tensor_img)

writer.close()

transform的图示

image-20230915222551035

扩展:python中_call_()的使用

class Person:
    def __call__(self, name):
        print("__call_" + "hello" + name)

    def hello(self, name):
        print("hello" + name)

person = Person()
person("张三")  # 内置call不用.,可直接通过对象进行调用
person.hello("李四")   # 通过对象.方法进行调用

运行效果如下:

image-20230916085340642

Tensor的使用

image-20230916092402590
from PIL import Image
from tensorboardX import SummaryWriter
from torchvision import transforms

writer = SummaryWriter("logs")
# 读取图片
img = Image.open("../images/pytorch.jpg")
print(img)
# ToTensor的使用
# """Convert a ``PIL Image`` or ``numpy.ndarray`` to tensor.
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
writer.add_image("ToTensor", img_tensor)
writer.close()

测试环境如下,在terminal下输入tensorboard --logdir=D:\workspace\pytorch\transform\logs,即可在TensorBoard中显示图片的形状,运行效果如下

image-20230916091203198

Normalize的使用(归一化)

# Normalize的使用(归一化)
#  """Normalize a tensor image with mean and standard deviation.
print(img_tensor[0][0][0])
trans_norm = transforms.Normalize([5, 2, 6], [6, 3, 4])
img_norm = trans_norm(img_tensor)
print(img_norm[0][0][0])
writer.add_image("Normalize", img_norm, 2)
writer.close()

Resize()的使用

# Resize
print(img.size)
trans_resize = transforms.Resize((512, 512))
# img PTL -> resize -> img_resize 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)  # <PIL.Image.Image image mode=RGB size=512x512 at 0x226457A8708>

测试环境如下,在terminal下输入tensorboard --logdir=D:\workspace\pytorch\transform\logs,即可在TensorBoard中显示图片的形状,运行效果如下

image-20230916150942321

Compose()的使用

image-20230916151212680
# 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, 1)

测试环境如下,在terminal下输入tensorboard --logdir=D:\workspace\pytorch\transform\logs,即可在TensorBoard中显示图片的形状,运行效果如下

image-20230916151741172
# RandomCrop
trans_random = transforms.RandomCrop(120)
print(type(trans_random))
trans_compose_2 = transforms.Compose([trans_random, trans_totensor])
for i in range(10):
    img_crop = trans_compose_2(img)
    writer.add_image("RandomCrop", img_crop, i)

测试环境如下,在terminal下输入tensorboard --logdir=D:\workspace\pytorch\transform\logs,即可在TensorBoard中显示图片的形状,运行效果如下

image-20230916152836590

总结使用方法

  • 关注输入和输出类型
  • 多看官网文档
  • 关注方法需要什么参数

不知道返回值的时候

  • print
  • print(type)
  • debug

标签:__,img,self,writer,Pytorch,trans,dir
From: https://www.cnblogs.com/codingbao/p/17706909.html

相关文章

  • 《动手学深度学习 Pytorch版》 6.2 图像卷积
    importtorchfromtorchimportnnfromd2limporttorchasd2l6.2.1互相关计算X=torch.tensor([[0.0,1.0,2.0],[3.0,4.0,5.0],[6.0,7.0,8.0]])K=torch.tensor([[0.0,1.0],[2.0,3.0]])此处应为:012345678*0123=......
  • 【研究生学习】Pytorch基本知识
    本篇博客将记录Pytorch的基本知识,包括Pytorch的环境配置、Pytorch的结构,Pytorch的基本操作等Pytorch环境配置我是采用在Anaconda下安装Pytorch的方案,关于这个可以参考网上的大佬写的博客,跟着一步步走就行,比如下面这一篇:在Anaconda下安装Pytorch的超详细步骤除此之外,如果采用在......
  • pytorch(1) 学习资料
    https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter03_DL-basics/3.1_linear-regression  https://pytorch.zhangxiann.com/1-ji-ben-gai-nian/1.2-tensor-zhang-liang-jie-shao  https://datawhalechina.github.io/thorough-pytorch/%E7%AC%AC%E4%B8%83%E7%AB%A0/7......
  • pytorch-多头注意力
    多头注意力在实践中,当给定相同的查询、键和值的集合时,我们希望模型可以基于相同的注意力机制学习到不同的行为,然后将不同的行为作为知识组合起来,捕获序列内各种范围的依赖关系(例如,短距离依赖和长距离依赖关系)。因此,允许注意力机制组合使用查询、键和值的不同子空间表示(represent......
  • 《动手学深度学习 Pytorch版》 5.4 自定义层
    5.4.1不带参数的层importtorchimporttorch.nn.functionalasFfromtorchimportnnclassCenteredLayer(nn.Module):def__init__(self):super().__init__()defforward(self,X):returnX-X.mean()#仅作减去均值的操作layer=......
  • TensorFlow PyTorch Transformer --GPT
    你是机器学习专家,请为我解答如下疑问:tensorflow,pytorch分别是什么?他们跟numpy的区别是什么?什么是深度学习,深度学习框架中的框架指的是什么?什么是机器学习,什么是transformer?transformer和tensorflow,pytorch的关系是什么?ChatGPTTensorFlow和PyTorchTensorFlow:这是一个由......
  • PytorchGPU版本环境配置。Anconda + Pycharm。
    2023年9月12日深度学习课程是基于Pytorch框架有的没的因为之前瞎搞,环境乱七八糟,这次DL课程最好装上GPU版本,那么就通过这次一次性弄个好吧!绝对不是因为,我之前不会弄。(是这样的)课程需要配置好环境。最后经过一段时间的瞎搞乱搞的调整,Pytorch-GPU版本成功安装好了。我是根据B......
  • ubuntu16.04安装cuda8.0+pytorch1.0.0
    1.安装cuda1.1查看ubuntu的英伟达显卡驱动nvidia-smi得到驱动版本是384.130,比较老,所以需要下载旧版本的cuda1.2查看显卡是否支持CUDA计算然后去到这里https://developer.nvidia.com/cuda-gpus查看你的显卡是否在表中,在的话你显卡就是支持CUDA计算的(CUDA-capable)。结果......
  • Pytorch深度学习零基础入门知识
    DL跑代码必须知道的事情损失值损失值的大小用于判断是否收敛,比较重要的是有收敛的趋势,即验证集损失不断下降,如果验证集损失基本上不改变的话,模型基本上就收敛了。损失值的具体大小并没有什么意义,大和小只在于损失的计算方式,并不是接近于0才好。如果想要让损失好看点,可以直接......
  • pip 安装pytorch
    一、新建虚拟环境二、激活虚拟环境三、配置清华镜像源四、在Pytorch官网:PyTorch 选择相关配置 ......