【Pytorch】小土堆自学日记(一)

一、验证环境是否正确

1.pycharm console验证

import torch

二、Python中的两大函数

1. dir():打开;看见(工具箱及工具箱的分隔区有什么东西)

    help():说明书(每个工具如何使用,工具的使用方法)

2.实操代码:

import torch
torch.cuda.is_available
dir(torch)
dir(torch.cuda)
dir(torch.cuda.is_available())
#输出['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute'.....]双下划线说明不可修改
help(torch.cuda.is_available())

三、编程方式的对比:

1、代码以块为一个整体运行的话,

①pyhton文件的块:是所有行的代码(优:适用于大型项目;缺:需要从头运行)

②python控制台的块:是以每一行为块,运行的(优:显示变量属性;缺:不利于代码阅读和修改)

③jupyter:以任意行为块运行的(优:利于阅读和修改;缺:环境需要配置)

四、Pytorch加载数据初步认识:

1、①所有数据——>

     ②Dataset提供一种防暑获取数据及其label(实现怎么获取数据和label&告诉我们一共有多少数据)——>

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

2、代码部分(简单版,没有label单独的文件夹):

from torch.utils.data import Dataset
#utils表示常用工具库,使用Dataset要继承这个类
import cv2
from PIL import Image
import os
#读取图片用
class MyData(Dataset):

    def __init__(self,root_dir,label_dir):
    #为class提供全局变量,由于函数之间变量无法传递,self.可以指定变量给后面函数使用,指定了类里的全局变量
       self.root_dir=root_dir#"dataset//train"
       self.label_dir=label_dir#"ants"
       self.path=os.path.join(self.root_dir,self.label_dir)#join可以自动连接地址
       self.img_path=os.listdir(self.path) #因为地址是分散的,需要转换为ants的地址列表

    def __getitem__(self, idx):#读取其中的一个
        img_name=self.img_path[idx]#"读到了某一个的名称,例如0013035"
        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#数据集的拼接

img, label = ants_dataset[0]
img, label = bees_dataset[1]
img, label = train_dataset[123]

img.show()

3、代码部分复杂版(有一个label文件夹,储存着与图片名称相同的txt文件,里面写着ants/bees)

from torch.utils.data import Dataset
#utils表示常用工具库,使用Dataset要继承这个类
import cv2
from PIL import Image
import os
#读取图片用
class MyData(Dataset):

    def __init__(self,root_dir,label_dir):
    #为class提供全局变量,由于函数之间变量无法传递,self.可以指定变量给后面函数使用,指定了类里的全局变量
       self.root_dir=root_dir#"dataset//train"
       self.label_dir=label_dir#"ants"
       self.path=os.path.join(self.root_dir,self.label_dir)#join可以自动连接地址
       self.img_path=os.listdir(self.path) #因为地址是分散的,需要转换为ants的地址列表

    def __getitem__(self, idx):#读取其中的一个
        img_name=self.img_path[idx]#"读到了某一个的名称,例如0013035"
        img_item_path=os.path.join(self.root_dir,self.label_dir,img_name)#连接完整地址
        img=Image.open(img_item_path)
        label_item_path = os.path.join(self.root_dir, self.label_dir, img_name.split('.')[0]+'.txt')
        with open(label_item_path,'r') as f:
            label = f.read()
        return img,label

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

root_dir = "dataset/train"
ants_label_dir = "ants_label"
ants_image_dir = "ants_image"
bees_label_dir = "bees_label"
bees_image_dir = "bees_image"
ants_dataset = MyData(root_dir, ants_image_dir, ants_label_dir)
bees_dataset = MyData(root_dir, bees_image_dir, bees_label_dir)
train_data = ants_dataset + bees_dataset

img, label = ants_dataset[0]
img.show()

五、TensorBoard的使用

1.函数的使用

①writer.add_scalar()

 def add_scalar(self,tag,scalar_value,global_step=None,walltime=None,new_style=False,double_precision=False,):

"""

参数使用:
tag (str): 图表标题
scalar_value (float or string/blobname): 保存的数值===y轴
global_step (int): 训练到多少步===x轴
walltime (float): 不常用
new_style (boolean): Whether to use new style (tensor field) or old
style (simple_value field). New style could lead to faster data loading.

"""

"""

官方示例:
from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter()
x = range(100)
for i in x:
writer.add_scalar('y=2x', i * 2, i)
writer.close()

"""

2、代码实践

from torch.utils.tensorboard import SummaryWriter

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

 ②运行后出现logs文件夹:

③在terminal输入语句打开log文件:

tensorboard --logdir=logs

④一台机器使用的人多,想要切换端口,在terminal输入语句:

tensorboard --logdir=logs --port=6007

⑤最终图像:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值