pytorch学习笔记(一)

pytorch学习笔记(一)

一、随便说说

学习pytorch是实验室安排的任务,当然不是很建议大家直接来学习框架,于我,虽然基础也不够牢,不过还是做了一些铺垫,像cs231n刚看完而且assignment也都做了一些和消化了大部分,也比较建议去看一看和完成一下相应的assignment吧。

cs231n

然后就是西瓜书在也看(里面的数学公式是真的多。。看的头皮发麻)不过这是一本机器学习入门很不错的一本书在此推荐
西瓜书

本人即将大三,水平很一般,不是那种大神级别的能给大家把pytorch安排的明明白白,恰恰相反,我也是刚开始看pytorch tutorials,也算是一种同步自己的学习进度并分享一些自己的收获吧,也会通过自己所学的一些东西,讲出自己对于一些模型、函数的理解,也是首次写博客,排版啥的就很一般了。

2.简单讲讲pytorch吧

pytorch是基于Python的科学计算包,教程里面给的两大特点:

1.是一种在gpu上对于numpy的取代

2.一个能提供极大灵活度和速度的深度学习平台

至于怎么配置安装pytorch,网上很多,我这里就不放教程了,gpu和cpu版本大家要注意区分

好了,就这么多

3.开始学习吧

PS:这次写可能很多和教程中的相仿,就把它当做一种翻译吧,也会讲一讲python的 一些语法吧,到了后面涉及到一些有关机器学习的知识也会再做补充

3.1 Tensors(张量)

通俗点讲,张量在这里就是n维数组的意思,

from __future__ import print_function#__future__模块,把下一个新版本的特性导入到当前版本
import torch#引入torch包,就可以用torch里面的各种函数

简单介绍一些相关函数:

x = torch.empty(5,3)#创建一个未初始化的5x3的矩阵
print(x)

输出:

tensor([[3.1351e+12, 4.5750e-41, 3.1351e+12],
        [4.5750e-41, 1.8325e-09, 3.0813e-41],
        [1.4013e-45, 0.0000e+00, 1.8326e-09],
        [3.0813e-41, 1.7862e-09, 3.0813e-41],
        [1.7862e-09, 3.0813e-41, 0.0000e+00]])
x = torch.rand(5,3)#创建一个随机初始化的5x3矩阵
print(x)

输出:

tensor([[0.0123, 0.4279, 0.5089],
        [0.9925, 0.0714, 0.1149],
        [0.7636, 0.2003, 0.1347],
        [0.6978, 0.3093, 0.2787],
        [0.1154, 0.0255, 0.7935]])

这些函数都比较基础,不每个都拿出来说了,每个种类挑几个吧

下面部分函数不展示输出结果了

torch.add(x,y)#x+y
y.add_(x)#y+=x,任何操作带有下划线'_',那么前面的变量就会被取代,如例中y
print(x[:,1])#打印x矩阵中第二列所有元素,注意大部分语言中都是从0开的

基本操作就说这么多,如果还想看更多的函数,去文档里面看

3.2 Autograde

所有pytorch中神经网络的核心就是autograd包,先来简单看看。

1.Tensor

​ .torch.tensor是这个包的核心类,如果把.requires_grad属性设置为True,它就会跟踪这上面的所有操作,当你完成了操作你可以调用.backward()就会自动计算所有的梯度(梯度是计算神经网络中必不可少的环节,一般会用梯度下降算法来更新权值和减少损失增加预测的准确度),这个张量的梯度会被累积在.grad属性中。

​ .detach()可以停止张量跟踪历史记录,把张量和计算历史分开并且能阻止未来的计算被追踪

​ 代码块with torch.no_grad():可以保护追踪的历史和使用过的记忆,这个代码块适用于我们把.requires_grad属性设置为True但我们不需要梯度的情况

import torch
x=torch.ones(2,2,requires_grad=True)#创建一个2x2单位矩阵,并设置.requires_grad属性设置为True
y = x+2
print(y)
z = y*y*3#*在这里相当于矩阵中的点乘,即相应元素相乘,而这个3是自动填充扩展成与y规格一样的全3矩阵
out = z.mean()#求z矩阵的均值
print(z,out)

输出

tensor([[3., 3.],
        [3., 3.]], grad_fn=<AddBackward>)

tensor([[27., 27.],
        [27., 27.]], grad_fn=<MulBackward>) tensor(27., grad_fn=<MeanBackward1>)

我们可以发现输出多了一个grad_fn属性,这个属性是表明这个矩阵是通过什么方式产生的,比如y矩阵就是通过加法运算,z通过乘法运算,out通过求均值运算,如果一个矩阵是由人创建的,则grad_fn is none

2.Gradients

out已经是一个标量了,现在开始进行反向传播看看梯度是怎么计算的吧

>>> out.backward()
>>> print(x.grad)#打印out关于x的梯度
tensor([[4.5000, 4.5000],
        [4.5000, 4.5000]])

我们来看看怎么计算得到的,根据前面的公式,我们可以知道

out=14izi,zi=3(xi+2)2,outx=32(xi+2)outxx=1=4.5 o u t = 1 4 ∑ i z i , z i = 3 ( x i + 2 ) 2 , 因 此 ∂ o u t ∂ x = 3 2 ( x i + 2 ) , 则 ∂ o u t ∂ x | x = 1 = 4.5

此外,除了这样直接的计算,还可以用cs231n中提到的链式求导法则,一步步回退到每一步的梯度,这样会更直观

4.

第一次写,先写这么多吧,下次开始看看一些神经网络初级

### PyTorch 学习笔记概述 李毅编写的《PyTorch学习笔记》是份详尽的学习指南,旨在帮助读者掌握深度学习框架PyTorch的核心概念和技术。这份笔记不仅涵盖了基础理论知识,还提供了大量实践案例和代码实现。 #### 主要内容结构 1. **环境搭建** 安装配置PyTorch运行所需的软件环境,包括Python版本的选择、CUDA支持以及Anaconda的使用方法[^2]。 2. **张量操作** 解释了如何创建、转换和处理多维数组(即张量),这是构建神经网络模型的基础构件之[^3]. 3. **自动求导机制** 描述了Autograd模块的工作原理及其在反向传播算法中的应用,使用户能够轻松定义复杂的计算图并高效训练模型[^4]. 4. **优化器与损失函数** 探讨了几种常用的梯度下降变体(SGD, Adam等)及相应的损失衡量标准(MSE Loss, CrossEntropyLoss等),这些组件对于调整权重参数至关重要[^5]. 5. **数据加载与预处理** 展示了Dataset类和DataLoader类的功能特性,它们可以简化大规模图像分类任务的数据读取流程;同时也介绍了常见的图片增强技术来扩充样本集规模[^6]. 6. **卷积神经网络(CNN)** 结合具体实例深入剖析CNN架构设计思路,如LeNet,VGG,resnet系列,并给出完整的项目源码供参考学习[^7]. 7. **循环神经网络(RNN/LSTM/GRU)** 阐述时间序列预测场景下RNN家族成员的特点优势,通过手写字符识别实验验证其有效性[^8]. 8. **迁移学习实战演练** 利用预训练好的大型模型作为特征提取器,在新领域内快速建立高性能的应用程序,减少重复劳动成本的同时提高了泛化能力[^9]. 9. **分布式训练入门指导** 当面对超大数据集时,单机难以满足需求,此时可借助于torch.distributed包来进行集群式的协同工作模式探索[^10]. ```python import torch from torchvision import datasets, transforms transform = transforms.Compose([transforms.ToTensor()]) train_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform) train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=64, shuffle=True) for images, labels in train_loader: print(images.shape) break ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值