2025年pointrcnn训练自己的模型(pointnet模型)

pointrcnn训练自己的模型(pointnet模型)svg xmlns http www w3 org 2000 svg style display none svg

大家好,我是讯享网,很高兴认识大家。



 <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> <p>本文从构建数据验证集、模型训练、模型加载和模型调参四个部分对深度学习中模型训练的全流程进行讲解。</p> 

讯享网

一个成熟合格的深度学习训练流程至少具备以下功能:在训练集上进行训练;在验证集上进行验证;模型可以保存最优的权重,并读取权重;记录下训练集和验证集的精度,便于调参。

本文CNN模型构建参考:

https://mp.weixin..com/s/JhFun5I_8Kjkbz6S4613Xw

数据及背景

构建验证集

在机器学习模型(特别是深度学习模型)的训练过程中,模型是非常容易过拟合的。深度学习模型在不断的训练过程中训练误差会逐渐降低,但测试误差的走势则不一定。

在模型的训练过程中,模型只能利用训练数据来进行训练,并不能接触到测试集上的样本,故需要构建验证数据集对模型进行验证。

过拟合与欠拟合

拟合(Fitting) :就是说这个曲线能不能很好的描述某些样本,并且有比较好的泛化能力。

过拟合(Overfitting)
:模型把数据学习的太彻底,以至于把噪声数据的特征也学习到了,这样就会导致在后期测试的时候不能够很好地识别数据,即不能正确的分类,模型泛化能力太差。

欠拟合(UnderFitting) :模型没有很好地捕捉到数据特征,不能够很好地拟合数据,或者是模型过于简单无法拟合或区分样本。

防止过拟合方法

  1. 正则化方法 。正则化方法包括L0正则、L1正则和L2正则,而正则一般是在目标函数之后加上对于的范数。但是在机器学习中一般使用L2正则。
  2. 数据增强 (Data augmentation),增大数据的训练量,还有一个原因就是我们用于训练的数据量太小导致的,训练数据占总数据的比例过小。
  3. 重新清洗数据 ,导致过拟合的一个原因也有可能是数据不纯导致的,如果出现了过拟合就需要我们重新清洗数据。
  4. 提前终止法 (Early stopping),对模型进行训练的过程即是对模型的参数进行学习更新的过程,这个参数学习的过程往往会用到一些迭代方法,如梯度下降(Gradient descent)学习算法。提前终止法便是一种迭代次数截断的方法来防止过拟合的方法,即在模型对训练数据集迭代收敛之前停止迭代来防止过拟合。
  5. 丢弃法 (Dropout)。这个方法在神经网络里面很常用。丢弃法是ImageNet中提出的一种方法,通俗一点讲就是丢弃法在训练的时候让神经元以一定的概率不工作。具体看下图:

左侧为全连接网络,右侧的网络以 0.5 的概率丢弃神经元。输出层并没有应用 Dropout

方法1:L1正则化

在原始的代价函数后面加上一个L1正则化项,即全部权重 的绝对值的和,再乘以 (这里不像L2正则化项那样,须要再乘以1/2)。

先计算导数:

上式中 表示 的符号,那么权重w的更新规则为:

比原始的更新规则多出了 这一项。

方法2:L2正则化(权重衰减)

L2正则化就是在代价函数后面再加上一个正则化项:

前一项代表原始的代价函数,后面那一项就是L2正则化项。它是这样来的:全部参数 的平方和,除以训练集的样本大小n。

能够发现L2正则化项对 b 的更新没有影响,可是对于w的更新有影响:

当然考虑到后面的导数项, 终于的值可能增大也可能减小。

另外,必须提一下,对于基于mini-batch的随机梯度下降,w和b更新的公式跟上面给出的有点不同:

对照上面参数 的更新公式。能够发现后面那一项变了,变成全部导数加和,乘以 再除以 , 是一个mini-batch中样本的个数。

在此我们仅仅是解释了L2正则化项有让 “变小”的效果,可是还没解释为什么 “变小”能够防过拟合?

这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以仅仅有系数足够大,才干保证导数值非常大。而L2正则化是通过约束參数的范数使其不要太大,所以能够在一定程度上降低过拟合情况。

