[pytorch基础学习]-常见知识-(刘二大人教程)

内容主要参照b站《 《PyTorch深度学习实践》完结合集
链接: https://www.bilibili.com/video/BV1Y7411d7Ys/?spm_id_from=333.337.search-card.all.click
部分内容资料来自互联网,后续博客会不断完善知识点
补充:刘二大人内容深度不够,对于简单理解可以,但是实际操作推荐up主 `小土堆`

常见概念machine learning与算法区分维度诅咒维数映射表示学习Brief histrory of neural networkshow to develop learning感知机后向传播原子运算GOOD NEWS梯度下降算法概念介绍鞍点具体代码具体解读def gradientDef update结果展示随机梯度下降区分反向传播计算图以两层为例matrix-cook-bookChain Rule 1具体例子线性模型的计算图作业Tensors传播原理反向传播的实质具体代码线性模型常见概念模型设计权重值的确定LOSS 函数COST函数具体函数实现visdom作业处理多维特征输入sklearn简介能力要求泛化能力进度在文档中找到不同的激活函数加载数据集Dataset和DataLoaderDataSetDataloader训练的方法全部的——batch部分的——随机梯度下降数据的加载补充基本设置循环部分补充内容torch.utils.ffitorchvision.datasetstorchvision.modelsPython图像库PIL的类Image用pytorch来实现线性回归准备数据集线性单元构建网络的模板具体代码解读查看文档为什么用转置?训练部分总结

常见概念


machine learning与算法区分


其实机器学习中学的就是穷举法

机器学习过程中算法是从数据中算出来的

维度诅咒

维数越高,数据的需求越大

所以需要降维,机器学习中所需要的

维数映射

表示学习

高维数据降到低维后,还要尽量表示高维空间的信息

Brief histrory of neural networks


how to develop learning

用神经网络来表示端到端的学习方法

感知机

感知机 (perceptron)是二类分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别。

后向传播

过程

即通过正向传播传播过去( 找到那个最终的值),最后只关心求到a的导数,所以需要倒过来求
原子运算

最简本的运算,不再分解

  • 基本卷积

  • 矩阵乘法

Alnet

关键:学习一些构造模型的套路, 针对任务进行组装

GOOD NEWS


都是使用现成的框架来学习

已经提供了现成的神经网络模块

取消Visual studio

常见概念machine learning与算法区分维度诅咒维数映射表示学习Brief histrory of neural networkshow to develop learning感知机后向传播原子运算GOOD NEWS梯度下降算法概念介绍鞍点具体代码具体解读def gradientDef update结果展示随机梯度下降区分反向传播计算图以两层为例matrix-cook-bookChain Rule 1具体例子线性模型的计算图作业Tensors传播原理反向传播的实质具体代码线性模型常见概念模型设计权重值的确定LOSS 函数COST函数具体函数实现visdom作业处理多维特征输入sklearn简介能力要求泛化能力进度在文档中找到不同的激活函数加载数据集Dataset和DataLoaderDataSetDataloader训练的方法全部的——batch部分的——随机梯度下降数据的加载补充基本设置循环部分补充内容torch.utils.ffitorchvision.datasetstorchvision.modelsPython图像库PIL的类Image用pytorch来实现线性回归准备数据集线性单元构建网络的模板具体代码解读查看文档为什么用转置?训练部分总结

梯度下降算法


概念介绍


因为不知道所以开始就要使用random

穷举法

分治——互分空间去搜索

实际上神经网络中局部最优点很少

鞍点

具体代码


#两个冒号表示指数

()**2

具体解读


def gradient
Def update

结果展示

正常训练的结果应该是一条收敛的曲线

随机梯度下降


普遍使用的较少,随机梯度下降可以避免鞍点问题

derivative:导数

区分

有点像拆分组合寻找的思想

随机梯度下降中是对每一个样本的梯度进行更新,
并行化计算——只能用在普通的梯度下降
通常使用 折中——batch

将全部的数据集中随机取一个batch来优化计算

通常指mini-batch

常见概念machine learning与算法区分维度诅咒维数映射表示学习Brief histrory of neural networkshow to develop learning感知机后向传播原子运算GOOD NEWS梯度下降算法概念介绍鞍点具体代码具体解读def gradientDef update结果展示随机梯度下降区分反向传播计算图以两层为例matrix-cook-bookChain Rule 1具体例子线性模型的计算图作业Tensors传播原理反向传播的实质具体代码线性模型常见概念模型设计权重值的确定LOSS 函数COST函数具体函数实现visdom作业处理多维特征输入sklearn简介能力要求泛化能力进度在文档中找到不同的激活函数加载数据集Dataset和DataLoaderDataSetDataloader训练的方法全部的——batch部分的——随机梯度下降数据的加载补充基本设置循环部分补充内容torch.utils.ffitorchvision.datasetstorchvision.modelsPython图像库PIL的类Image用pytorch来实现线性回归准备数据集线性单元构建网络的模板具体代码解读查看文档为什么用转置?训练部分总结

