寒假学习Day 4:PyTorch学习

发布时间:2024-07-26 15:01

寒假学习Day 4:PyTorch学习

PyTorch

参考教程:https://www.bilibili.com/video/BV15K411N7CF?p=1

PyTorch Explained

PyTorch是帮助和促进我们构建深度学习项目的一个库。它强调灵活性并允许我们使用熟悉的Python格式来表达深度学习模型。PyTorch的易用性使得其很早便被研究社区所接纳,并且在官方发布后的这几年里,它已发展成为适用于广泛应用的最杰出的深度学习工具之一。
PyTorch提供了一个核心数据结构——Tensor,一个与NumPy数组非常相似的多维数组。在此基础上,为了轻松实现并运行一个项目,或者设计和训练一个新的神经网络结构,Tensor内部实现了一系列功能。Tensor可用于加速数学运算(需要软硬件搭配得当),并且PyTorch内置了可用于分布式训练、高效数据加载的函数包,以及大量常用的深度学习函数。

PyTorch 包

torch 包含所有其他包和张量库
torch.nn 神经网络 包含类和模块 比如图层 权重
torch.autogard 是一个子包,负责处理在核心处优化我们的神经网络权重所需的导数计算
torch.nn.functional 是功能接口,让我们能够访问像损失函数 激活函数和卷积运算
torch.optim 使我们能够访问典型的优化
torch.utils 子包 包含像数据集和数据加载器这样的实用程序类,使数据预处理更加容易
torchvision 单独的包 它能让我们访问流行的数据集 计算机视觉的模型架构和图像转换

PyTorch install

我是参考的这个视频
https://www.bilibili.com/video/BV1hE411t7RN?p=1

CUDA是什么

GPU相对于CPU的速度取决于所执行的计算的类型,最适合GPU的是一个可以并行完成的计算。并行计算是一种计算方法,通过这种计算方法,一个
特定的计算被分解成独立的,可以同时进行的更小的计算,然后,得到的计算被重新组合或同步,以形成原始较大计算的结果。
通过cuda,可以将计算转到GPU上进行
寒假学习Day 4:PyTorch学习_第1张图片

Tensors

tensors 是神经网络使用的主要数据结构,在网络中的输入,输出和转换都使用张量来表示
n维tensor n是指在结构中访问特定元素所需要的索引数量

tensor的秩告诉我们需要多少个索引来访问或者引用tensor数据结构中包含的特定数据元素

#查看张量的秩
len(t.shape)

tensor的秩=tensor的维度数=tensor的轴数

shape

t.shape

从形状可以直接看出每一个轴的长度

reshape

t=torch.tensor([
    [1,1,1,1],
    [2,2,2,2],
    [3,3,3,3]
    
],dtype=torch.float32)
t.shape#shape
len(t.shape)#秩
torch.tensor(t.shape).prod()#查看tensor的分量数
t.numel()#查看tensor的分量数的另一种方法

reshape时分量值的乘积必须等于tensor中元素的总数

t.reshape(1,12)

压缩一个tensor可以移除长度为1的轴,而解压缩一个tensor会增加一个长度为1的维度

#压缩
print(t.reshape(1,12).squeeze())
print(t.reshape(1,12).squeeze().shape)
#解压缩
print(t.reshape(1,12).unsqueeze(dim=0))
print(t.reshape(1,12).unsqueeze(dim=0).shape)

在pytorch中,-1告诉reshape函数,根据一个tensor中包含的其他值和元素的个数来求出值应该是多少

t=t.reshape(1,-1)

CNN输入

len([A0,A1,A2,A3])=4
A2:Height
A3:Wide
A1:Color

  1. A1=1:灰度图像
  2. A1=3:RGB图像

A0:批量的大小,即批中有多少样本

PyTorch Tensor

import torch
import numpy as np
t=torch.Tensor
type(t)
print(t.dtype)
print(t.device)#设备
print(t.layout)#内存布局