方法3:数据增强(Data augmentation)

在深度学习方法中,海量的训练数据,意味着能够用更深的网络,训练出更好的模型。所以,能够在原始数据上做些改动,得到很多其它的数据,以图片数据集举例,能够做各种变换,如:

  • 将原始图片旋转一个小角度
  • 加入随机噪声
  • 一些有弹性的畸变(elastic distortions),论文《Best practices for convolutional neural networks applied to visual document analysis》对MNIST做了各种变种扩增。
  • 截取(crop)原始图片的一部分,比方DeepID中,从一副人脸图中,截取出了100个小patch作为训练数据,极大地添加了数据集。

法4:提前终止法 (Early stopping)

提前终止法的具体做法是,在每一个Epoch结束时(一个Epoch集为对所有的训练数据的一轮遍历)计算验证集的正确率,当正确率不再提高时,就停止训练。这种做法很符合直观感受,因为正确率都不再提高了,在继续训练也是无益的,只会提高训练的时间。

方法5:丢弃法(Dropout)

L1、L2正则化是通过改动代价函数来实现的,而丢弃法则是通过改动神经网络本身来实现的,它是在训练网络时用的一种技巧(trike),它的流程例如以下:

假设我们要训练上图这个网络,在训练开始时,我们随机地“删除”一部分的隐层单元,视它们为不存在。

保持输入输出层不变,如上图所示,依照BP算法更新上图神经网络中的权值(虚线连接的单元不更新,由于它们被“暂时删除”了)。

以上就是一次迭代的过程,在第二次迭代中,也用相同的方法,仅仅只是这次删除的那一部分隐层单元,跟上一次删除掉的肯定是不一样的。我们每一次迭代都是“随机”地去删掉一部分,直至训练结束。

讯享网

防止欠拟合方法

  1. 添加其他特征项 ,有时候我们模型出现欠拟合的时候是因为特征项不够导致的,可以添加其他特征项来很好地解决。例如,“组合”、“泛化”、“相关性”三类特征是特征添加的重要手段,无论在什么场景,都可以照葫芦画瓢,总会得到意想不到的效果。除上面的特征之外,“上下文特征”、“平台特征”等等,都可以作为特征添加的首选项。
  2. 添加多项式特征 ,这个在机器学习算法里面用的很普遍,例如将线性模型通过添加二次项或者三次项使模型泛化能力更强。例如上面的图片的例子。
  3. 减少正则化参数 ,正则化的目的是用来防止过拟合的,但是现在模型出现了欠拟合,则需要减少正则化参数。

数据集划分

  • 训练集(Train Set):模型用于训练和调整模型参数。
  • 验证集(Validation Set):用来验证模型精度和调整模型超参数。
  • 测试集(Test Set):验证模型的泛化能力。

因为训练集和验证集是分开的,所以模型在验证集上面的精度在一定程度上可以反映模型的泛化能力。在划分验证集的时候,需要注意验证集的分布应该与测试集尽量保持一致,不然模型在验证集上的精度就失去了指导意义。

既然验证集这么重要,那么如何划分本地验证集呢。在一些比赛中,赛题方会给定验证集;如果赛题方没有给定验证集,那么参赛选手就需要从训练集中拆分一部分得到验证集。验证集的划分有如下几种方式:

  • 留出法(Hold-Out) 直接将训练集划分成两部分,新的训练集和验证集。这种划分方式的优点是最为直接简单;缺点是只得到了一份验证集,有可能导致模型在验证集上过拟合。留出法应用场景是数据量比较大的情况。
  • 交叉验证法(Cross Validation,CV) 将训练集划分成K份,将其中的K-1份作为训练集,剩余的1份作为验证集,循环K训练。这种划分方式是所有的训练集都是验证集,最终模型验证精度是K份平均得到。这种方式的优点是验证集精度比较可靠,训练K次可以得到K个有多样性差异的模型;CV验证的缺点是需要训练K次,不适合数据量很大的情况。
  • 自助采样法(BootStrap) 通过有放回的采样方式得到新的训练集和验证集,每次的训练集和验证集都是有区别的。这种划分方式一般适用于数据量较小的情况。

