zoukankan      html  css  js  c++  java
  • 【PyTorch深度学习60分钟快速入门 】Part1:PyTorch是什么?

    0x00 PyTorch是什么?

    PyTorch是一个基于Python的科学计算工具包,它主要面向两种场景:

    • 用于替代NumPy,可以使用GPU的计算力
    • 一种深度学习研究平台,可以提供最大的灵活性和速度

    0x01 开始学习

    1、Tensors

    Tensors(张量)类似于numpy的ndarrays,不过Tensors还可以运行于GPU上以提升计算速度。

    from __future__ import print_function
    import torch
    

    创建一个5x3且未初始化的矩阵:

    x = torch.Tensor(5, 3)
    print(x)
    

    输出结果:

     0.0000e+00  0.0000e+00  3.1766e-27
     4.5880e-41  3.1950e-27  4.5880e-41
     1.9468e-22  4.5880e-41  1.9468e-22
     4.5880e-41  2.3214e-22  4.5880e-41
     2.2306e-22  4.5880e-41 -2.7458e+32
    [torch.FloatTensor of size 5x3]
    

    创建一个随机初始化的矩阵:

    x = torch.rand(5, 3)
    print(x)
    

    输出结果:

     0.9559  0.8026  0.4142
     0.8142  0.8763  0.6700
     0.4673  0.0675  0.3439
     0.2200  0.1499  0.6082
     0.7853  0.8487  0.8124
    [torch.FloatTensor of size 5x3]
    

    获取矩阵大小:

    print(x.size())
    

    输出结果:

    torch.Size([5, 3])
    

    注意:torch.Size实际上是一个元组,所以它支持元组的所有操作。

    2、操作

    PyTorch中的操作有很多不同的语法,下面我们以加法为例来学习其操作语法:
    (1)加法:语法1

    y = torch.rand(5, 3)
    print(x + y)            # x为上文中定义的x
    

    输出结果:

     1.7700  1.7643  1.3732
     1.3085  1.4576  0.9668
     0.9354  0.0891  0.4727
     0.6503  0.6814  1.2334
     1.5436  0.9600  1.0965
    [torch.FloatTensor of size 5x3]
    

    (2)加法:语法2

    print(torch.add(x, y))            # x为上文中定义的x
    

    输出结果:

     1.7700  1.7643  1.3732
     1.3085  1.4576  0.9668
     0.9354  0.0891  0.4727
     0.6503  0.6814  1.2334
     1.5436  0.9600  1.0965
    [torch.FloatTensor of size 5x3]
    

    (3)加法:将结果赋值给Tensor对象

    result = torch.Tensor(5, 3)
    torch.add(x, y, out=result)
    print(result)
    

    输出结果:

     1.7700  1.7643  1.3732
     1.3085  1.4576  0.9668
     0.9354  0.0891  0.4727
     0.6503  0.6814  1.2334
     1.5436  0.9600  1.0965
    [torch.FloatTensor of size 5x3]
    

    (4)加法:原地替换

    # adds x to y
    y.add_(x)
    print(y)
    

    输出结果:

     1.7700  1.7643  1.3732
     1.3085  1.4576  0.9668
     0.9354  0.0891  0.4727
     0.6503  0.6814  1.2334
     1.5436  0.9600  1.0965
    [torch.FloatTensor of size 5x3]
    

    注意: 任何原地改变张量值的操作后缀都是固定的_,例如:x.copy_(y)x.t_(),都将原地改变x的值。
    另外,你可以使用标准的numpy索引来操作Tensor对象。

    print(x[:, 1])
    

    输出结果:

     0.8026
     0.8763
     0.0675
     0.1499
     0.8487
    [torch.FloatTensor of size 5]
    

    调整大小:如果你想调整或重塑张量形状,那么可以使用torch.view

    x = torch.randn(4, 4)
    y = x.view(16)
    z = x.view(-1, 8)  # the size -1 is inferred from other dimensions
    print(x.size(), y.size(), z.size())
    

    输出结果:

    torch.Size([4, 4]) torch.Size([16]) torch.Size([2, 8])
    

    扩展阅读: 这里介绍了超过100个Tensor操作,包括转置、索引、切片、数学操作、线性代数、随机数等。

    0x02 NumPy转换

    将torch中的张量转换为numpy中的数组或者反过来都是轻而易举的事。
    torch张量与numpy数组将共享它们底层的内存位置,改变二者之一都将会改变另一个。

    1、将torch张量转换为numpy数组

    定义一个torch张量对象:

    a = torch.ones(5)
    print(a)
    

    输出结果:

     1
     1
     1
     1
     1
    [torch.FloatTensor of size 5]
    

    将torch张量对象转换为numpy中的数组对象:

    b = a.numpy()
    print(b)
    

    输出结果:

    [ 1.  1.  1.  1.  1.]
    

    下面查看numpy数组值是如何变化的:

    a.add_(1)
    print(a)
    print(b)
    

    输出结果:

     2
     2
     2
     2
     2
    [torch.FloatTensor of size 5]
    
    [ 2.  2.  2.  2.  2.]
    

    2、将numpy数组转换为torch张量

    下面查看修改numpy数组是如何自动改变torch张量的:

    import numpy as np
    a = np.ones(5)
    b = torch.from_numpy(a)
    np.add(a, 1, out=a)
    print(a)
    print(b)
    

    输出结果:

    [ 2.  2.  2.  2.  2.]
    
     2
     2
     2
     2
     2
    [torch.DoubleTensor of size 5]
    

    在CPU上的所有的张量,除了CharTensor之外,都支持转换成NumPy对象,也支持反向转换。

    0x03 CUDA张量

    使用.cuda函数可以将张量移到GPU上进行计算:

    # 只有当CUDA可用时才会进行下面计算
    if torch.cuda.is_available():
        x = x.cuda()
        y = y.cuda()
        x + y
    

    以上脚本的总运行时间为:0分0.132秒。
     
    本文中所使用的Python代码: tensor_tutorial.py

  • 相关阅读:
    基于alpine定制常用命令镜像
    sudo cat > EOF权限问题
    Nginx AWS ELB 域名解析后端502问题
    harbor使用aws s3存储
    Tomcat 优化和改进
    webservice 使用JaxWsDynamicClientFactory报空指针异常
    spring boot 集成 Apache CXF 调用 .NET 服务端 WebService
    eclipse launching workspace太慢的解决方法
    Remote System Explorer Operation卡死Eclipse解决方案
    同一个Tomcat 同一个端口 部署多个项目
  • 原文地址:https://www.cnblogs.com/leejack/p/8370634.html
Copyright © 2011-2022 走看看