pytorch学习笔记6--过拟合,交叉验证,正则化

3D机器学习(9):过拟合、Train-Val-Test-交叉验证、防止过拟合、正则化regularization 欠拟合:模型复杂度不够。比如二次方的函数只用一次方拟合。 过拟合:模型复杂度太高,因此没有放过每一个点包括噪声点。因此会导时训练时效果很好,但是试验集时效果很差。 现实中一般都是overfitted的。因为,计算机太强了。 如何检测overfitted?目标函数:训练集表现好,测试集表现差。 Train_loader用于储存训练数据 Test_loader或者validatio... 阅读详情

过拟合

过拟合、欠拟合
交叉验证
regularization
  1. occam’s razor
    1. more things should not be used than are necessary
  2. reduce overfitting
    1. more data
    2. constraint model complexity
      1. shallow
      2. regularization
        1. J ( θ ) = − 1 m ∑ i = 1 m [ y i l n y 1 + ( 1 − y i ) l n ( 1 − y i ) ] + λ ∑ i = 1 n ∣ θ i ∣ J(\theta) = - \frac{1}{m} \sum^m_{i=1} [y_iln y_1 +(1-y_i)ln(1-y_i)]+\lambda \sum^n_{i=1} |\theta_i| J(θ)=−m1​i=1∑m​[yi​lny1​+(1−yi​)ln(1−yi​)]+λi=1∑n​∣θi​∣
        2. J ( W ; X , y ) + 1 / 2 λ ∗ ∣ ∣ W ∣ ∣ 2 J(W;X,y) + 1/2 \lambda * ||W||^2 J(W;X,y)+1/2λ∗∣∣W∣∣2
        3. enforce weights close to 0
    3. dropout
    4. data argumentation
    5. early stopping

L2-regularization

device = torch.device('cuda:0,1')
net = MLP().to(device)
# weight_decay=0.01 即 lambda=0.01
optimizer = optim.SGD(net.parameters(), lr= learning_rate, weight_decay=0.01)

L1-regularization

regularization_loss = 0
for param in model.parameters():
    regularization_loss += torch.sum(torch.abs(param))
    
classify_loss = criteon(logits,target)
loss = classify_loss + 0.01 * regularization_loss

optimizer.zero_grad()
loss.backward()
optimizer.step()
动量与学习率衰减
dropout ,early stop
  1. early stop
    1. validation set to select parameters
    2. monitor validation performance
    3. stop at the highest val perf
  2. dorpout
    1. learning less to learn better
    2. each connection has p=[0,1] to lose
    3. 在这里插入图片描述
      dorpout
net_dropped = torch.nn.Sequential(
    torch.nn.Linear(784,200)
    torch.nn.Dropout(0.5)
    torch.nn.ReLU()
    torch.nn.Linear(200,200)
    torch.nn.Dropout(0.5)
    torch.nn.ReLU()
    torch.nn.Linear(200,10)
)

卷积神经网络

resnet densenet

  1. filter = kernel = weight

resnet
在这里插入图片描述

class ResBlk(nn.Module):
    def __init__(self,ch_in,ch_out):
        self.conv1 = nn.Conv2d(ch_in,ch_out,kernel_size=3,stride=1,padding=1)
        self.bn1 = nn.BatchNorm2d(ch_out)
        self.conv2 = nn.Conv2d(ch_out,ch_out,kernel_size=3,stride=1,padding=1)
        self.bn2 = nn.BatchNorm2d(ch_out)
        
        self.extra = nn.Sequential()
        if ch_out != ch_in:
            self.extra = nn.Sequential(
                    nn.Conv2d(ch_in,ch_out,kernel_size=1,stride=1),
                nn.BatchNorm2d(ch_out)
            )
            
    def forward(self,x):
        out = F.relu(self.bn1(self.conv1(x)))
        out = self.bn2(self.conv2(out))
        out = self.extra(x) + out
        return out
        

