pytorch安装以及前置知识

这篇博客介绍了PyTorch的优势,如清晰的模型结构、丰富的社区和扩展库如PyTorch Lightning。重点讲解了PyTorch的安装,推荐使用PyCharm专业版而非Anaconda。此外,文章详细阐述了张量的共享内存特性、Autograd自动微分机制,包括如何计算梯度并清零,以及在特定情况下如何控制梯度计算。
摘要由CSDN通过智能技术生成

pytorch 安装

pytorch 为什么好呢,我个人感觉可能是它比较清晰的model,dataset,以及一套平白的训练流程,还有他的比较丰富论坛,扩展库例如说pytorch Lighting这样的库比较有意思(有点类似于简化训练流程,就像tensorflow的keras)。

安装

个人比较喜欢用专业版的pycahrm(IDE颜粉),anaconda过于臃肿了(miniconda还不错)

##安装python后下载pytorch
pip install torch

pytorch 一些前置知识(个人认为要注意的点)

  • 共享内存

    import torch
    x = torch.rand(4,3)
    # 取第二列
    print(x[:, 1]) 
    
    y = x[0,:]
    y += 1
    print(y)
    print(x[0, :]) # 源tensor也被改了了
    

    结果会像下面这样

    tensor([-0.0720,  0.0666,  1.0336, -0.6965])
    
    tensor([3.7311, 0.9280, 1.2497])
    tensor([3.7311, 0.9280, 1.2497])
    

    再就是torch.view 方法改变张量的的形状,但是依旧共享内存

    torch.reshape则不会出现这种情况

  • Autograd

    torch.tensor 非常强大,每个tensor都有.grad_fn属性,记录了完整的计算历史

    当你计算定义x时 就像这样

    x = torch.randn(3,3,requires_grad=True)##默认requires_grad属性为False
    
    y = x**2
    
    z = y*y*5
    
    out = z.mean()
    ##此后经过计算的任意一个变量都将携带.grad_fn 属性
    

    计算梯度

    out.backward()##求导过程
    x.grad##计算梯度
    

    梯度就是雅可比矩阵,再就是涉及到链式法则

    注意:grad是累加的,所以当我们更新参数时需要计算一次梯度就将梯度清0,在反向传播之前

    x.grad.data.zero_()
    out.backward()
    x.grad
    

    example:

    out2 = x.sum()
    out2.backward()
    print(x.grad)
    
    out3 = x.sum()
    x.grad.data.zero_()
    out3.backward()
    print(x.grad)
    
    ##ouput
    tensor([[ 5.7165, -0.0604,  1.0144],
            [-1.1827, -9.2717,  0.9914],
            [ 1.0796,  1.0057,  0.9915]])
    tensor([[1., 1., 1.],
            [1., 1., 1.],
            [1., 1., 1.]])
    

    如果想要只有单单x的值,而将此算进grad图这样

    x.data
    

    就OK了

    计算时,不想要梯度参与(valid时)

    with torch.no_grad():
        print((x ** 2).requires_grad)
    

    计算时,不想要梯度参与(valid时)

    with torch.no_grad():
        print((x ** 2).requires_grad)
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值