• 『PyTorch』第二弹_张量


    参考:http://www.jianshu.com/p/5ae644748f21#

    几个数学概念:

    标量(Scalar)是只有大小,没有方向的量,如1,2,3等

    向量(Vector)是有大小和方向的量,其实就是一串数字,如(1,2)

    矩阵(Matrix)是好几个向量拍成一排合并而成的一堆数字,如[1,2;3,4]

    其实标量,向量,矩阵它们三个也是张量,标量是零维的张量,向量是一维的张量,矩阵是二维的张量,除此之外,张量不仅可以是三维的,还可以是四维的、五维的...

    一点小注意:

    1.由于torch和numpy的特殊关系,似乎numpy中array的操作大部分可以在Tensor上实践

    2.任何可以改变tensor内容的操作都会在方法名后加一个下划线'_',如x.copt_(y)、x.t_()、x.add_(y),等等

    张量的基本操作演示:

     1 # coding=utf-8
     2 
     3 import torch
     4 
     5 
     6 # 特别注明:任何可以改变tensor内容的操作都会在方法名后加一个下划线'_'
     7 # 例如:x.copy_(y), x.t_(), 这俩都会改变x的值。
     8 
     9 
    10 '''初始化操作'''
    11 
    12 x = torch.Tensor(5,3)      # 未初始化的张量
    13 print(x)
    14 x = torch.rand(5,3)        # 随机初始化的张量
    15 print(x)
    16 print(x.size())            # 查看张量的尺寸
    17                            # 这是一个tuple
    -4.5163e+29  4.5806e-41 -4.5163e+29
     4.5806e-41 -8.3134e+23  4.5806e-41
    -8.3134e+23  4.5806e-41 -8.3134e+23
     4.5806e-41 -8.3134e+23  4.5806e-41
    -8.3134e+23  4.5806e-41 -8.3134e+23
    [torch.FloatTensor of size 5x3]
    
    
     0.3349  0.7324  0.7708
     0.2973  0.1546  0.5236
     0.2481  0.8018  0.3527
     0.2328  0.2714  0.5307
     0.3042  0.5355  0.2955
    [torch.FloatTensor of size 5x3]
    
    torch.Size([5, 3])
     1 '''加法操作'''
     2 
     3 a = torch.ones(2,2)
     4 b = torch.zeros(2,2)
     5 
     6 # 语法一
     7 print(a+b)
     8 # 语法二
     9 print(torch.add(a,b))
    10 # 语法三
    11 print(b.add_(a))
    12 # 语法三
    13 c = torch.Tensor(2,2)
    14 torch.add(a,b,out=c)
    15 print(c)
     1  1
     1  1
    [torch.FloatTensor of size 2x2]
    
    
     1  1
     1  1
    [torch.FloatTensor of size 2x2]
    
    
     1  1
     1  1
    [torch.FloatTensor of size 2x2]
    
    
     2  2
     2  2
    [torch.FloatTensor of size 2x2]
     1 '''Numpy桥'''
     2 
     3 a = torch.ones(3,2)
     4 
     5 a = torch.ones(5)
     6 b = a.numpy()     # tensor转换为array
     7 a.add_(1)
     8 print(b)          # a,b共用内存,属于浅拷贝
     9 
    10 import numpy as np
    11 
    12 a = np.ones(5)
    13 b = torch.from_numpy(a)   # array转换为tensor
    14 np.add(a,1,out=a)
    15 print(b)                  # a,b共用内存
    16 
    17 # 另外除了CharTensor之外,所有的tensor都可以在CPU运算和GPU预算之间相互转换
    18 # 使用CUDA函数来将Tensor移动到GPU上
    19 # 当CUDA可用时会进行GPU的运算
    20 x = torch.ones(2,2)
    21 y = torch.eye(2,2)
    22 if torch.cuda.is_available():
    23     x = x.cuda()
    24     y = y.cuda()
    25 print(x,y)
    26 # print(x+y)       # 我的设备没配置好会出错,不过显卡太渣,以后有服务器玩再说吧
    [ 2.  2.  2.  2.  2.]
    
     2
     2
     2
     2
     2
    [torch.DoubleTensor of size 5]
    
    
     1  1
     1  1
    [torch.cuda.FloatTensor of size 2x2 (GPU 0)]
     
     1  0
     0  1
    [torch.cuda.FloatTensor of size 2x2 (GPU 0)]
    
    
    Process finished with exit code 0
  • 相关阅读:
    python标准库学习-SimpleHTTPServer
    迁移cnblog博客
    zabbix监控使用
    20 个 OpenSSH 最佳安全实践
    编写基本的 udev 规则
    Linux.Siggen.180
    在 CentOS 7.0 上安装配置 Ceph 存储
    常用 GDB 命令中文速览
    Kubernetes TLS认证
    音乐下载api
  • 原文地址:https://www.cnblogs.com/hellcat/p/6850256.html
Copyright © 2020-2023  润新知