zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    setValue 和 setObject 的区别
    沙盒(SandBox)
    刷题篇--热题HOT 52-60
    刷题篇--热题HOT 31-40
    刷题篇--热题HOT 41-51
    8. AIO
    7. NIO与零拷贝
    6. NIO三核心(Selector)
    5. NIO三核心(Buffer、Channel)
    刷题篇--热题HOT 21-30
  • 原文地址:https://www.cnblogs.com/qbdj/p/11024580.html
Copyright © 2011-2022 走看看