pytorch 图像分割的交并比_PyTorch深度学习框架——初识

pytorch 图像分割的交并比_PyTorch深度学习框架——初识_第1张图片

PyTorch深度学习框架

简单介绍

pytorch 图像分割的交并比_PyTorch深度学习框架——初识_第2张图片

PyTorch 是一个针对深度学习, 并且使用GPUCPU来优化的tensor library(张量库)。

pytorch 图像分割的交并比_PyTorch深度学习框架——初识_第3张图片

学过Tensorflow的人或许有话说,这些事情Tensorflow也能做到的呀?那么pyTorch到底有什么可以很快在深度学习爱好者中迅速发展起来的呢?其实相比较于Tensorflow,两者还是存在不同之处——

  • PyTorch更有利于研究人员、爱好者、小规模项目等快速搞出原型。而TensorFlow更适合大规模部署,特别是需要跨平台和嵌入式部署时。
  • PyTorch本质上是Numpy的替代者,而且支持GPU、带有高级功能,可以用来搭建和训练深度神经网络。而TensorFlow可以看成是一个嵌入Python的编程语言。我们所写的TensorFlow代码会被Python编译成一张图,然后由TensorFlow执行引擎运行。
  • 对于部署上,小规模服务器两个框架都可以用,但是对于移动端嵌入式部署,Tensorflow会表现出更突出的优势。使用TensorFlow,部署在AndroidiOS平台时只需要很小的工作量,至少不必用Java或者C++重写模型的推断部分。对于高性能服务器端的部署,还有TensorFlow Serving能用。除了性能之外,TensorFlow Serving一个显著的优点是可以轻松的热插拔模型,而不会使服务失效。

PyTorch的环境配置

如果之前学习了Tensorflow的朋友们,应该对PyTorch的部署和安装会信手拈来。但是对于初学者来说,需要花一点时间进行摸索。

参考官网配置方法PyTorch官网可以进行安装。因为文件过大,下载过程中出现超时现象,使用清华镜像进行下载,速度比较块。当前操作系统Window10,其他系统可直接参考官网详细说明。

## 在安装之前需要确认cuda是否成功安装并在系统中使用
conda --version
​
## 下载相关文件,需要注意cuda和pyTorch的版本对应关系!!
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes
​
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
​
## 安装
pip install pytorch cuda90 -c pytorch 
pip install torchvision
如果通过镜像下载不下来,可以直接到 torch下载链接进行下载,然后执行安装命令就可以。
# 离线安装相对应的版本
python install torchvision-0.3.0-py2.py3-none-any.whl
​
python install torch-1.1.0-cp36-cp36m-win_amd64.whl #python36,windowns 64
  • 检测是否安装成功
    ## 检测是否安装成功
    python
    >> import torch
    >> import torchvision
    >> torch.cuda.is_available()
    True #显示True表示安装成功,并且可用

PyTorch的张量的基本介绍和创建

张量简介

张量在数学中,就是一个多维数组,它是标量、向量、矩阵的高维拓展。

pytorch 图像分割的交并比_PyTorch深度学习框架——初识_第4张图片

标量是一个0维张量,向量是一个1维张量,矩阵是一个2维张量,但是有些高维数值就无法用标量、向量、矩阵来表示了,比如彩色图片的像素点,其中还包括RGB通道的,那么此时就需要进行高维拓展——张量

但是在PyTorch中张量不仅仅表示多维数组,也是自动求导的关键。其中VariablePyTorch-0.4.0版本之前的一个数据类型,虽然在0.4.0版本之后已经并入Tensor中,但是Variable这个数据类型还是需要了解的。这个数据类型和Tensorflow-1.0版本中的Variable还是有所不同之处。在Pytorch中,Variable主要是用于封装Tensor,进行自动求导

PyTorch的数据类型总共有9种数据类型,其中使用频率最高的是torch.float32或者torch.floattorch.int64或者torch.long。比如前者主要使用到卷积层的权值和图像处理中都默认float32,后者主要是在交叉熵或者计算损失函数中会用到的比较多。

创建方式

直接创建

  • 第一种
## 直接创建rensor
torch.tensor(
            data,
            dtype=None,
            device=None,
            requires_grad=False,
            pin_memory)
​
## data——数据,可以是list,numpy
## dtype——数据类型,默认与data一致
## device——cpu或者cuda
## requires_grad——是否需要自动求导
## pin-memory——是否存于锁页内存,与转换效率有关
  • 第二种
    ## 从numpy创建tensor
    torch.from_numpy(ndarray)

    使用这种方法创建的tensor和ndarray是共享内存的,当修改任意一个的数据,另一个数据也会被修改的!!!

