zoukankan      html  css  js  c++  java
  • PyTorch简介

    PyTorch简介

    PyTorch 是 Torch 在 Python 上的衍生. 因为 Torch 是一个使用 Lua 语言的神经网络库,由于 PyTorch 采用了动态计算图(dynamic computational graph)结构,PyTorch 有一种独特的神经网络构建方法:使用和重放 tape recorder。而不是大多数开源框架,比如 TensorFlow、Caffe、CNTK、Theano 等采用的静态计算图。 使用 PyTorch,通过一种我们称之为「Reverse-mode auto-differentiation(反向模式自动微分)」的技术,你可以零延迟或零成本地任意改变你的网络的行为。

    torch 产生的 tensor 放在 GPU 中加速运算 (前提是你有合适的 GPU), 就像 Numpy 会把 array 放在 CPU 中加速运算

    进一步说,torch是一个支持 GPU 的 Tensor 库,如果你使用 numpy,那么你就使用过 Tensor(即 ndarray)。PyTorch 提供了支持 CPU 和 GPU 的 Tensor.

    PyTorch组成

    PyTorch由4个主要包装组成:

    1.torch:类似于Numpy的通用数组库,可以在将张量类型转换为(torch.cuda.TensorFloat)并在GPU上进行计算。

    2.torch.autograd:用于构建计算图形并自动获取渐变的包

    3.torch.nn:具有共同层和成本函数的神经网络库

    4.torch.optim:具有通用优化算法(如SGD,Adam等)的优化包

    PyTorch简单使用

    torch 做的和 numpy 有很好的兼容. 这样就能自由地转换numpy array 和 torch tensor

    #!/usr/bin/env python2
    # -*- coding: utf-8 -*-
    
    import torch
    import numpy as np
    
    np_data = np.arange(6).reshape((2, 3))
    #将numpy转换为torch tensor
    torch_data = torch.from_numpy(np_data)
    #将torch tensor转换为tensor
    tensor2array = torch_data.numpy()
    print (
        '
    numpy array:', np_data,          # [[0 1 2], [3 4 5]]
        '
    torch tensor:', torch_data,      #  0  1  2 
     3  4  5    [torch.LongTensor of size 2x3]
        '
    tensor to array:', tensor2array, # [[0 1 2], [3 4 5]]
    )

    torch做数学运算

    #计算绝对值
    data = [-1, -2, 1, 2]
    #转换成32位浮点tensor
    tensor = torch.FloatTensor(data)
    print(
        '
    abs',
        '
    numpy: ', np.abs(data),          # [1 2 1 2]
        '
    torch: ', torch.abs(tensor)      # 1 2 1 2
    )
    
    # sin   三角函数 sin
    print(
        '
    sin',
        '
    numpy: ', np.sin(data),      # [-0.84147098 -0.90929743  0.84147098  0.90929743]
        '
    torch: ', torch.sin(tensor)  # [-0.8415 -0.9093  0.8415  0.9093]
    )
    
    # mean  均值
    print(
        '
    mean',
        '
    numpy: ', np.mean(data),         # 0.0
        '
    torch: ', torch.mean(tensor)     # 0.0
    )

    torch做矩阵运算

    #矩阵运算
    #矩阵点乘
    data = [[1,2], [3,4]]
    tensor = torch.FloatTensor(data)  # 转换成32位浮点 tensor
    print(
        '
    matrix multiplication (matmul)',
        '
    numpy: ', np.matmul(data, data),     # [[7, 10], [15, 22]]
        '
    torch: ', torch.mm(tensor, tensor)   # [[7, 10], [15, 22]]
    )

    torch中的变量

    先定义一个变量

    #!/usr/bin/env python2
    # -*- coding: utf-8 -*-
    
    import torch
    from torch.autograd import Variable
    
    tensor = torch.FloatTensor([[1, 2],[3, 4]])
    #在BP的时候,pytorch是将Variable的梯度放在Variable对象中的,
    # 我们随时都可以使用Variable.grad得到对应Variable的grad。
    # 刚创建Variable的时候,它的grad属性是初始化为0.0的。
    #需要求导的话,requires_grad=True属性是必须的。
    variable = Variable(tensor, requires_grad = True)
    print tensor
    """
    output:
     1  2
     3  4
    [torch.FloatTensor of size 2x2]
    """
    #多了一个Variable containing:
    print variable
    """
    output:
    Variable containing:
     1  2
     3  4
    [torch.FloatTensor of size 2x2]
    """

    Variable 计算时, 会一步步搭建着一个庞大的系统, 叫做计算图, computational graph. 这个图是将所有的计算步骤 (节点) 都连接起来, 最后进行误差反向传递的时候, 一次性将所有 variable 里面的修改幅度 (梯度) 都计算出来

    #模拟v_out 反向误差
    # v_out = 1/4 * sum(variable*variable) 这是计算图中的 v_out 计算步骤
    # 针对于 v_out 的梯度就是, d(v_out)/d(variable) = 1/4*2*variable = variable/2
    v_out.backward()
    
    print variable.grad
    
    #获取variable的数据
    print variable
    """
    Variable containing:
     1  2
     3  4
    [torch.FloatTensor of size 2x2]
    """
    print variable.data
    """
     1  2
     3  4
    [torch.FloatTensor of size 2x2]
    """
    print variable.data.numpy()
    """
    [[ 1.  2.]
     [ 3.  4.]]
     """
  • 相关阅读:
    django自学
    Oracle
    Linux查看日志常用命令
    Appium使用
    jmeter性能测试
    数据库连接
    redis相关
    ubuntu系统软件安装以及相关命令
    LINUX远程强制重启/proc/sys/kernel/sysrq /proc/sysrq-trigger
    sqlserver查询表大小
  • 原文地址:https://www.cnblogs.com/xmeo/p/7231660.html
Copyright © 2011-2022 走看看