反向传播


计算图


以两层为例

matrix-cook-book

Chain Rule 1


具体例子

线性模型的计算图

关于

作业


数据

推导

Tensors


看见代码知识是在构建计算图

传播原理

好想法:这里每次需要的只是w的值而不是整个网络,所以需要清零

梯度每次都储存一下,而w是张量,虽然每次循环会清空,但是它是张量(其他维数上的数据还没有清零),所以需要用到w.data.zero来完成真正的清零,

w.grad.item()是保证了拿到的只有标量,没有张量内容

实际上,loss和模型训练是分开的

反向传播的实质


  1. 先算损失LOSS

  1. 算反向传播,算法跑完

因为模型是根据loss函数来调整的,而loss函数的衡量是根据梯度来调整的
  1. 有梯度下降,做更新

具体代码


#每次计算图之后要清零backward

常见概念machine learning与算法区分维度诅咒维数映射表示学习Brief histrory of neural networkshow to develop learning感知机后向传播原子运算GOOD NEWS梯度下降算法概念介绍鞍点具体代码具体解读def gradientDef update结果展示随机梯度下降区分反向传播计算图以两层为例matrix-cook-bookChain Rule 1具体例子线性模型的计算图作业Tensors传播原理反向传播的实质具体代码线性模型常见概念模型设计权重值的确定LOSS 函数COST函数具体函数实现visdom作业处理多维特征输入sklearn简介能力要求泛化能力进度在文档中找到不同的激活函数加载数据集Dataset和DataLoaderDataSetDataloader训练的方法全部的——batch部分的——随机梯度下降数据的加载补充基本设置循环部分补充内容torch.utils.ffitorchvision.datasetstorchvision.modelsPython图像库PIL的类Image用pytorch来实现线性回归准备数据集线性单元构建网络的模板具体代码解读查看文档为什么用转置?训练部分总结

线性模型


常见概念


kaggle,

过拟合,泛化

很多比赛中训练集不完整,所以把原始的训练集再细划分,得到训练和开发集

模型设计


权重值的确定

y_hat就是y^(hat)

先随机取一个权重

LOSS 函数

loss=(y_hat-y)^2

COST函数

cost=1/N∑(y^hat-y_n)^2

具体函数实现


#从0.0到4.0的序列,步长为0.1

forwinnp.arange(0.0,4.1,0.1)

#这里分别打印来确定里面的

epoch训练的轮数来刻画数据效果

最好训练过程能实时画一些图来展示数据模型的效果,比如使用visdom

深度学习需要考虑断点重开问题,时间过长,需要定期存盘,

需要绘制3D图,直接看官网文档即可

深度
visdom

用这个代码来画图

作业

常见概念machine learning与算法区分维度诅咒维数映射表示学习Brief histrory of neural networkshow to develop learning感知机后向传播原子运算GOOD NEWS梯度下降算法概念介绍鞍点具体代码具体解读def gradientDef update结果展示随机梯度下降区分反向传播计算图以两层为例matrix-cook-bookChain Rule 1具体例子线性模型的计算图作业Tensors传播原理反向传播的实质具体代码线性模型常见概念模型设计权重值的确定LOSS 函数COST函数具体函数实现visdom作业处理多维特征输入sklearn简介能力要求泛化能力进度在文档中找到不同的激活函数加载数据集Dataset和DataLoaderDataSetDataloader训练的方法全部的——batch部分的——随机梯度下降数据的加载补充基本设置循环部分补充内容torch.utils.ffitorchvision.datasetstorchvision.modelsPython图像库PIL的类Image用pytorch来实现线性回归准备数据集线性单元构建网络的模板具体代码解读查看文档为什么用转置?训练部分总结

处理多维特征输入


sklearn简介

sci kit learn

scikit-learn是基于Python语言的机器学习库,具有:

  • 简单高效的数据分析工具

  • 可在多种环境中重复使用

  • 建立在Numpy,Scipy以及matplotlib等数据科学库之上

  • 开源且可商用的-基于BSD许可

学习能力太强会把噪声也学下来

能力要求


泛化能力

阅读文档,基本的架构理解

数据结构内容不变,但是其他东西都会变
进度

在文档中找到不同的激活函数
然后根据不同的函数进行训练评估,看哪个函数最好

加载数据集


Dataset和DataLoader


DataSet

快速找到索引

Dataloader

快速找到Mini-Batch

训练的方法

全部的——batch

计算速度

部分的——随机梯度下降

terminology:专业术语

三个概念:Epoch,batch-size,iterations

iteration*batch-size=样本总数


shuffle——随机打乱顺序

Dataset——抽象类

只能被其他方法来继承

__getitem__保证了数据可以支持索引操作

数据的加载

  1. all data
  1. 通过文件名列表来读取

spawn——产生

wrap——封装

num_works=表示读取的工作对象,并行处理

补充

