《Pytorch神经网络高效入门教程》笔记

之前也写过pytorch入门教程的笔记,不过好久不自己动手写都有点忘了,这次这个教程讲了挺多官方教程没讲的东西,还是值得记一下


1、GPU初探

(1)将张量转移到GPU上: *.cuda()
eg. t = t.cuda()
(2)GPU只适合特定任务,比如能分解成多个小任务并行计算
另外将计算转移到GPU也有不小的开销,所以简单的任务直接用CPU完成就好了

2、Tensor初探

tensor的三个属性:
t.dtype:数据类型
t.device:设备(gpu/cpu)
t.layout:默认为strided
注意:不同类型/设备的tensor无法进行运算

3、Numpy array转换为tensor
data = np.array([1,2,3])
(1)t1 = torch.Tensor(data)               #这个为构造函数
(2)t2 = torch.tensor(data)               #工厂函数
(3)t3 = torch.as_tensor(data)            #工厂函数
(4)t4 = torch.from_numpy(data)           #工厂函数

(1)会默认把输入数据转换为float32
(2)(3)(4)则是根据输入数据的类型推断输出数据的类型(这里是int32)
当然也可以在输入时直接设置输出类型
t5 = torch.tensor(np.array([1,2,3]), dtype=torch.float64)
但构造函数不能这样设置
Note:(3)和(4)在转换时只是复制了指针,也就是共享内存,改变numpy也会改变tensor
使用哪个函数?
一、通常使用torch.tensor(),不容易出错
二、性能调优时使用torch.as_tensor()
为什么不适用torch.from_numpy()?
因为它只接收numpy数据类型,其他类型不接收

4、Reshape

(1)获取tensor的元素数量
t.numel()
(2)squeeze和unsqueeze

torch.squeeze(a)  #去掉a的所有为1的axis
torch.unsqueeze(a,2)  #在a的index=2的axis插入一个1,即增加一个维度

(3)flatten压扁
其实就是先t.reshape(1,-1),然后t.squeeze()去掉为1的轴
不过torch有实现好的:torch.flatten(t)

5、Element-wise操作

这里主要是对axis的理解比较关键

t = torch.tensor([
                  [1,1,1,1],
                  [2,2,2,2],
                  [3,3,3,3]],dtype=int32)
t.sum(dim=0)
out:tensor[6,6,6,6]

我们来看一下这个"dim=0"是什么意思?
dim=0代表以第0轴为单位进行运算
而以第0轴为单位又是什么意思呢?
就是sum变成了[0]+t[1]+t[2]或者t[0,:]+t[1,:]+t[2,:]
dim=1时,
则为t[:,0]+t[:,1]+t[:,2]+t[:,3]

Note!

运算后的维度即把这个轴去掉后的维度
eg.t.shape=[2,3,4]t.sum(dim=0).shape=[3,4]
用这种方法来推它到底是怎么运算的也可以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值