Pytorch学习(杂知识)

目录

Mini-batch

魔法函数

DataLoader与DataSet

transformers的简介

torchvision简介

torch.no_grad()

Softmax

ReLu

随机梯度下降(Stochastic Gradient Descent,SGD)

torch.nn.CrossEntropyLoss(),交叉损失函数

Tensor:张量

F.avg_pool2d()函数

torch.nn.MaxPool2d

torch.cat

torch.nn.Conv2d

GoogLeNet网络

一、GoogLeNet网络的背景

二、Inception模块

ResNets  残差网络


Mini-batch

        Mii-batch是一种在机器学习中常用的训练算法。它是将大的数据集分成一些小的数据集,每次只用一个小的数据集来训练模型。通常情况下,训练数据集中的数据越多,训练出的模型越准确,但是如果数据集太大,就会导致计算量过大,训练时间过长。因此,使用Mini-batch的方法可以在保证模型训练准确性的同时,降低计算时间和内存的消耗。在mini-batch中,每个小的数据集被称为一个patch,通常情况下,每个batch的大小是相同的。在训练过程中,每个batch都会被输入到模型中进行训练,模型的参数会根据每个batch的误差进行更新。这样,在训练过程中,每个batch都会为模型提供一些不同的信息,从而增强模型的泛化能力。
        使用mini-batch的方法可以在保证模型训练准确性的同时,降低计算时间和内存的消耗,同时还可以带来更好的泛化性能。因此,mini-batchi已经成为了深度学习中的一种常用的训川练算法。

        链接:https://wenku.csdn.net/answer/7e8ca99bbfd84184b4ba9957911f4ccd

魔法函数

        魔法函数指的是Python中的特殊函数,它们以双下划线开头和结尾,如__init__、__str__等。这些函数在Python内部被调用,它们可以实现一些特殊的功能,比如重载运算符、创建对象、打印对象等。 

DataLoader与DataSet

        DataLoader与DataSet是PyTorch数据读取的核心,是构建一个可迭代的数据装载器,每次执行循环的时候,就从中读取一批Batchsize大小的样本进行训练。

  • Dataset:负责可被Pytorch使用的数据集的创建
  • Dataloader:向模型中传递数据

链接:Python中的Dataset和Dataloader详解_python_脚本之家

transformers的简介

         transformers提供了数千个预先训练好的模型来执行不同模式的任务,如文本、视觉和音频。这些模型可应用于:

  • 文本:用于文本分类、信息提取、问题回答、摘要、翻译、文本生成等任务,支持100多种语言。
  • 图像:用于图像分类、对象检测和分割等任务。
  • 音频:用于语音识别和音频分类等任务。

       transformer模型还可以在几种组合模式上执行任务,例如表格问题回答、光学字符识别、从扫描文档中提取信息、视频分类和视觉问题回答。
       transformer提供了api,可以快速下载并在给定文本上使用这些预训练的模型,在您自己的数据集上对它们进行微调,然后在我们的模型中心上与社区共享。同时,每个定义架构的python模块都是完全独立的,可以进行修改以进行快速研究实验。
       transformer由三个最流行的深度学习库——Jax、PyTorch和TensorFlow——支持,并在它们之间无缝集成。在加载模型进行推理之前,先用一个模型训练它们是很简单的。您可以从模型中心直接在它们的页面上测试我们的大多数模型。我们还提供私有模型托管、版本控制和公共和私有模型的推理API。

链接:Py之transformers:transformers的简介、安装、使用方法、案例应用之详细攻略_python transformers-CSDN博客
 

torchvision简介

t        orchvision是pytorch的一个图形库,它服务于PyTorch深度学习框架的,主要用来构建计算机视觉模型。以下是torchvision的构成:

    torchvision.datasets: 一些加载数据的函数及常用的数据集接口;
    torchvision.models: 包含常用的模型结构(含预训练模型),例如AlexNet、VGG、ResNet等;
    torchvision.transforms: 常用的图片变换,例如裁剪、旋转等;
    torchvision.utils: 其他的一些有用的方法。

