pytorch的学习

发布时间 2023-07-02 10:39:41作者: 是北冥瑜呀

三种编译方式的优缺点

 Pytroch中的加载数据

主要涉及了两个类,一个叫Dataset,一个叫Dataloader.

举一个不恰当的例子,我们要在诸多的垃圾(数据)中找到我们所需要的垃圾(数据),Dataset就是将其中的可回收垃圾提取出来,并且将它们进行编号,同时可以根据编号获取相对应的垃圾,同时获取相对应的label.总结就是提供一种方式去获取数据及其label.(包括1.如何获取每一个数据及其label,2.告诉我们总共有多少的数据)

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

下面是使用Dataset类的步骤及编码----(主要是重写两个方法)

def __getitem_(self, index):
    raise NotImplementedError

def _add_(self, other):
    return ConcatDataset([self, other])

Dataset类代码实战

from torch.utils.data import Dataset
//引入图片的相关函数
from PTL import Image
//os库提供了基本的系统文件交互的功能,类似于访问系统文件夹中的内容。
import os
class MyData(Dataset):
  //self相当于java中的this,可以理解为一个全局变量。
  //root_dir就是指某个根文件夹的路径,相对地址
  //label是数据的标签,同时也是存储数据的上一层路径
  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.image_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"
ants_dataset = MyData(root_dir, ants_label_dir)

1.os操作示例,比如,获取某一个文件下的所有文件,

dir_path="dataset/train/ants"

img_path_list = os.listdir(dir_path)

img_path_list中就是所有文件名称数组。

2.介绍一个os库下的一个函数--->os.path.join函数-->路径的拼接

root_dir = "dataset/train"

label_dir = "ants"

path = os.path.join(root_dir,label_dir)

TensorBoard的使用一

1.TensorBoard使用

  我们可以看到训练过程中losses的变化,从而判断我们的训练是否是正常的状态

 

From torch.utils.tensorboard import SummaryWriter

 

SummaryWriter类的作用:

官方文档翻译:

将条目直接写入 log_dir 中的事件文件以供 TensorBoard 使用。

`SummaryWriter` 类提供了一个高级 API,用于在给定目录中创建事件文件,并向其中添加摘要和事件。 该类异步更新文件内容。 这允许训练程序调用方法以直接从训练循环将数据添加到文件中,而不会减慢训练速度
具体使用例如绘制一个y=2x图像:

From torch.utils.tensorboard import SummaryWriter

//创建实例
writer = SummaryWriter("log")

//writer.add_image()
//y=2x
for i in range(100):
  writer.add_scalar("y=2x", 2*i, i)
writer.close()

1.add_scalar()方法的使用

作用在于:給summary中添加scalar数据

参数有:tag(String):相当于图表标题,scalar_value(float or String/blobname):Value to save 相当于图表y轴,global_step(int):Global step value to record 相当于图表的横坐标

遇到的问题:爆出错误,版本低,需要安装tensorboard,

安装tensorboard:1.打开anaconda Prompt黑窗口,2.进入pytorch环境(conda activate pytorch,3.使用pip install tensorboard进行安装。4.安装成功

运行文件,会出现一个Logs文件夹下带有一个新文件。

如何打开这个文件==》步骤如下:在pycharm控制台输入tensorboard --logdir=logs --port=6007

注意:当你修改了绘图的x,y轴关系时候,重复的写入,会造成图像的混乱,解决办法:每当训练一个新的模型,就把以往的文件删除;或者官方給的解决办法,可以在此基础上创建一个新的文件夹。

2.add_image()方法的使用

作用在于:給summary中添加image数据

参数有:tag(String):相当于图表标题,img_tensor(torch.Tensor, numpy.array, or string/blobname):Image data,global_step(int):Global step value to record 相当于图表的横坐标\