zoukankan      html  css  js  c++  java
  • 一、PyTorch 入门实战—Tensor(转)

    一、Tensor的创建和使用

    1.概念和TensorFlow的是基本一致的,只是代码编写格式的不同。我们声明一个Tensor,并打印它,例如:

    import torch
    #定义一个Tensor矩阵
    a = torch.Tensor([1, 2], [3, 4],[5, 6], [7, 8])
    print(a)
    print('{}'.format(a))

    然后会发现报以下错误:

    new() received an invalid combination of arguments - got (list, list, list, list), but expected one of: * (torch.device device) * (torch.Storage storage) * (Tensor other) * (tuple of ints size, torch.device device) * (object data, torch.device device)                      

    意思是接收到无效的参数组合。其实是少写了一对中括号,这是初学者的常用错误。

    2.改成如下形式:

    import torch
    #定义一个Tensor矩阵
    a = torch.Tensor([[1, 2], [3, 4],[5, 6], [7, 8]])
    print(a)
    print('{}'.format(a))

    结果为:

                                                   

    3.如果想查看的它的大小可以加一句话:

    import torch
    #定义一个Tensor矩阵
    a = torch.Tensor([[1, 2], [3, 4],[5, 6], [7, 8]])
    print('{}'.format(a.size()))

    结果为:

                                                           

    即4行2列的矩阵

    4.如果想生成一个全为0的矩阵,可以输入如下代码:

    import torch
    #定义一个Tensor矩阵
    a = torch.Tensor([[1, 2], [3, 4],[5, 6], [7, 8]])
    print('{}'.format(a.size()))
    b = torch.zeros((4, 2))
    print(b)

    结果为:

                                                              

    即4行2列数组元素全为0的矩阵

    5.如果想生成不同类型的数据,可以改变torch.后面函数名称,例如下面这样:

    import torch
    #定义一个Tensor矩阵
    a = torch.Tensor([[1, 2], [3, 4],[5, 6], [7, 8]])
    print('{}'.format(a))
    b = torch.zeros((4, 2))
    print(b)
    c = torch.IntTensor([[1, 2], [3, 4],[5, 6], [7, 8]])
    print(c)
    d = torch.LongTensor([[1, 2], [3, 4],[5, 6], [7, 8]])
    print(d)
    e = torch.DoubleTensor([[1, 2], [3, 4],[5, 6], [7, 8]])
    print(e)

    结果为:

                                                      

    6.如果想访问Tensor里的一个元素或者改变它,可以输入如下代码:

    print(e[1, 1])
    #改变元素值
    e[1, 1] = 3
    print(e[1, 1])

    代码变为: 

    import torch
    #定义一个Tensor矩阵
    a = torch.Tensor([[1, 2], [3, 4],[5, 6], [7, 8]])
    print('{}'.format(a))
    b = torch.zeros((4, 2))
    print(b)
    c = torch.IntTensor([[1, 2], [3, 4],[5, 6], [7, 8]])
    print(c)
    d = torch.LongTensor([[1, 2], [3, 4],[5, 6], [7, 8]])
    print(d)
    e = torch.DoubleTensor([[1, 2], [3, 4],[5, 6], [7, 8]])
    print(e)
    print(e[1, 1])
    #改变元素值
    e[1, 1] = 3
    print(e[1, 1])

    结果为:

                                                              

    说明原来4的位置数值变为了3

    7.最重要的是Tensor和Numpy之间的转换,例如我们把e变为numpy类型,添加以下代码:

    f = e.numpy()
    print(f)

    变为:

    import torch
    #定义一个Tensor矩阵
    a = torch.Tensor([[1, 2], [3, 4],[5, 6], [7, 8]])
    print('{}'.format(a))
    b = torch.zeros((4, 2))
    print(b)
    c = torch.IntTensor([[1, 2], [3, 4],[5, 6], [7, 8]])
    print(c)
    d = torch.LongTensor([[1, 2], [3, 4],[5, 6], [7, 8]])
    print(d)
    e = torch.DoubleTensor([[1, 2], [3, 4],[5, 6], [7, 8]])
    print(e)
    print(e[1, 1])
    #改变元素值
    e[1, 1] = 3
    print(e[1, 1])
    #转换为Numpy
    f = e.numpy()
    print(f)

    结果为: 

                                                               

    可以看到没有tensor()了~

    我们再把f变为tensor类型,输入以下代码:

    g = torch.from_numpy(f)
    print(g)

    变为:

    import torch
    #定义一个Tensor矩阵
    a = torch.Tensor([[1, 2], [3, 4],[5, 6], [7, 8]])
    print('{}'.format(a))
    b = torch.zeros((4, 2))
    print(b)
    c = torch.IntTensor([[1, 2], [3, 4],[5, 6], [7, 8]])
    print(c)
    d = torch.LongTensor([[1, 2], [3, 4],[5, 6], [7, 8]])
    print(d)
    e = torch.DoubleTensor([[1, 2], [3, 4],[5, 6], [7, 8]])
    print(e)
    print(e[1, 1])
    #改变元素值
    e[1, 1] = 3
    print(e[1, 1])
    #转换为Numpy
    f = e.numpy()
    print(f)
    #转换为Tensor
    g = torch.from_numpy(f)
    print(g)

    结果为:

                                                                 

    可以看到又变成了Tensor类型

    二、Tensor放到GPU上执行

    1.通过如下代码判断是否支持GPU:

    if torch.cuda.is_available():
    h = g.cuda()
    print(h)

    变为

    import torch
    #定义一个Tensor矩阵
    a = torch.Tensor([[1, 2], [3, 4],[5, 6], [7, 8]])
    print('{}'.format(a))
    b = torch.zeros((4, 2))
    print(b)
    c = torch.IntTensor([[1, 2], [3, 4],[5, 6], [7, 8]])
    print(c)
    d = torch.LongTensor([[1, 2], [3, 4],[5, 6], [7, 8]])
    print(d)
    e = torch.DoubleTensor([[1, 2], [3, 4],[5, 6], [7, 8]])
    print(e)
    print(e[1, 1])
    #改变元素值
    e[1, 1] = 3
    print(e[1, 1])
    #转换为Numpy
    f = e.numpy()
    print(f)
    #转换为Tensor
    g = torch.from_numpy(f)
    print(g)
    #将Tensor放在GPU上
    if torch.cuda.is_available():
    h = g.cuda()
    print(h)

    2.生成结果会慢一下,然后可以看到多了一个device=‘cuda:0’:

                                                 

    三、Tensor总结

    1.Tensor和Numpy都是矩阵,区别是前者可以在GPU上运行,后者只能在CPU上

    2.Tensor和Numpy互相转化很方便,类型也比较兼容

    3.Tensor可以直接通过print显示数据类型,而Numpy不可以,例如:dtype = torch.float64

  • 相关阅读:
    Spring boot unable to determine jdbc url from datasouce
    Unable to create initial connections of pool. spring boot mysql
    spring boot MySQL Public Key Retrieval is not allowed
    spring boot no identifier specified for entity
    Establishing SSL connection without server's identity verification is not recommended
    eclipse unable to start within 45 seconds
    Oracle 数据库,远程访问 ora-12541:TNS:无监听程序
    macOS 下安装tomcat
    在macOS 上添加 JAVA_HOME 环境变量
    Maven2: Missing artifact but jars are in place
  • 原文地址:https://www.cnblogs.com/chen8023miss/p/11201202.html
Copyright © 2011-2022 走看看