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

  • 相关阅读:
    mysql 清空数据
    centos 7 安装搜狗输入法
    【分布式】分布式事务解决方案
    【Spring】事务的实现方式
    【Maven】 (请使用 -source 8 或更高版本以启用 lambda 表达式)
    【Redis】DENIED Redis is running in protected mode
    【Shiro】调用doGetAuthenticationInfo进行认证成功之后,isAuthenticated是false的问题。
    【线程池】ExecutorService与quartz搭配出现的问题
    【jenkins】jenkins执行nohup java报错
    【MySQL】mac环境下使用navicat premium连接mysql乱码问题
  • 原文地址:https://www.cnblogs.com/chen8023miss/p/11201202.html
Copyright © 2011-2022 走看看