The implementation of multiprocessing is different on Windows, which uses spawn instead of fork.

迭代的代码封装一下

多线程中会遇到的问题

基本设置

self.len=xy.shape[0]

#这里前面的冒号表示全部元素选择

self.x_data=torch.from_numpy(xy[:,:,,-1])

循环部分

查文档

return x,y表示返回的是元组

补充内容

处理图像视频的torchvision

transforms.Tosensor()

多个 dataloader

shuffle有时候不适用,方便前后验证——顺序对应

常见概念machine learning与算法区分维度诅咒维数映射表示学习Brief histrory of neural networkshow to develop learning感知机后向传播原子运算GOOD NEWS梯度下降算法概念介绍鞍点具体代码具体解读def gradientDef update结果展示随机梯度下降区分反向传播计算图以两层为例matrix-cook-bookChain Rule 1具体例子线性模型的计算图作业Tensors传播原理反向传播的实质具体代码线性模型常见概念模型设计权重值的确定LOSS 函数COST函数具体函数实现visdom作业处理多维特征输入sklearn简介能力要求泛化能力进度在文档中找到不同的激活函数加载数据集Dataset和DataLoaderDataSetDataloader训练的方法全部的——batch部分的——随机梯度下降数据的加载补充基本设置循环部分补充内容torch.utils.ffitorchvision.datasetstorchvision.modelsPython图像库PIL的类Image用pytorch来实现线性回归准备数据集线性单元构建网络的模板具体代码解读查看文档为什么用转置?训练部分总结

torch.utils.ffi


创建并配置一个cffi.FFI对象,用于PyTorch的扩展。

torchvision.datasets


torchvision.datasets中包含了以下数据集

  • MNIST

  • COCO(用于图像标注和目标检测)(Captioning and Detection)

  • LSUN Classification

  • ImageFolder

  • Imagenet-12

  • CIFAR10 and CIFAR100

  • STL10

torchvision.models

torchvision.models模块的 子模块中包含以下模型结构。

  • AlexNet

  • VGG

  • ResNet

  • SqueezeNet

  • DenseNet You can construct a model with random weights by calling its constructor:

Python图像库PIL的类Image

Python图像库PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了。其官方主页为:PIL

用pytorch来实现线性回归


sgd随机梯度下降

前馈,反馈,更新

准备数据集


列表

list2 = [1, 2, 3, 4, 5, 6, 7 ]

元组

tup1 = ('physics', 'chemistry', 1997, 2000)

线性单元

z=wx+b

注意是得到了拟合值之后再计算Loss函数,所以它是可以看做模块化的构造计算图

loss过程各种可能是矢量,但是loss的值最后应该是标量

构建网络的模板


无论哪种类都要从module里调用后面可以根据这个来修改

最少要实现有两函数:__init__,forward

forward:

这里面默认有了原始的值w,后面是根据算出的结果再反过来后向传播

前馈用来不断的往下计算

module构造出的自动实现了backward

可以自己封装新的module ,构造自己的计算块

具体代码解读

super——父类

调用父类的构造

#继承LinerModule里的'部分内容'

super(LinerModel.self).__init__()

#构造对象,选择torch中的linear模型(也是继承至moduel)

self.linear=torch.nn.Linear(1,1)

查看文档
文档中说明了函数的具体用法
为什么用转置?

目的就是把维度拼出来

不同地方不同的写法

bias:是否设置偏置

Python pass 语句

Python pass 是空语句,是为了保持程序结构的完整性。

可调用的类

哪个转置都不要紧

打上代码块可以起来反转译的问题

__call__函数举例

也是·magic method·
Python 类中一个非常特殊的实例方法,即 call()。该方法的功能类似于在类中重载 ()运算符,使得 类实例对象 可以像调用普通函数那样,以“对象名( )”的形式使用。
输入函数的某值,然后直接根据关键词参数来调用相关函数
在Python中的代码中经常会见到这两个词 args 和 kwargs,前面通常还会加上一个或者两个星号。其实这只是编程人员约定的变量名字,args 是 arguments 的缩写,表示位置参数;kwargs 是 keyword arguments 的缩写,表示关键字参数。这其实就是 Python 中可变参数的两种形式,并且 *args必须放在 **kwargs 的前面,因为 位置参数在关键字参数前面
不知道怎么使用不妨在编辑器中打印来调用

LOSS有很多种形式,比如在torch中有torch.nn.MSELoss

criterion=torch.nn.MSELoss

#不同的部分可以支持不同的学习率

optimizer=torch.optim.SGD(model.parameters(),lr=0.01)

SGD可以计算出很复杂参数
momentum:n. 动力;动量;冲力;势头
decay:衰减

训练部分

总结

backward之前记得要梯度清零

打印的部分比较复杂
虽然Weight只有一个值,但是它是个矩阵
需要使用Item
1*1的矩阵

https://pytorch.org/tutorials/beginner/pytorch with, examples.html

比较不同优化器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值