在Pytorch中创建tensor
构造函数在构造一个tensor时使用全局缺省值
工厂函数根据输入判断数据类型

data=np.arry([1,2,3])
#方法1(类构造函数)
torch.Tensor(data)
#方法2(工厂函数)
torch.tensor(data)
#方法3(工厂函数)
torch.as_tensor(data)
#方法4(工厂函数)
torch.from_numpy(data)

方法一和方法二在更改输入的data值之后不会改变输出
方法三和方法四在更改输入的data值之后会改变输出
不需要内存共享时方法二是最优的
需要内存共享时方法三是最优的

在没有输入数据的情况下创建tensor
寒假学习Day 4:PyTorch学习_第2张图片

Flatten

四个等价的操作

t.reshape(1,-1)[0]
t.reshape(-1)
t.view(t.numel())
t.flatten()

CNN Flatten Operation

t1=torch.tensor([
   [1,1,1,1],
   [1,1,1,1],
   [1,1,1,1],
   [1,1,1,1]
    
])
t2=torch.tensor([
   [2,2,2,2],
   [2,2,2,2],
   [2,2,2,2],
   [2,2,2,2]
    
])
t3=torch.tensor([
   [3,3,3,3],
   [3,3,3,3],
   [3,3,3,3],
   [3,3,3,3]
    
])
#合并
t=torch.stack((t1,t2,t3))
#增加一个轴
t=t.reshape(3,1,4,4)
#得到了CNN的理想输入,3个灰度样本,每个样本的大小为4x4
t.flatten(start_dim=1).shape
t.flatten(start_dim=1)#控制flatten操作时从哪个轴开始

Tensors for Deep Learning

有些操作原理是利用了广播

  • numpy 广播
t1=torch.tensor([
    [1,2],
    [3,4]
],dtype=torch.float32)
t2=torch.tensor([2,4],dtype=torch.float)
np.broadcast_to(t2.numpy(),t1.shape)

  • tensor 比较(利用了广播)
t1=torch.tensor([
    [0,5,7],
    [6,0,7],
    [0,8,0]
],dtype=torch.float32)
t.eq(0)#元素等于0
t.ge(0)#元素大于等于0
t.gt(0)#元素大于0
t.lt(0)#元素小于0
t.le(7)#元素小于或等于7

tensors 缩减操作

tensors 缩减操作是指减少tensors中包含的元素数量的操作

t=torch.tensor([
    [0,1,0],
    [2,0,2],
    [0,3,0]
    
],dtype=torch.float32)
t.sum()
t.numel()
t.sum().numel()
t.sum().numel()
t.sum().numel()<t.numel()

返回的值是true
在sum操作中元素减少了,这是缩减操作的一个例子
其他的还有

t.prod()#返回元素的乘积
t.mean()#返回元素的平均值
t.std()#返回标准差
t.argmax()#返回最大值的索引
t.mean().item()#把标量张量的值作为一个数字
t.mean(dim=0).tolist()#把tensor转化成列表
t.mean(dim=0).numpy()#把tensor转化成array

Pytorch CNN

  • Pytorch 创建数据集原理
class OHLC(Dataset):
    def __init__(self,csv_file):
        self.data=pd.read_csv(csv_file)
    def __getitem__(self,index):
        r=self.data.iloc[index]
        label=torch.tensor(r.is_up_day,dtype=torch.long)
        sample=self.normalize(torch.tensor([r.open,r.high,r.low,r.close]))
        return sample,label
    def __len__(self):
        return len(self.data)
  • 实例
#所用到的库
import torch
import torchvision
import torchvision.transforms as transforms
#数据集下载
train_set=torchvision.datasets.FashionMNIST(
    root='./data/FashionMNIST'
    ,train=True
    ,download=True
    ,transform=transforms.Compose([
        transforms.ToTensor() 
    ])
)

寒假学习Day 4:PyTorch学习_第3张图片
Done的那一刻非常喜悦!

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号