这些划分方法是从数据划分方式的角度来讲的,在现有的数据比赛中一般采用留出法和交叉验证法。如果数据量比较大,留出法还是比较合适的。当然任何的验证集划分得到的验证集都是要保证训练集-
验证集-
测试集的分布一致,所以如果不管划分何种的划分方式都是需要注意的。(这里的分布一般指的是与标签相关的统计分布,如果标签是带有时序信息,则验证集和测试集的时间间隔应该保持一致。)

模型训练和验证

训练神经网络的流程

1. 好好检查数据

训练神经网络的第一步是完全不接触任何神经网络代码,而是从彻底检查数据开始。此步骤至关重要。花时间去检查数据是一件比较重要的工作。因为数据中往往可能存在异常值,而且了解它们的分布可以有利于我们找到一个更好的模型。

2. 评估框架并得到一个并不完美的baseline

此阶段的提示和技巧:


讯享网

  • 固定随机种子:始终使用固定的随机种子来确保两次运行代码时您将获得相同的结果。
  • 简化:在此阶段,请务必关闭任何数据扩充功能。数据扩充是我们稍后可能会采用的一种正则化策略,但是目前这只是引入一种错误的尝试。
  • 验证损失:验证您的损失是否从正确的损失值开始。
  • 设定一个好的初始化
  • 人类基线:监控除损失之外的指标,这些指标是人类可以解释和检查的(例如准确性)。尽可能评估自己(人类)的准确性并与之进行比较。
  • 可视化预测动态。我喜欢在培训过程中可视化固定测试批次上的模型预测。这些预测如何运动的“动力”将使您对培训的进行方式有非常好的直觉。如果网络以某种方式过度摆动,可能会感觉网络“努力”以适应您的数据,这表明不稳定。抖动量也很容易注意到非常低或非常高的学习率。

3. 过度拟合

找到一个好的模型的方法有两个阶段:首先获得一个足够大的模型以使其可以过度拟合(即专注于训练损失),然后适当地对其进行正则化(放弃一些训练损失以提高验证损失)。

此阶段的一些提示和技巧:

  • 选择模型:为了减少训练损失,您需要为数据选择合适的体系结构。
  • Adam是安全的。在设定基准的早期阶段,我喜欢以3e-4的学习率使用Adam 。以我的经验,亚当更宽容超参数,包括不良的学习速度。对于ConvNets,调整良好的SGD几乎总是比Adam稍胜一筹,但是**学习率区域要狭窄得多且针对特定问题。
  • 一次只使一个复杂化。如果您有多个信号要插入您的分类器,我建议您将它们一个接一个地插入,并每次确保获得预期的性能提升。
  • 不要相信学习率衰减的默认值。如果您要重新使用其他领域的代码,请务必小心学习率。

4. 正则化

此阶段的一些提示和技巧:

  • 获取更多数据
  • 数据扩充
  • 创意增强:如果半假数据没有做到这一点,伪造数据也可能会有所作为。人们正在寻找扩展数据集的创新方法。例如,领域随机化,模拟的使用,巧妙的混合,例如将(潜在模拟的)数据插入场景,甚至GAN。
  • 使用预训练网络
  • 坚持监督学习
  • 减小输入维数
  • 减小模型尺寸
  • 减小批量大小
  • Dropout
  • 提早停止训练。根据您测得的验证损失提前停止训练,以在模型快要过拟合的时候捕获模型。
  • 尝试更大的模型。大型模型大多数最终会过拟合,但是它们的“早期停止”性能通常会比小型模型好得多。

5. 微调

此阶段的一些提示和技巧:

  • 随机网格搜索
  • 超参数优化

6. 进一步提高精确率

  • 模型集成

