pytorch入门笔记

此文为本人近期自学pytorch的笔记,根据pytorch基础入门所学内容做的笔记,如有误或者理解有偏差的,请多多指正。此教学视频的感受和体会在文章最后。如果你喜欢的话,可以关注公众号:你我的青春,一部分学习体验与推荐会分享在公众号上,公众号二维码已放在文章最后。希望我们在2022中加油前进!

CUDA NVIDIA进行硬件加速
深度学习核心:梯度下降算法

x‘(下一次的数值)=x-rate(步长)*x’(x倒数)

衍生出来的梯度下降有:Adam,sgd,rmsprop,nag,adadelta,adagrad,momentum

Closed Form Solution近似解

Logistic Regression压缩函数,压缩到0-1

Linear Regression 线性

Python与Pytorch数据类型区别
在这里插入图片描述
在这里插入图片描述

a=torch.randn(2,3)

print(a.type())#可以查看具体数据类型
#输出为'torch.FloatTensor'
print(type(a))#查看基本数据类型,不常用
#torch.Tensor
print(isinstance(a,torch.FloatTensor))#匹配数据类型
#输出为True

#同一个Tensor,部署在GPU与CPU上,是不一样的
``
### Dimension0/rank0(标量)
torch.tensor(1.)
#输出为tensor(1.)
torch.tensor(1.3)
#输出tensor(1.300)

#可以用来表示loss

向量在Pytorch中,统称为张量,

Dim0,标量

Dim1:Bias Linear Input

Dim2:Linear Input batch

Dim3:RNN input Batch

Dim4:CNN:[b,c,h,w]

tensor:输入现成数据

FloatTensor输入维度(不常用)

不推荐使用list
数据集的路径导入

import os
from torch.utils.data import Dataset
from PIL import Image

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)

    def __getitem__(self, idx):
        img_name = self.img_path[idx]
        img_item_path = os.path.join(self.root_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  # 数据集拼接,有时候数据不够,可以将多个类似数据集拼接

TensorBoard的使用(一个数据)

需要tensor数据类型才能展示,所以使用前需要进行格式转换
在这里插入图片描述

from torch.utils.tensorboard import SummaryWriter

writer=SummaryWriter("logs")

for i in range(100):
    writer.add_scalar("y=x",i,i)#标签,y轴,x轴
# writer.add_image()
# writer.add_scalar()#数
writer.close()

打开方式:

在终端输入:

tensorboard --logdir=logs

当多人使用时,可能会出现端口占用,修改端口如下

tensorboard --logdir=logs --port=6007
from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image

writer = SummaryWriter("logs")
image_path = "dataset/train/ants/0013035.jpg"
img_PIL = Image.open(image_path)
img_array = np.array(img_PIL)  # 转为np类型,这样才能匹配writer.add_image()的输入参数
print(type(img_array))
print(img_array.shape)#由(512, 768, 3)已知,通道在后面,所以需要其他函数将其转化


writer.add_image("test",img_array,1,dataformats='HWC')#显示图片,并进行格式转化了,将格式转为HWC,把通道放后面了,通过这种方法可以看到每个步骤执行的输出结果
for i in range(100):
    writer.add_scalar("y=10", i, i)  # 标签,y轴,x轴
writer.close()

transform进行图片的变换
在这里插入图片描述

import cv2
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

# python的用法-》tensor的数据类型
# 通过transform.ToTensor去看两个问题
# 1、transform该如何使用(Python)
# 2、为什么需要Tensor数据类型
# 需要相对路径,因为是斜杆,绝对路径是反斜杠
img_path = "dataset/train/ants/0013035.jpg"
img = Image.open(img_path)

writer=SummaryWriter("logs")

# 1、transform该如何使用(Python)
tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(img)

#使用cv2引入图片
cv_img=cv2.imread(img_path)

writer.add_image("Tensor_img",tensor_img)
writer.close()
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

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

# ToTensor
trans_totensor = transforms.ToTensor()  # 将此方法赋给trans_totensor
img_tensor = trans_totensor(img)  # 然后使用此方法后将结果赋值给img_tensor
writer.add_image("Totensor", img_tensor)  # 然后显示在write上

# Normalize归一化
print(img_tensor[0][0][0])
trans_norm = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])  # 因为RGB是三层的,需要提供三个标准差
img_norm = trans_norm(img_tensor)
print(img_norm[0][0][0])
writer.add_image("Normalize", img_norm)

#Resize
print(img.size)
trans_resize=transforms.Resize((512,512))
img_resize=trans_resize(img)
print(img_resize)

#Compose - resize -2
trans_resize_2=transforms.Resize(512)
#PIL-PIL->tensor
trans_compose=transforms([trans_resize_2,trans_totensor])
img_resize_2=trans_compose(img)
writer.add_image("Resize",img_resize_2,1)#后面的1为将输出放在第一位显示出来


#RandomCrop
trans_random=transforms.RandomCrop(512)
trans_compose_2=transforms.Compose([trans_random,trans_totensor])#前面表示随机裁剪,后面为转为tensor数据类型
for i in range(10):
    img_crop=trans_compose_2(img)
    writer.add_image("RandonCrop",img_crop,i)
    
    
writer.close()

一些方式方法的总结:

  1. 首先关注输入输出以及类型,需要什么参数(可用print或者官方文档查看)
  2. 多看官方文档

torchvision统一管理处理数据集

import ssl
import torchvision
from torch.utils.tensorboard import SummaryWriter
dataset_transform=torchvision.transforms.Compose([torchvision.transforms.ToTensor()])
ssl._create_default_https_context = ssl._create_unverified_context
train_set=torchvision.d
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值