【pytorch】学习总结笔记

1.安装

教学地址:https://www.bilibili.com/video/BV1hE411t7RN?p=12

2.基础

两大法宝函数:

dir()打开,看见
help()说明书
举例:查询torch.cuda.is_available的作用,显示官方的解释文档
在这里插入图片描述

如何加载数据

dataset 提供一种方式去获取数据及其label(1)如何获取每一个数据(2)一共有多少个数据
dataloader为网络提供不同的数据形式

训练集格式(1)训练集+验证集(2)训练集(images+labels.txt)+验证集(images+labels.txt)(3)label写在图片名上

from torch.utils.data import Dataset  # 常用工具
from PIL import Image  # 读图片
import os  # 系统包


class MyData(Dataset):
    def __init__(self, root_dir, label_dir):  # 类实例化
        # self 是类中的全局变量
        self.root_dir = root_dir
        self.label_dir = label_dir
        self.path = os.path.join(self.root_dir, self.label_dir)  # os.path.join 是对两个路径的一个拼接
        self.img_path = os.listdir(self.path)  # os.listdir(path)返回指定路径下所有文件和文件夹的名字,并存放于一个列表中

    def __getitem__(self, idx):  # input label;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 = 'GAN/PyTorch/data/monet2photo/train'
trainA_label_dir = 'A'
trainB_label_dir = 'B'
trainA_dataset = MyData(root_dir, trainA_label_dir)
trainB_dataset = MyData(root_dir, trainB_label_dir)

train_dataset = trainA_dataset + trainB_dataset

复制路径快捷键“ctrl+shift+C”

tensorboard 的使用

看loss的变化,是否在预期内

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()

在这里插入图片描述

进入文件所在的文件夹tensorboard --logdir=logs(文件夹名)
指定端口名tensorboard --logdir=logs --port=6007
在这里插入图片描述
官方建议训练新的时候的时候最好创建不同的文件夹,不然图像可能重合

torchvision 中的transforms

“C”代表class
“M”代表def

transforms 的使用

在这里插入图片描述

常用transforms

想了解一个新的方法,首先要关注输入输出,多看官方文档,关注方法需要什么参数,不知道返回值的时候print;print(type());debug

  1. ToTensor
from PIL import Image
from torchvision import transforms
from torch.utils.tensorboard import SummaryWriter

writer = SummaryWriter("logs")
img = Image.open("data_test/train/ants_image/0013035.jpg")
print(img)

# ToTensor
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
writer.add_image("ToTensor", img_tensor)
writer.close()
# Normalize
# 输入必须是tensor
# transform.Normalize()则把0-1变换到(-1,1)
# image=(image-mean)/std
# mean std = [0.5, 0.5, 0.5], [0.5, 0.5, 0.5]
print(img_tensor[0][0][0])
trans_normal = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5]) # 要输入均值,标准差
img_norm = trans_normal(img_tensor)
print(img_norm[0][0][0])
writer.add_image('Normalize',img_norm)
在这里插入代码片# Resize
# 输入必须是PIL
print(img.size)
trans_resize = transforms.Resize((512, 512))
img_resize = trans_resize(img)
img_resize = trans_totensor(img_resize)  # PIL-Tensor
print(img_resize)
writer.add_image('Resize',img_resize)

2
在这里插入图片描述
在这里插入图片描述


计算公式:0.3137*2-1 = -0.3725

为什么选择tensor

是因为tensor的属性,包括反向传播“backward_hooks”,梯度"grad",cpu等信息
在这里插入图片描述

如何加载数据

dataset/dataloader
dataset:数据集在什么地方,有多少图片
DataLoader:加载数据

import torchvision
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter

# 准备的测试数据集


test_data = torchvision.datasets.CIFAR10("./dataset", train=False,transform=torchvision.transforms.ToTensor(),download=True)

# batch_size每次取4个
test_loader = DataLoader(dataset=test_data,batch_size=64, shuffle=False, num_workers=0, drop_last=True) # num_workers的经验设置值是自己电脑/服务器的CPU核心数

# 测试数据集中第一张图片及target
img, target = test_data[0]
print(img.shape)
print(target)

writer = SummaryWriter("dataloader")
for epoch in range(2):
    step = 0
    for data in test_loader:
        imgs, targets = data
        print(imgs.shape)
        print(targets)
        writer.add_images("Epoch:{}".format(epoch), imgs, step) # images
        # writer.add_image("test", image_array, 1, dataformats='HWC')  # CWH 通道,宽度,高度 默认是这个,不然要修改
        step = step+1

writer.close()
神经网络基本框架nn.Module

在这里插入图片描述
nn.Module包含一个def init(self):和一个 def forward(self, input):

import torch
from torch import nn


class Tudui(nn.Module):
    def __init__(self):
        super().__init__()

    def forward(self, input):
        output = input +1
        return output


tudui = Tudui()
x = torch.tensor(1.0)
output = tudui(x)
print(output)
卷积操作

conv2d:input输入图像;

torch.nn 是封装好的,基础是torch.nn.fouctional

池化操作

最常用的还是maxpooling
dilation空洞卷积
floor向下取整
ceiling向上取整

在这里插入图片描述

非线性激活
网络模型的保存和读取

模型的保存
模型的加载

完整的模型训练套路-GPU训练
完整的模型验证套路

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值