DenseNet
[外链图片转存失败(img-GUHaiX7y-1563931748673)(evernotecid://81F77541-86B7-45D2-9235-B4CFA95FC507/wwwevernotecom/147511744/ENResource/p1125)]

nn.Module

使用nn.Module的好处

  1. 提供了大量的模块
    • Linear
    • ReLU
    • Sigmoid
    • Conv2d
    • ConvTransposed2d
    • Dropout
    • etc.
  2. 容器(Container):nn.Sequential()
  3. parameters ,易于管理参数
    1. eg: optimizer = optim.SGD(net.parameters(),lr=le-3)
  4. modules:对类内部module也进行了管理
    • modules:all nodes
    • children(直接结点):direct children
  5. to(device)
    1. 对于一个tensor a, 需要写成 a = a.to(device)
    2. 对于一个网络net, 可以直接写成 net.to(device)
  6. save and load

device = torch.device('cuda')
net = Net()
net.to(device)
net.load_state_dict(torch.load('ckpt.mdl'))
# train ...
torch.save(net.state_dict(),'ckpt.mdl')

  1. train/test

    1. net.train()
    2. net.eval()
  2. implement own layer (只有class才能写到Sequential里面去)

class Flatten(nn.Module):
    def __init__(self):
        super(Flatten,self).__init__()
    def forward(self,input):
        return input.view(input.size(0),-1)
        
class TestNet(nn.Module):
    def __init__(self):
        super(TestNet,self).__init__()
        self.net = nn.Sequential(
        nn.Conv2d(1,16,stride=1,padding=1,)
        nn.MaxPool2d(2,2),
        Flatten(),
        nn.Linear(1*14*14,10)
        )
    def forward(self,x):
        return self.net(x)

class MyLinear(nn.Module):
    def __init__(self,inp,outp):
        super(MyLinear,self).__init__()
        # nn.Parameter 会把tensor加入到网络的parameter中取管理,并且在优化器中进行优化
        self.w = nn.Parameter(torch.randn(outp,inp))
        self.b = nn.Parameter(torch.randn(outp))
        
    def forward(self,x):
        x = x@self.w.t() + self.b
        return x

数据增强

  1. data argumentation
    1. flip

      1. 在这里插入图片描述
      2. transforms.RandomHorizontalFlip()
      3. transforms.RandomVerticalFlip()
    2. rotate

      1. 在这里插入图片描述
      2. transforms.RandomRotation(15) # -15度~15度之间的一个角度
      3. transforms.RandomRotation([90,180,270]) # 从90,180,270度三个中随机的挑一个进行旋转
    3. scale

      1. 在这里插入图片描述
      2. transforms.Resize([32,32])
    4. crop part

      1. [外链图片转存失败(img-6ryu5dDJ-1563931748674)(evernotecid://81F77541-86B7-45D2-9235-B4CFA95FC507/wwwevernotecom/147511744/ENResource/p1129)]
      2. transforms.RandomCrop([28,28])
    5. noise

      1. 在这里插入图片描述
    6. gan

  2. data argumentation will help,but not too much

实战

lenet5

import torchfrom torch
import nnfrom  torch.nn 
import functional as F
class Lenet5(nn.Module):
    def __init__(self):
        super(Lenet5,self).__init__()
        self.conv_unit = nn.Sequential(
            nn.Conv2d(3,6,kernel_size=5,stride=1,padding=0),           
            nn.AvgPool2d(kernel_size=2,stride=2,padding=0),            
            nn.Conv2d(6,16,kernel_size=5,stride=1,padding=0),           
            nn.AvgPool2d(kernel_size=2,stride=2,padding=0),
            ) 
                
        # flatten
        # fc unit
        self.fc_unit = nn.Sequential(
            nn.Linear(16 * 5* 5,120),            
            nn.ReLU(),            
            nn.Linear(120,84),            
            nn.ReLU(),            
            nn.Linear(84,10)        
         )        
        # use Cross Entropy Loss        
        # Cross Entropy Loss 包含了softmax操作       
        self.criteon = nn.CrossEntropyLoss()
 def forward(self, x):
     '''       
    :param x: [b,3,32,32]        
    :return:        
    '''        
    batchse = x.size(0)        
    # [b,3,32,32] => [b,16,5,5]        
    x = self.conv_unit(x)        
    # [b,16,5,5] => [b,16*5*5]        
    x = x.view(batchse,16*5*5)        
    # [b, 16*5*5] => [b,10]        
    logits = self.fc_unit(x)        
    # pred = F.softmax(logits,dim=1)        
    # 因为Corss Entropy Loss 包含softmax操作,所以不需要softmax了        
    # loss = self.criteon(logits,target)        
    return logits
def main():    
    net = Lenet5()    
    tmp = torch.randn(2,3,32,32)    
    out = net(tmp)    
    print('conv out:',out.shape)
    
if __name__ == '__main__':   
    main()


:conv out: torch.Size([2, 10])
import torch
from torch.utils.data 
import DataLoader
from torchvision import datasets
from torchvision import transforms

def main():
    batchsz = 32    
    # 每次只加载一张图片    
    cifar_train = datasets.CIFAR10('cifar',True, transform=transforms.Compose([
        transforms.Resize((32,32)),
        transforms.ToTensor()    
        ]),download=True)    
        # 加载多张图片    
        cifar_train = DataLoader(cifar_train,batch_size=batchsz,shuffle=True)
        cifar_test = datasets.CIFAR10('cifar',False,transform=transforms.Compose([
            transforms.Resize((32,32)),
            transforms.ToTensor()    
            ]),download=True)   
        cifar_test = DataLoader(cifar_test,batch_size=batchsz,shuffle=True)
        x,label = iter(cifar_train).next()    
        
        print('x:',x.shape,'label:',label.shape)
        device = torch.device('cuda')
        model = Lenet5().to(device)
        criteon = nn.CrossEntropyLoss()
        optimizer = optim.Adam(model.parameters(),lr=1e-3)
        # train
        model.train()
        for epoch in range(1000):
            for batchidx, (x,label) in enumerate(cifar_train):
                x,label = x.to(device),label.to(device)        
                logits = model(x)
                loss = criteon(logits,label)
                # backward()        
                optimizer.zero_grad() # 每次会把梯度累加,所以需要清零        
                loss.backward() # 计算梯度,累加       
                optimizer.step() # 更新梯度到weight  
                
                
            print(epoch,loss.item())
            
            # test
            model.eval()
            with torch.no_grad(): 
                total_correct = 0  
                total_num = 0   
                for x, label in cifar_test:    
                    x,label = x.to(device),label.to(device)       
                    logits = model(x) 
                    pred = logits.argmax(dim=1)       
                    total_correct +=
                    torch.eq(pred,label).float().sum().item()  
                    total_num += x.size(0) 
                    acc = total_correct / total_num 
                print(epoch,acc)

if __name__ == '__main__':
    main()
    

resnet


import torchfrom torch
import nnfrom torch.nn
import functional as F
class ResBlk(nn.Module):
'''    resnet block    '''  
    def __init__(self,ch_in,ch_out):
        '''       
        :param ch_in:        
        :param ch_out:   
        '''        
        super(ResBlk,self).__init__()       
        self.conv1 = nn.Conv2d(ch_in,ch_out,kernel_size=3,stride=3,padding=1) 
        self.bn1 = nn.BatchNorm2d(ch_out)  
        self.conv2 = nn.Conv2d(ch_out,ch_out,kernel_size=3,stride=1,padding=1)  
        self.bn2 = nn.BatchNorm2d(ch_out)    
        self.extra = nn.Sequential()       
        if ch_out != ch_in:     
            # [b,ch_in,h,w] => [b,ch_out,h,w]      
            self.extra = nn.Sequential( 
            nn.Conv2d(ch_in,ch_out,kernel_size=1,stride=1),       
            nn.BatchNorm2d(ch_out)        
            )  

    def forward(self, x):     
        out = F.relu(self.bn1(self.conv1(x)))     
        out = self.bn2(self.conv2(out))    
        # short cut      
        # extra module: [b,ch_in,h,w] => [b,ch_out,h,w]      
        # element-wise add    
        out = self.extra(x) + out   
        return out
    
class ResNet18(nn.Module):
    def __init__(self):      
        super(ResNet18,self).__init__()     
        self.conv1 = nn.Sequential(  
            nn.Conv2d(3,64,kernel_size=2,stride=1,padding=1),    
            nn.BatchNorm2d(64)    
        )      
        # followed 4 blocks     
        # [b,64,h,w] => [b,128,h,w]  
        self.blk1 = ResNet18(64,128)  
        # [b,128,h,w] => [b,256,h,w]   
        self.blk2 = ResNet18(128,256)  
        # [b,256,h,w] => [b,512,h,w]   
        self.blk3 = ResNet18(256,512)    
        # [b,512,h,w] => [b,1024,h,w]     
        self.blk4 = ResNet18(512,1024)    
        self.outlayer = nn.Linear(512*h*w,10)    
        
    def forward(self, x): 
        '''       
        :param x:   
        :return:       
        '''       
        x =F.relu(self.conv1(x))     
        x = self.blk1(x)    
        x = self.blk2(x)     
        x = self.blk3(x)      
        x = self.blk4(x)      
        x = x.view(x.size(0),-1)   
        x = self.outlayer(x)      
        return x


pytorch-过拟合、欠拟合及其解决方案 过拟合、欠拟合及其解决方案 过拟合、欠拟合的概念 权重衰减 丢弃法 模型选择、过拟合和欠拟合 训练误差和泛化误差 在解释上述现象之前,我们需要区分训练误差(training error)和泛化误差(generalization error)。通俗来讲,前者指模型在训练数据集上表现出的误差,后者指模型在任意一个测试数据样本上表现出的误差的期望,并常常通过测试数据集上的误差来近似。计算训练误差和泛... 阅读详情

相关推荐

PyTorch深度学习实战(10)——过拟合及其解决方法

过拟合是指机器学习模型在训练集上表现很好,但在测试集或未见过的数据上表现较差的现象。过拟合是由于模型在训练过程中过度拟合了训练数据的特点和噪声,导致了对训练样本的过度依赖和泛化能力不足。为了解决过拟合问题,选择适当的方法需要对具体问题和数据进行分析,并在模型构建和调优过程中进行实验和验证。在实践中,通常需要权衡模型的复杂度和泛化能力,以获得更好的结果。

盼小辉丶的博客 1万+

【深度学习实验】网络优化与正则化(四):参数初始化及其Pytorch实现——基于固定方差的初始化(高斯、均匀分布),基于方差缩放的初始化(Xavier、He),正交初始化

本文介绍了神经网络优化——参数初始化方法,包括基于固定方差的参数初始化(高斯、均匀分布),基于方差缩放的参数初始化(Xavier、He),正交初始化等

天地玄黄 魑魅魍魉 风花雪月 商角徵羽 1376

mysql笔记:23. 在Mac上安装与卸载MySQL

MySQL对Mac电脑的适配十分强大,再加上Mac本身就是Unix操作系统演化而来的,所以在Mac上安装MySQL的方式有多种。常见的方法有如下三种:DMG、brew、TAR。介绍这些方法前,我们先了解下MySQL安装文件的下载。

斌斌(Java) 2250

pytorch进阶学习(六):如何对训练好的模型进行优化、验证并且对训练过程进行准确率、损失值等的可视化,新手友好超详细记录

推荐与上一节搭配食用~

CV在读 8801

【线粒体基因组数据提交实战】从注释校验到GenBank批量入库的避坑指南

本文详细介绍了线粒体基因组数据从注释校验到GenBank批量上传的全流程避坑指南。重点解析了GB2sequin工具的正确使用方法、TBL注释文件的精修技巧,以及BankIt平台提交的隐藏要点,帮助科研人员高效完成NCBI数据提交,特别适合需要批量上传线粒体基因组数据的研究者。

weixin_28726671的博客 444

RealSense D435i深度相机实战:从像素坐标到三维空间的精准映射(Python实现)

本文详细介绍了使用RealSense D435i深度相机实现从二维像素坐标到三维空间坐标精准映射的两种Python实战方法:深度图反投影法与点云直接查找法。文章涵盖环境搭建、相机对齐、代码实现、性能对比及与YOLO等检测模型结合的进阶应用,并提供了关键的避坑指南和参数调优建议,帮助开发者在机器人、三维重建等项目中高效应用。

weixin_29291573的博客 382

深度学习中的Dropout正则化:原理、代码实现与实际应用——pytorch框架下如何使用dropout正则化

定义一个带有 dropout 正则化的简单神经网络self.dropout1 = nn.Dropout(0.5) # 添加50%的dropoutself.dropout2 = nn.Dropout(0.3) # 添加30%的dropoutreturn x# 创建模型,定义损失函数和优化器。

weixin_54703767的博客 1519

开源Agent Skill让AI画图不再翻车:从数据到专业图表全流程

在人工智能与数据可视化交叉领域,让模型直接生成图表往往伴随字体乱码、坐标轴密集、配色失调等高频问题。Agent Skill作为一种可复用的能力封装机制,将专业绘图流程固化为标准化操作手册,从数据特征识别、图表类型决策到代码生成与渲染校验形成完整闭环。它不再依赖临时提示词的一次性发挥,而是让AI按领域专家的思维执行任务,显著提升出图质量与稳定性。这种能力在数据分析报告、运营日报、论文插图等场景具有广泛实用价值,尤其适用于需要快速产出规范化图表的工作流。本文即从这一技术范式出发,介绍一个GitHub上获得2.5

weixin_33851429的博客 973

一篇文章让你实现PYTHON手写神经网络+优化+正则化+梯度检验

文章目录完整神经网络PYTHON实现+优化+正则化+梯度检验主函数功能简介my.py需要的包读取数据初始化参数激活函数前向传播与反向传播损失值计算参数更新MomentumRMSpropAdam梯度检验预测和结果图绘制附录(完整代码)主文件my.py 完整神经网络PYTHON实现+优化+正则化+梯度检验 主函数 import numpy as np import matplotlib.pyplot ...

weixin_43398590的博客 1604

31、双相不锈钢直齿轮加工与性能研究及人工神经网络在焊接中的应用

本文研究了双相不锈钢直齿轮在不同加工方法(WEDM与滚齿加工)下的磨损行为,分析了表面粗糙度、齿厚变化、磨损率及润滑性能随转速的变化规律,并对比了两种工艺的优劣。同时,探讨了人工神经网络(ANN)在AA7050铝合金搅拌摩擦焊中的应用,通过建立工艺参数与焊接质量之间的预测模型,实现了对焊缝硬度和峰值温度的准确预测。研究为高性能齿轮制造和铝合金焊接提供了理论支持和技术参考,并提出了未来在润滑优化、加工工艺改进及智能控制方面的研究方向。

ggg99的专栏 151

基于STC8G1K08A单片机的PCA捕获外部信号(100~1000HZ)程序实现

基于STC8G1K08A单片机的PCA捕获外部信号(100~1000HZ)程序实现

weixin_74013772的博客 256

【机器学习】交叉验证、正则化实例Python代码实现

前言 机器学习常用的数据集网址:数据集 运行环境:python3.6(这里我用的anaconda的jupyter notebook) 1. 对比不同模型的交叉验证的结果 数据集来源:红酒数据集 这份数据集包含来自3种不同起源的葡萄酒的共178条记录。13个属性是葡萄酒的13种化学成分。通过化学分析可以来推断葡萄酒的起源。值得一提的是所有属性变量都是连续变量。 from skle...

Daycym的博客 7363

Modbus协议全家桶(C#纯原生完整版):ModbusRTU + ModbusTCP + ModbusASCII 协议规范+完整封装+工业级实战

你已经掌握了C#串口/网口原生核心API和工业通信协议本质,而今天的主角Modbus协议,是工业通信领域绝对的王者、通用的标准、入门的必修课,没有之一。凡是做工业通信开发,必会Modbus协议;市面上99%的工业设备(PLC、变频器、温控仪、传感器、流量计、扫码枪)都原生支持Modbus协议。Modbus协议不是单一协议,而是一个「协议家族」,我们常说的就是这个家族的三大核心成员,也是工业现场的全部Modbus应用形态。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 565

【PyTorch学习笔记】14:划分训练-验证-测试集,使用正则化项

划分训练-验证-测试集 简述 测试集一般都是客户用来验收模型的,是拿不到的,在Kaggle比赛里就是用来计算选手模型的score的集合。而训练集拿到以后要划分成训练集和验证集,只用训练集来训练,验证集用来以一定的频率对模型的performance做验证,也就是用来防止over-fitting的,在训练过程中可以得到验证集的Loss或者acc.的曲线,在曲线上就能大致判断发生over-fitting...

大桔骑士的学习笔记 2万+

别让 Claude Code 一直问你“能不能执行“:权限配置完全指南

Claude Code 提供了一套精细的权限配置机制,配置好权限设置,可以提速不少。这个小技巧需要掌握一下。

沐风 3844

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

使用PyTorch实现神经网络的正则化

1.背景介绍 正则化是机器学习和深度学习中的一种重要技术,它可以帮助减少过拟合,提高模型的泛化能力。在本文中,我们将讨论如何使用PyTorch实现神经网络的正则化。 1. 背景介绍 正则化是指在训练神经网络时,添加一些额外的惩罚项,以减少模型的复杂性,从而减少过拟合。常见的正则化方法包括L1正则化和L2正则化。L1正则化通过添加L1惩罚项来减少权重的绝对值,从而减少模型的复杂性。L2正则化通...

AI天才研究院 973

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【深度学习】过拟合 && L2正则化实现(pyTorch)

3.11 模型选择、欠拟合和过拟合 3.11.1 训练误差和泛化误差 训练误差(training error)指模型在训练数据集上表现出的误差; 泛化误差(generalization error)指模型在任意一个测试数据样本上表现出的误差的期望,并常常通过测试数据集上的误差来近似。 3.11.2 模型选择 验证集(validation set)为预留一部分在训练数据集和测试数据集以外的数据来进行模型选择,以进而调参; K折交叉验证(K-fold cross-validation): 由于验证数据集不参与模

Bryce-HJ 2032

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

31,32,33_过拟合、欠拟合的概念、L2正则化,Pytorch过拟合&欠拟合,交叉验证-Train-Val-Test划分,划分训练集和测试集,K-fold,Regularization

1.26.Pytorch过拟合&欠拟合 1.26.1.理想化情况 1.26.1.1.场景一:线性模型—房价预测 1.26.1.2.场景二:非线性模型—GPA 1.26.2.真实情况 1.26.3.模型学习能力 1.26.4.欠拟合与过拟合 1.26.Pytorch过拟合&欠拟合 以下参考:https://blog.youkuaiyun.com/weixin_43886278/article/details/104316321 1.26.1.理想化情况 1.26.1.1.场景一:线性模型—房价预测 横坐

涂作权的博客 1678

PyTorch实现L1,L2正则化以及Dropout

PyTorch实现L1,L2正则化以及Dropout 了解知道Dropout原理 用代码实现正则化(L1、L2、Dropout) Dropout的numpy实现 PyTorch中实现dropout L1,L2正则化 机器学习中几乎都可以看到损失函数后面会添加一个额外项,常用的额外项一般有两种,一般L1正则化和L2正则化,或者L1范数和L2范数。L1正则化和L2正则化可以看做是损失函数的惩罚项。所谓...

Jorah的博客 1516

图正则化:防止过拟合的PyG正则化技术

你是否在训练图神经网络(GNN)时遇到过训练精度接近100%,但测试精度却停滞不前的情况?当模型过度记忆训练数据中的噪声和特定模式,而无法泛化到新数据时,过拟合就发生了。在图数据中,由于节点与边的依赖性、图结构的复杂性以及标签分布的不平衡,过拟合问题尤为突出。 本文将系统介绍PyTorch Geometric(PyG)中可直接应用的六大正则化技术,包括: - 权重正则化(L1/L2)与 drop...

gitblog_00218的博客 947

pytorch基础(五)- 过拟合、正则化、学习率衰减

目录模型的学习能力 model capacity欠拟合 underfitting过拟合 overfittingTrain-Val-Test划分Train-Test划分Train-Val-Test划分交叉验证正则化奥卡姆剃刀原理正则化的作用L1 Regularization / L2 RegularizationL2 RegularizationL1 Regularization动量与学习率衰减动量学习率衰减ReduceLROnPlateau管理optimizer 自动衰减学习率StepLR固定多少epoch

sherryhwang的博客 1143

PyTorch 训练集、验证集、测试集、模型存档、正则化项

训练集(Training Dataset)是用来训练模型使用的。

m0_51448653的博客 1370

Pytorch(4):过拟合,正则化,CNN,ResNet原理和结构,nn.Module简介和data argumentation

1、过拟合与欠拟合 过拟合:模型过于复杂(高次项参数过多),实际简单。导致模型可以在训练集上表现很好,在测试集上很差 欠拟合,模型过于复杂,实际数据分布复杂,导致模型在训练集和测试集上都表现得很差。 deep learning 得layers越来越多,参数量越来越大,model capacity越大。 2、交叉验证:减少过拟合 每经过一次迭代训练,使用验证集的数据做一次validation查看它是否过拟合。 随这训练集的loss不断下降,测试集的error会升高。 使用random_spl

JJJJJJames的博客 2997

交叉验证在模型评估中的重要性

通过将数据集分成多个子集,在训练模型时轮流使用其中一个子集作为测试集,其余作为训练集,从而得到多个模型性能的综合评估。交叉验证通过在不同的训练集上训练模型并在不同的测试集上测试性能,能够较好地评估模型的泛化能力,减小过拟合风险。代码通过多次训练和验证,全面评估了模型的性能,并输出每个折的验证损失。通过合理地设置超参数,使用交叉验证可以更好地评估模型的性能,并找到模型的最佳参数配置,从而提高模型的泛化能力。K折交叉验证通过多次训练和测试,全面评估模型的性能,并使用平均结果减小评估的随机性。

coszhuang的博客 1754

Pytorch学习(五)——欠拟合和过拟合

欠拟合和过拟合训练误差和泛化误差欠拟合和过拟合 本文主要介绍模型训练过程中出现的欠拟合和过拟合问题,以及进行模型选和处理过拟合的一般方法。 训练误差和泛化误差 通俗来讲,训练误差(training error)指模型在训练数据集上表现出的误差。泛化误差(generalization error)指的是模型在任意一个测试数据样本上表现出的误差的期望,并常常通过测试数据集上的误差来近似。可以通过损失函数来计算训练误差和泛化误差。 在机器学习里,我们通常假设训练数据集和测试数据集里的每一个样本都是从同一个概率分布

qq_38816432的博客 1503

6.过拟合处理:确保模型泛化能力的实践指南——大模型开发深度学习理论基础

模型复杂度过高模型参数过多或网络层数太深,容易导致对训练数据的噪声进行拟合。训练数据不足数据样本量较少时,模型容易学习到数据中的随机误差。训练时间过长过度训练可能使模型逐步记忆训练数据的细节,而忽略了数据的普遍模式。过拟合是深度学习中常见的问题,但通过合理的策略可以有效缓解。Dropout:通过随机丢弃部分神经元,减少模型对局部特征的依赖,从而提高泛化能力。数据增强:通过对训练数据进行变换扩充数据集,帮助模型学习到更多样化的特征。L1/L2 正则化。

开源AI 专属 UI——papyrai-ui。《千界明彻录》(故事形式构建元思维)——胡说小说。更多思辨内容在公众号。 1619
上一篇: pytorch学习笔记5--pytorch基本运算2
下一篇: pytorch学习笔记7--循环神经网络、GAN
jeffery0628
博客等级 码龄11年 39粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值