Pytorch 快速入门 :从tensorflow转Pytorch的笔记(gather的用法,待补充...)

从tensorflow转过来学习Pytorch,对比一下二者的不同:

PyTorch vs TensorFlow,哪个更适合你

为什么要转Pytorch?

更加灵活(使用tensorflow能够找到很多别人的代码,使用Pytorch更加容易实现自己的想法),支持Python化(也就是说基本可以当numpy使用)
速度更快
代码简洁容易上手(0.4版本后没有 Variable之类的定义,只有一个tensor的定义,参数requires_grad=True可以自动求微分,替代Variable)
细节上一些发现

1.以下划线结束的函数是inplace操作,会修改自身的值。

 tensorA.add_(tensorB)  # 会改变tensorA的值

  

2.tensor和numpy很方便互转且内存共享。

 numpyA = tensorA.numpy()  # Tensor -> Numpy
 tensorA  = torch.from_numpy(numpyA) # Numpy -> Tensor

  

3.只有一个元素的tensor 可以调用tensor.item()直接取元素值。

4.tensor.backward()反向传播之后,tensor.grad梯度值是累加的,在使用反向传播之前使用zero_grad()把梯度清0。

5.view()有两个作用,一是改变tensor的shape,二是让新tensor和原tensor共享内存,相当于深拷贝detach(),而普通的=赋值方法不会共享内存。

6.resize()是另一种可用来调整size的方法,但与view()不同,如果新维度超过了原维度,会自动分配新的内存空间。

7.增删维度,None类似于np.newaxis()

 tensor.unsqueeze(n) # 在第n个维度上增加1个维度
 tensor.squeeze(n) # 在第n个维度上压缩
 tensor.squeeze(1)  # 压缩所有维数为1的维度

  

8.contiguous()为tensor分配整块的内存,有些tensor并不是占用一整块内存,而是由不同的数据块组成,而tensor的view()操作依赖于内存是整块的。

9.gather() ??? ???

10.非叶子节点的梯度计算完之后即被清空,可以使用autograd.grad或hook方法获取非叶子节点的值

常用的库

神经网络

torch.nn
nn.Module
nn.functional 

nn.Sequential

  


原文:https://blog.csdn.net/qq_37717661/article/details/85790401

posted @ 2019-06-14 17:40  持剑走天涯  阅读(1926)  评论(0编辑  收藏  举报
指纹锁安装 淋浴房安装 晾衣架安装 窗帘安装 灯具安装 卫浴安装 智能锁安装 家具安装