本节目标是使用Pytorch来完成CNN(卷积神经网络)的训练和验证过程,CNN网络结构。需要完成的逻辑结构如下:

  • 构造训练集和验证集;
  • 每轮进行训练和验证,并根据最优验证集精度保存模型。

    train_loader = torch.utils.data.DataLoader(
    train_dataset, # 数据加载
    batch_size=10, # 批处理大小设置
    shuffle=True, # 是否进项洗牌操作
    num_workers=10, # 是否进行多进程加载数据设置
    )

    val_loader = torch.utils.data.DataLoader(
    val_dataset,
    batch_size=10,
    shuffle=False,
    num_workers=10,
    )
    model = SVHN_Model1()
    criterion = nn.CrossEntropyLoss (size_average=False) # 计算交叉熵(交叉熵损失函数
    optimizer = torch.optim.Adam(model.parameters()) # Adam优化算法
    best_loss = 1000.0
    for epoch in range(20):
    train(train_loader, model, criterion, optimizer, epoch)
    val_loss = validate(val_loader, model, criterion)

    if val_loss < best_loss:
    best_loss = val_loss
    torch.save(model.state_dict(), ‘https://blog.csdn.net/2401_/article/details/model.pt’)
    print('Epoch: ', epoch)

  • train()、validate()与predict()代码如下:
     

    模型保存与加载

在Pytorch中模型的保存和加载非常简单,比较常见的做法是保存和加载模型参数:

讯享网

模型调参

深度学习原理少但实践性非常强,基本上很多的模型的验证只能通过训练来完成。同时深度学习有众多的网络结构和超参数,因此需要反复尝试。训练深度学习模型需要GPU的硬件支持,也需要较多的训练时间,如何有效的训练深度学习模型逐渐成为了一门学问。

深度学习有众多的训练技巧,本节挑选了常见的一些技巧来讲解,并针对本次赛题进行具体分析。与传统的机器学习模型不同,深度学习模型的精度与模型的复杂度、数据量、正则化、数据扩增等因素直接相关。所以当深度学习模型处于不同的阶段(欠拟合、过拟合和完美拟合)的情况下,大家可以知道可以什么角度来继续优化模型。在参加本次比赛的过程中建议大家以如下逻辑完成:

  1. 初步构建简单的CNN模型,不用特别复杂,跑通训练、验证和预测的流程。
  2. 简单CNN模型的损失会比较大,尝试增加模型复杂度,并观察验证集精度。
  3. 在增加模型复杂度的同时增加数据扩增方法,直至验证集精度不变。

写到最后

1. 神经网络训练并不是一个十全十美的抽象

据称,训练神经网络很容易上手。许多库和框架都以显示30行奇迹片段来解决您的数据问题为荣,给人以假的印象,即这些东西是即插即用的。

 

比如说,以上代码给人一种假象,即只通过一行代码就可以完成对神经网络的训练。但事实上神经网络的训练是一件很复杂的事情。如果您坚持使用该技术而不了解其工作原理,则很可能会失败。

2. 神经网络的训练不知道怎么的就失败了

当你错误配置代码时,通常会遇到某种异常:插入了一个整数,该整数应为字符串;该函数仅需要3个参数;导入失败;该密钥不存在;两个列表中的元素数量不相等。此外,通常可以为某些功能创建单元测试。

这只是训练神经网络的开始。可能在语法上,所有内容都是正确的,但还是会训练失败,而且也很难看出来到底哪里错了。例如,也许在数据增强过程中左右翻转图像时忘记了翻转标签。网络仍然可以工作良好,因为网络可以在内部学习检测翻转的图像,然后左右翻转预测;也许由于一个错误,自回归模型意外地将它试图预测的东西作为输入;或者,尝试修剪渐变,但修剪了损失,导致在训练过程中忽略了异常示例;或者,从预先训练的检查点初始化了权重,但未使用原始均值;或者,只是搞砸了正则化强度,学习率,其衰减率,模型大小等设置。在大多数情况下,它会训练,但默默地工作会更糟。

训练神经网络的快速而暴力的方法行不通,这往往会令人感到难受。事实上,使得神经网络正常工作本身就是一件比较困难的事情,可以通过缜密的思考,提高警惕,利用可视化帮助我们训练神经网络。

今天只要你给我的文章点赞,我私藏的大模型学习资料一样免费共享给你们,来看看有哪些东西。

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【】

img

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

在这里插入图片描述

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【】

img

小讯
上一篇 2025-06-11 17:07
下一篇 2025-04-24 08:49

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/169161.html