根据数值创建

  • 第一种
    ## 根据size创建全0张量
    torch.zeros(*size,
    out=None,
    dtype=None,
    layout=torch.strided,
    device=None,
    requires_grad=False)
    ## 根据size创建全1的张量
    torch.ones(*size,
    out=None,
    dtype=None,
    layout=torch.strided,
    device=None,
    requires_grad=False)size:张量的形状,比如(3,3),(3,224,224)out:输出的张量layout:内存中的布局形式,有stridedsparse_coo(稀疏矩阵时可以使用,提高读取速度)等device:所在设备,cuda/cpu
  • 第二种
    ## 根据input创建全0的张量
    torch.zeros_like(input,
    dtype=None,
    layout=None,
    device=None,
    requires_grad=False)

    ## 根据input创建全0的张量
    torch.ones_like(input,
    dtype=None,
    layout=None,
    device=None,
    requires_grad=False)
  • 第三种
    ## 使用full方法来创建张量
    torch.full(size,
    full_value,
    out=None,
    dtype=None,
    layout=torch.strided,
    device=None,
    requires_grad=False)

    ## 使用full_like方法来创建张量
    torch.full_like(size,
    full_value,
    out=None,
    dtype=None,
    layout=torch.strided,
    device=None,
    requires_grad=False)full_value:张量的值。
  • 第四种
    ## 创建等差的1维张量
    torch.arange(start=0,
    end,
    step=1,
    out=None,
    dtype=None,
    layout=torch.strided,
    device=None,
    requires_grad=False)

    ## 创建均分的1维张量,其数值区间是[start,end]
    torch.linspace(start=0,
    end,
    steps=100,
    out=None,
    dtype=None,
    layout=torch.strided,
    device=None,
    requires_grad=False)

    ## 创建对数均分的1维张量,长度维steps,底为base
    torch.linspace(start=0,
    end,
    steps=100,
    base=10.0,
    out=None,
    dtype=None,
    layout=torch.strided,
    device=None,
    requires_grad=False)start:数列的起始值end:数列的“结束值”step:等差数列中表示数列公差,默认为1steps:均分中表示数列长度base:对数函数的底,默认是10
  • 第五种
    ## 创建单位对角矩阵(2维张量),默认是方阵
    torch.eye(n,
    m=None,
    out=None,
    dtype=None,
    layout=torch.strided,
    device=None,
    requires_grad=False)n :矩阵行数m :矩阵列数

根据概率分布创建

  • 第一种
    ## 正态分布(高斯分布)
    torch.normal(mean,
    std,
    out=None)

    ## 存在四种模式,mean分别是标量和张量,std也分别存在标量和张量两种情况,每一种情况生成的张量都是不全相同的。
    torch.normal(mean,
    std,
    size,
    out=None)

    ## 标准正态分布
    torch.randn(*size,
    out=None,
    dtype=None,
    layout=torch.strided,
    device=None,
    requires_grad=False)
    #或者
    torch.randn_like(*size,
    out=None,
    dtype=None,
    layout=torch.strided,
    device=None,
    requires_grad=False)mean:均值std:标准差size:张量的形状
  • 第二种
    ## 在[0,1]之间生成均匀分布
    torch.rand(*size,
    out=None,
    dtype=None,
    layout=torch.strided,
    device=None,
    requires_grad=False)

    # 或者
    torch.rand_like(*size,
    out=None,
    dtype=None,
    layout=torch.strided,
    device=None,
    requires_grad=False)

    ## 在[low,high)之间生成整数均匀分布
    torch.randint(low=0,
    high,
    size,
    out=None,
    dtype=None,
    layout=torch.strided,
    device=None,
    requires_grad=False)

    # 或者
    torch.randint_like(low=0,
    high,
    size,
    out=None,
    dtype=None,
    layout=torch.strided,
    device=None,
    requires_grad=False)
  • 第三种
    ## 生成从0到n-1的随机排列
    torch.randperm(n,
    out=None,
    dtype=torch.int64,
    layout=torch.strided,
    requires_grad=False)n:张量的长度
  • 第四种
    ## 以input为概率,生成伯努利分布(0-1分布)
    torch.bernoulli(input,
    *,
    generator=None,
    out=None)input:概率值

你可能感兴趣的