pytorch学习基础1——张量的创建与基础操作

一思维导图

tensor的操作

元组和列表

定义一个普通列表,用中括号表示;

listvar = [111,3,13,True,3+4j,"abc"]print (listvar,type(listvar))

列表的特点:可获取,可修改,有序

定义一个普通元组

tuplevar = (False,3+4j,“aaa”,456)

元组特点:可获取、不可修改、有序

综上来看,列表和元组存储的数据类型都是多种多样的,最大的区别就是列表创建完成之后可以修改,而元组一旦创建之后不可修改(但是两个元组之间可以连接)。

后面我们将看到张量的很多操作,其参数是以元组或者列表传递的。

张量Tensor的定义与共性

张量在形式上就是多维数组,例如标量就是0维张量,向量就是一维张量,矩阵就是二维张量,而三维张量就可以想象RGB图片,每个channel是一个二维的矩阵,共有三个channel,还可以考虑更多。

在进行张量的各种操作时,需要牢牢掌握张量的两个特性,一是维度dimension(dim),从0开始,在代码中,每一个括号代表一个维度,深度学习中一般会有3-4个维度(batch_size,channel,width,height),;形状shape,这里是指每个维度的数值大小。举个例子来说,输出张量a的形状为(1,2,3,4),则该张量有4维,第0,1,2,3维的形状大小分别为1,2,3,4.特别注意这两个特性,因为张量的所有操作都是针对这两个特性的。

在调用张量api操作时往往有两种形式,一是a.api_name(arg),二是api_name(a,arg)

在代码中创建张量Tensor数据类型时,除了封装张量本身的数据data外,还会附加张量的一些性质和操作,例如数据的梯度(grad),创建tensor的函数(grad_fun,是求导的关键),是否为叶子节点(is_leaf),是否需要梯度(require_grad)。这部分主要涉及到梯度和损失函数,后面再用专题介绍。

张量tensor创建

首先来谈一下张量的创建,创建的本质是有2大类,一是由现有的数据直接转化而来,称为转化法;二是利用各种api函数传入想要创建张量的维度和形状,称为api法。

转化法torch.tensor()和torch.from_numpy

转化法是从现有的数据转化而来,现有的数据从哪里来呢?

(1)tensor()括号里的数据可以是列表list(以“[]”表示),即需要什么手动写什么,很少用;

(2)也可以是numpy,即先用numpy创建一个numpy,然后直接导入(如下);

   torch.tensor([1]) 

  

    arr = np.array([[1, 2, 3], [4, 5, 6]])

    t = torch.tensor(arr, device='cuda')

值得注意的点:

(1)注意数据类型,有时候需要在数字后面加“.”表示float,因为求导时候需要float类型;

(2)可以添加device=’cuda’获得加速。

上述从numpy导入的数据是不共享内存的,而还有一种导入方法:torch.from_numpy创建的tensor和原来的numpy共享内存,也即是说修改tensor就会修改原来的numpy。如下

    arr = np.array([[1, 2, 3], [4, 5, 6]])

    t = torch.from_numpy(arr)

      # arr[0, 0] = 0

     t[0, 0] = -1

Api法

特殊数字torch.zeros()/ones()/eye()/full()

此类方法的共性就是利用给定的api函数,如zeros,ones,eyes,full,然后在参数里指定想要创建的张量的形状(用元组表示),即可完成创建。

# 通过torch.zeros创建张量

out_t = torch.tensor([1])

#t=torch.zeros((3,3))

        t = torch.zeros((3, 3), out=out_t)

值得注意的点:

(1)也可以先创建一个tensor,然后在zeros函数的out接收创建的zeros,二者的size可以不一样,创建完成后二者一致。

(2)还可以torch.ones

(3)全1张量还可以用full函数

    t = torch.full((3, 3), 1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值