原文链接:torchvision详细介绍-CSDN博客

torch.no_grad()

torch.no_grad() 是 PyTorch 中的一个上下文管理器,用于在进入该上下文时禁用梯度计算。
    这在你只关心评估模型,而不是训练模型时非常有用,因为它可以显著减少内存使用并加速计算。当你在 torch.no_grad() 上下文管理器中执行张量操作时,PyTorch 不会为这些操作计算梯度。这意味着不会在 .grad 属性中累积梯度,并且操作会更快地执行。

Softmax

Softmax是一种激活函数,它可以将一个数值向量归一化为一个概率分布向量,且各个概率之和为1。Softmax可以用来作为神经网络的最后一层,用于多分类问题的输出。Softmax层常常和交叉熵损失函数一起结合使用。

对于二分类问题,我们可以使用Sigmod函数(又称Logistic函数)。将(−∞,+∞)范围内的数值映射成为一个(0,1)区间的数值,一个(0,1)区间的数值恰好可以用来表示概率。对于多分类问题,一种常用的方法是Softmax函数,它可以预测每个类别的概率。

链接:三分钟读懂Softmax函数 - 知乎 (zhihu.com)

ReLu

ReLu,全称是Rectified Linear Unit,中文名称是线性整流函数,是在神经网络中常用的激活函数。通常意义下,其指代数学中的斜坡函数,即

         引入非线性激活函数的目的是提高神经网络的非线性拟合能力,增强模型的表达能力。因此,在表诉过程中,在没有明确指明的情况下,激活函数指代非线性激活函数。经过严格的数学推导,如果网络中没有使用激活函数,每一层的节点的输入都是上层输出的线性函数,无论神经网络中的隐含层有多少,最后的输出结果都是网络输入的线性拟合,即隐含层没有发挥其作用。为此,引入非线性函数作为激活函数来提高模型的表达能力。

传送门: 谈谈神经网络中的非线性激活函数——ReLu函数

随机梯度下降(Stochastic Gradient Descent,SGD)

optim.SGD是PyTorch中的一个优化器,其实现了随机梯度下降(Stochastic Gradient Descent,SGD)算法。在深度学习中,我们通常使用优化器来更新神经网络中的参数,以使得损失函数尽可能地小。

在PyTorch中使用optim.SGD优化器,一般需要指定以下参数:

  • params:需要更新的参数,通常为模型中的权重和偏置项。
  • lr:学习率,即每次参数更新时的步长。
  • momentum:动量,用来加速模型收敛速度,避免模型陷入局部最优解。
  • dampening:动量衰减,用来控制动量的衰减速度。
  • weight_decay:权重衰减,用来防止模型过拟合,即通过对权重的L2正则化来约束模型的复杂度。
  • nesterov:是否使用Nesterov动量。

torch.nn.CrossEntropyLoss(),交叉损失函数

  1. 交叉熵损失函数会自动对输入模型的预测值进行softmax。因此在多分类问题中,如果使用nn.CrossEntropyLoss(),则预测模型的输出层无需添加softmax。
  2. nn.CrossEntropyLoss()=nn.LogSoftmax()+nn.NLLLoss()。
  3. 交叉熵损失函数用于分类任务,均方误差损失函数用于回归任务。

# Construct loss and optimizer, using PyTorch API
criterion = torch.nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)

# Training cycle: forward, backward, update
# 前馈算loss,反馈计算关于loss的梯度,更新是用梯度下降算法利用的梯度进行更新
def train(epoch):
    running_loss = 0.0
    for batch_idx, data in enumerate(train_loader, 0):
        # 获得一个批次的数据和标签
        inputs, target = data
        optimizer.zero_grad()
        
        # forward + backward + update
        outputs = model(inputs)
        loss = criterion(outputs, target)
        loss.backward()
        optimizer.step()
        running_loss += loss.item()
        if batch_idx % 300 == 299:
            print('[%d, %5d] loss: %.3f' % (epoch + 1, batch_idx + 1, running_loss / 300))
            running_loss = 0.0

 传送门:torch.nn.CrossEntropyLoss() 参数、计算过程以及及输入Tensor形状 - 知乎

