Pytorch学习笔记

两个法宝函数

dir():打开,看见
help():帮助、说明
例子:dir(pytorch)、dir(pytorch.X)
Ctrl+F:搜索
注意:双下划线是不能修改的文件

Pycharm和Jupter的对比

python文件:以块作为一个整体;通用运行,但是需要从头运行。
python控制台:以每一行为快,调试可以看到变量属性;Shift+enter可以换行书写代码;显示每个变量的属性,不利于代码的阅读和修改。
jupter:以任意块运行;利于代码阅读及修改;环境需要配置。

Pytorch加载数据初认识

dataset:提供一种方式去获取数据机器label,使用时需要继承这个类
dataloader:为后面的网络提供不同的数据形式;包含两个功能:如何获取每一个数据及其label、告诉我们总共有多少个数据
torch.utils.data:torch常用工具
**class中init函数·
**:为class类提供全局变量;后面创建实例的时候需要给init的参数赋值
路径:绝对路径在Windows中路径用“\”表示;相对路径用"/"表示
self:指定了一个类中的全局变量

Tensorboard

from torch.utils.tensorboard import summmarywriter
块注释:ctrl+/
args:参数
scalar:结果可视化(不太推荐使用)
图片打开:PIL:Python Image Library
from PIL import Image
img=Image.open(imge_path)
CHW–HWC:writer.add_image(“test”,image_array,2, dataformats=‘HWC’)

SummaryWriter

from torch.utils.tensorboard import SummaryWriter
writer=SummaryWriter("logs")
write.add_image("图片title",图片(tenstor类型),输出排列的第几张图片)

Transforms

导入:from trochvision import Transform
trasnforms.py工具箱:
里面的工具:ToTensor、resize

通过transforms.ToTensor去看两个问题
1、transforms该如何使用python
ctrl+p出现需要什么参数
result=tool(input)
内置函数前后具有双下划线,调用类时会自动调用;如果是单纯调用其中的某个函数,则不会调用内置函数。
2、为什么需要Tensor数据类型
alt+enter:提供解决方案
输入、输出、作用
读取图片:
Image.open()
cv.imread()
3、ToTensor

Img_Tensor = transformers.ToTensor(Img_PIL/Img_Numpy)

4、Resize()

trans_resize = transforms.Resize((512,512))
img_resize=trans_resize(img)

5、compose
Transforms.Randomcrop()#随机裁剪
关注函数功能、输入和输出(输入一般是会告诉是什么样的类型、输出可以用调试的方法进行或者直接打印变量
观看官方文档,比较准确!
关注方法需要什么参数

TorchVision

1、数据集:torchvision.datasets.CIFAR10(root=,train=,download=true),推荐download一直设置为true!
2、可以通过迅雷进行数据下载
3、可以用summary.writer进行处理

DateLoader

**作用:**怎么取数据、取多少数据
batch_size:每次取的数据量
shuffle:是否打乱数据
num_workers:单进程还是多进程,=0表示是主进程;windows下一般用=0.
drop_last:剩余的数据是否丢弃

nn.Module

import torch.nn as nn
import torch.nn.functional as F
class Model(nn.Module):
     def __init__(self):
	         super().__init__()
	        self.conv1 = nn.Conv2d(1, 20, 5)
	        self.conv2 = nn.Conv2d(20, 20, 5)

    def forward(self, x):
        x = F.relu(self.conv1(x))
        return F.relu(self.conv2(x))

卷积、池化、非线性&&&&

torch.reshape()
troch.transformers.resize()
torch.flatten()

sequential

model = nn.Sequential(
          nn.Conv2d(1,20,5),
          nn.ReLU(),
          nn.Conv2d(20,64,5),
          nn.ReLU()
        )

# Using Sequential with OrderedDict. This is functionally the
# same as the above code
model = nn.Sequential(OrderedDict([
          ('conv1', nn.Conv2d(1,20,5)),
          ('relu1', nn.ReLU()),
          ('conv2', nn.Conv2d(20,64,5)),
          ('relu2', nn.ReLU())
        ]))

输出网络结构:print(model())
检验网络(尤其是线性层):
input=torch.ones((64,3,32,32))
output=model(input)
可以检验正确性!
![在这里插入图片描述](https://img-blog.csdnimg.cn/0bdbd07370be47a281537b3758b6ab94.png
怎么打印模型参数?

损失函数和反向传播

from troch.nn import L1Loss
results=L1Loss(input,target)

损失函数:L1Loss、交叉熵损失(适合于分类问题)、MSELoss损失
补:入门的时候学习太多会减弱兴趣的!

优化器

for input, target in dataset:
    optimizer.zero_grad()
    output = model(input)
    loss = loss_fn(output, target)
    loss.backward()
    optimizer.step()

优化器主要配置两个参数:params、lr

optim = torch.optim.xxx(models.parameters,lr=0.01)

optim.zero_grad()
result_los.backward()
optim.step()

现有模型修改

pip list :展示安装的package
vgg16.add_module(“add_linear”,nn.Linear(1000,10)):vgg之后增加线性层
vgg16.classifier[6]:直接修改最后一层的输出

网络模型保存与加载

pytorch的官网的程序写法可以借鉴,作为套路和模板
方式1:
保存模型和参数:

torch.save(vgg16,"vgg16_method1.pth")

加载模型和参数

model=torch.load("vgg16_method1.pth")

自己的网络模型在加载的时候需要复制到加载程序中
方式2:
保存模型参数(官方推荐)

torch.save(vgg16.state_dict(),"vgg16_method2.pth")

加载模型参数(官方推荐)

vgg16=trochvision.models.vgg16(pretrained=Flase)
vgg16.load_state_dict(torch.load("vgg16_method2.pth"))

模型训练

模型测试:
不要再调整成参数和寻找最优了!

with torch.no_grad():

计算正确率
在这里插入图片描述

GPU训练

google colaoratary和Jupter相似,可以用其中的GPU
利用GPU训练的是把网络模型、数据和损失函数改为.cuda()
三个变量+cuda()就

if torch.cuda.is_avialable()
	model=Model.cuda()

常用写法

device=torch.device("cuda" iftorch.cuda.is_available() else "cpu")

模型测试(demo)

利用已经训练好的模型,然后提供输入
先加载模型参数,然后复制神经网络,数据reshape和totensor

GitHub

多看牛人代码,认真体会细节
一般看星号排序的代码

补充:

item()的使用

import torch
a  = troch.tensor(5)
print(a)
print(a.item())

输出为:

tensor(5)
5

参考链接:
B站视频_小土堆
PyTorch 深度学习快速入门教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值