Tensor:张量

# In PyTorch, Tensor is the important component in constructing dynamic computational graph
w = torch.tensor([1.0]) # w的初值为1.0
w.requires_grad = True # 需要计算梯度
# If autograd mechanics are required, the element variable requires_grad of Tensor has to be set to True.

# Tensor:张量(Tensor):是一个多维数组,它是标量、向量、矩阵的高维拓展。
# tensor即张量,它是一种数据结构,用来表示或者编码神经网络模型的输入、输出和模型参数等。

Tensor:张量(Tensor):是一个多维数组,它是标量、向量、矩阵的高维拓展。
tensor即张量,它是一种数据结构,用来表示或者编码神经网络模型的输入、输出和模型参数等。

F.avg_pool2d()函数

avg_pool2d(input, kernel_size, stride=None, padding=0, ceil_mode=False, count_include_pad=True, divisor_override=None)

执行2D平均池化操作,入参:

  • input:输入tensor, [batch_size,channels,height,width]
  • kernel_size: 池化区域尺寸,可以是一个数n,kernel=(n,n),或者形如(kh,kw)
  • stride: 池化操作的步长,标量或者(sh,sw).默认和kernel一致,这是个二维的,所以在height和width上均和kernerl一致,越界同样丢弃。
  • padding:默认是在输入input的四周补以0,可以指定为一个标量或(padh,padw)
  • ceil_mode: true(use ceil), false(use floor)
  • count_include_pad: true(计算平均数时包含补边0

pytorch中的F.avg_pool2d()平均池化操作用于二维,input是维度是4维;

pytorch中的F.avg_pool1d()平均池化操作用于一维,input的维度是三维。

torch.nn.MaxPool2d

作用:对邻域内特征点取最大,减小卷积层参数误差造成估计均值的偏移的误差,更多的保留纹理信息。

传送门:Pytorch学习笔记(四):nn.MaxPool2d()函数详解-CSDN博客

torch.cat

torch.cat(tensors, dim=0, *, out=None),也就是有两个参数,一个是要合并的张量,一个是在哪个维度上进行合并。函数将两个张量(tensor)按指定维度拼接在一起,注意:除拼接维数dim数值可不同外其余维数数值需相同,方能对齐。

dim = 0:按列对其
dim = 1:按行对其

传送门:Pytorch中torch.cat()函数解析-CSDN博客

torch.nn.Conv2d

nn.Conv2d:对由多个输入平面组成的输入信号进行二维卷积;

传送门:pytorch中的torch.nn.Conv2d()函数图文详解_python_脚本之家

GoogLeNet网络

一、GoogLeNet网络的背景

想要更好的预测效果,就要从网络深度和网络宽度两个角度出发增加网络的复杂度。

但这个思路有两个较为明显的问题:

        首先,更复杂的网络意味着更多的参数,也很容易过拟合;

        其次,更复杂的网络会消耗更多的计算资源,而且卷积核个数设计不合理,导致了卷积核中参数没有被完全利用(多数权重都趋近0)时,会造成大量计算资源的浪费。因此GoogLeNet在专注于加深网络结构的同时,引入了新的基本结构——Inception模块,以增加网络的宽度。GoogLeNet一共22层,没有全连接层,在2014年的ImageNet图像识别挑战赛中获得了冠军。

二、Inception模块

GooLeNet 的Inception模块的基本组成结构有四个:1x1卷积,3x3卷积,5x5卷积,3x3最大池化。

 传送门:GoogLeNet详解-CSDN博客

ResNets  残差网络

ResNet是在2015年有何凯明,张翔宇,任少卿,孙剑共同提出的,ResNet使用了一个新的思想,ResNet的思想是假设我们涉及一个网络层,存在最优化的网络层次,那么往往我们设计的深层次网络是有很多网络层为冗余层的。那么我们希望这些冗余层能够完成恒等映射,保证经过该恒等层的输入和输出完全相同。具体哪些层是恒等层,这个会有网络训练的时候自己判断出来。

 残差网络从一定程度上解决了模型退化问题(由于优化困难而导致,随着网络的加深,训练集的准确率反而下降了),它在一个块的输入和输出之间引入一条直接的通路,称为跳跃连接。
       跳跃连接的引入使得信息的流通更加顺畅:一是在前向传播时,将输入与输出的信息进行融合,能够更有效的利用特征;二是在反向传播时,总有一部分梯度通过跳跃连接反传到输入上,这缓解了梯度消失的问题。
【引自:《PyTorch深度学习实践9》——卷积神经网络-高级篇(Advanced-Convolution Neural Network)_advanced convolutional neural network-CSDN博客

如果我们使用标准优化算法训练一个普通网络,比如说梯度下降法,或者其它热门的优化算法。如果没有残差,没有这些捷径或者跳跃连接,凭经验你会发现随着网络深度的加深,训练错误会先减少,然后增多。而理论上,随着网络深度的加深,应该训练得越来越好才对。也就是说,理论上网络深度越深越好。但实际上,如果没有残差网络,对于一个普通网络来说,深度越深意味着用优化算法越难训练。实际上,随着网络深度的加深,训练错误会越来越多。

        但有了ResNets就不一样了,即使网络再深,训练的表现却不错,比如说训练误差减少,就算是训练深达100层的网络也不例外。有人甚至在1000多层的神经网络中做过实验,这样就让我们在训练更深网络的同时,又能保证良好的性能。也许从另外一个角度来看,随着网络越深,网络连接会变得臃肿,但是ResNet确实在训练深度网络方面非常有效。

传送门:残差网络(Residual Network)-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/410736.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

掌握C语言指针,轻松解锁代码高效性与灵活性

1. 指针与地址 1.1 概念 我们都知道计算机的数据必须存储在内存里,为了正确地访问这些数据,必须为每个数据都编上号码,就像门牌号、身份证号一样,每个编号是唯一的,根据编号可以准确地找到某个数据。而这些编号我们就…

申创贝拓电气设备邀您参观2024生物发酵展

参展企业介绍 BETTO贝拓电气成立于2017年,初期总部坐落于安徽合肥,从事工业电控机柜的设计和销售工作。2022年总部迁往上海,有了自己的制造基地,涉及制造和销售工业控制柜、操作台、IT机柜、户外机柜、人机界面、悬臂、电气安装成…

怎么把pdf转换成word?

怎么把pdf转换成word?Pdf和word在电脑上的使用非常广泛,pdf和word分别是由 Adobe和Microsoft 分别开发的电脑文件格式。PDF 文件可以在不同操作系统和设备上保持一致的显示效果,无论是在 Windows、Mac 还是移动设备上查看,都能保持…

车载测试面试:题库+项目

车载测试如何面试(面试技巧)https://blog.csdn.net/2301_79031315/article/details/136229809 入职车载测试常见面试题(附答案)https://blog.csdn.net/2301_79031315/article/details/136229946 各大车企面试题汇总(含答案&am…

基于R语言的Meta分析【全流程、不确定性分析】方法与Meta机器学习技术应用

Meta分析是针对某一科研问题,根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法,对来源不同的研究成果进行收集、合并及定量统计分析的方法,最早出现于“循证医学”,现已广泛应用于农林生态,资源环境等方面。…

tigramite教程(一)解释与假定或发现的因果模型相关的关联

文章目录 0、生成一些具有同时依赖关系的示例过程1、估计(马尔可夫等价类的)因果图2、如果马尔可夫等价类有多个成员(存在未定向的边),选择类的一个成员,这可以自动完成3、对从图中提取的因果父节点进行线性…

跨端轻量JavaScript引擎的实现与探索

一、JavaScript 1.JavaScript语言 JavaScript是ECMAScript的实现,由ECMA 39(欧洲计算机制造商协会39号技术委员会)负责制定ECMAScript标准。 ECMAScript发展史: 时间版本说明1997年7月ES1.0 发布当年7月,ECMA262 标准出台1998年6月ES2.0 发布该版本修改完全符合…

cgroup底层技术研究一、cgroup简介与cgroup命令行工具

本文参考以下文章: 58 | cgroup技术:内部创业公司应该独立核算成本 特此致谢! 一、cgroup简介 1. cgroup是什么 cgroup(Control Group)是Linux内核提供的一种机制,用于对进程或进程组进行资源限制、优先…

IDA使用-2023CICSN华中赛区pwn题逆向为例

文章目录 相关字节标识导入函数和导出函数找程序入口函数选项设置重命名CISCN2023华中赛区分区赛AWDIDA源码main 构造结构体sub_141B() 打开局部变量类型的视图增加变量类型重新定义变量类型再次设置变量类型并重新定义再次设置变量类型并重新定义再次设置变量类型并重新定义 设…

项目实战:Qt监测操作系统cpu温度v1.1.0(支持windows、linux、国产麒麟系统)

若该文为原创文章,转载请注明出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/136277231 红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结…

linux系统---nginx基础

目录 一、Nginx的概念 二、Nginx常用功能 1、HTTP(正向)代理,反向代理 1.1正向代理 1.2 反向代理 2、负载均衡 2.1 轮询法(默认方法) 2.2 weight权重模式(加权轮询) 2.3 ip_hash 3、web缓存 三、基础特性 四…

@ControllerAdvice 统一管理异常/错误

ControllerAdvice 统一管理异常/错误 文章目录 ControllerAdvice 统一管理异常/错误一、注意事项二、统一管理异常/错误的好处三、代码实现1. 普通方法2. 统一管理ControllerAdvice3. PostMan测试结果 一、注意事项 1. 如果校验注解不指定 message 属性 ,会返回默认消息, 这些…

C++之善用const修饰成员函数

C之善用const修饰成员函数 文章目录 C之善用const修饰成员函数前言1. 约束函数对成员变量的修改2. 允许 const 对象调用3. 在重载函数中提供重载决策总结 前言 ​ 在C编程中,使用const修饰成员函数是一种非常重要的技术手段,它能够提高代码的可维护性、…

Object中的hashCode()

让hashcode方法的返回值为地址 vm参数中输入-XX:UnlockExperimentalVMOptions -XX:hashCode4,如下图: 参考 搞懂JAVAObject中的hashCode()_java_脚本之家 JDK核心JAVA源码解析(9) - hashcode 方法 - 知乎

【k8s】-- 查询 pod 磁盘容量

命令:kubectl get pvc -n 你的namespace --context上下文命名 -o wide 举例:kubectl get pvc -n my-bigdata --contextprod-6 -o wide

10分钟快速开始SkyWalking结合Springboot项目

10分钟快速开始SkyWalking结合Springboot项目 实习期间,公司让我去学习一下链路追踪如何集成到Springboot项目中。 为此有两个方案: 1.opentelementryjaegerprometheus opentelementry 收集器收集线上的metrics和traces,然后发送给jaeger和p…

水资源费征收管理系统V1.1

水资源费征收管理系统 Water Resource Fee Collection And Management System 水资源费征收管理系统 Water Resource Fee Collection And Management System

MS2402隔离Σ-Δ调制器

产品简述 MS2402 是一款二阶 Σ-Δ 调制器,集成片上数字隔离器,能将模 拟输入信号转换为高速 1 位码流。调制器对输入信号连续采样,无 需外部采样保持电路。模拟信号输入满量程为 320mV ,转换后的 数字码流的最高数据速率为 1…

js 常见报错 | js 获取数据类型 | js 判断是否是数组

文章目录 js 常见报错1.1 SyntaxError(语法错误)1.2 ReferenceError(引用错误)1.3 RangeError(范围错误)1.4 TypeError(类型错误)1.5 URLError(URL错误)1.6 手…

如何用二维码高效收集信息?表单功能轻松实现

表单作为草料二维码的高级功能之一,可用于收集格式统一的数据。你可以通过组合姓名、图片、检查项等组件搭建出电子表单,关联到二维码中,扫码填写表单即可更快速、规范的收集数据。 下面为大家介绍下表单的制作教程。 1、新建表单 新建表单…