当前位置: 首页 > news >正文

攻破tensorflow,勇创最佳agent(2)---损失(loss) 准确率(accuracy)问题

实战播:

怎么判定一个模型好不好,你设置的值对不对?  需要再看几个值:

例如:

 model = Sequential()
            for units in model_structure:
                model.add(Dense(units, activation='relu'))
                model.add(Dropout(train_config.get('dropout_rate', 0.3)))
            model.add(Dense(1, activation='sigmoid'))

他的训练集表现损失值不好! 一直维持在0.68+;这就需要不好了;

那么 模型的损失(loss)值表现不佳 怎么解决这个问题?

  1. 调整学习率:如果学习率过高,可能导致损失值波动,建议尝试降低学习率,例如使用学习率衰减策略来动态调整学习率。(这个可以看我之前的:创作中心-CSDN)

  2. 数据增强:如果训练数据集规模较小,可以使用数据增强技术,例如随机旋转、剪裁等,增强数据的多样性和模型的泛化能力。(因为我现在是一个2分类问题,全部都是数据,所以就不考虑;唯一的方式就是增加数据量!)

  3. 模型正则化:增加Dropout层或使用L1/L2正则化,防止模型过拟合。例如,Dropout的概率可以调整为0.2到0.5之间。

  4. 调整网络结构:尝试不同的模型结构,比如增加或减少神经元的数量,或者导入复杂的层结构(例如,残差连接)来改善模型性能。

  5. 批量大小(Batch Size)调整:确保Batch Size适中,过小可能导致不稳定,过大则可能导致计算不精确。可以尝试调整Batch Size以优化训练过程。

dense层和dropout层:

想象你正在训练一只机器人助手,它需要学会识别不同的水果。这个机器人有很多“小助手”(神经元),它们一起合作来完成任务。

  1. Dense层(全连接层)

    • 小助手A:负责把水果的特征(颜色、形状、大小)整理成一份报告。
    • 小助手B:负责根据这份报告,判断水果是苹果、香蕉还是橘子。
    • 小助手C:负责把判断结果转化为机器人能理解的指令,比如“抓取苹果”。
    • 每个小助手都和其他小助手紧密合作,确保信息传递准确无误。

    在代码中,Dense(units, activation='relu') 就是添加一个全连接层,units 是小助手的数量,activation='relu' 是小助手们合作时使用的方式(ReLU激活函数)。

  2. Dropout层

    • 在训练过程中,为了让小助手们不要过于依赖某些特定的水果特征,机器人会随机让部分小助手“休息”。
    • 比如,今天小助手A和B休息了,小助手C和D继续工作。这样,机器人学会了在不同的小助手组合下完成任务,变得更加灵活和稳定。

    在代码中,Dropout(train_config.get('dropout_rate', 0.3)) 就是设置让30%的小助手随机“休息”,以防止过拟合。

总结

  • Dense层:像是一个团队,每个成员都紧密合作,负责特定的任务。
  • Dropout层:像是一个轮换机制,确保团队成员不会过于依赖某些特定的成员,从而提升整体的适应能力。

案例表达: (模型正则化)

1.当我尝试把dropout_rate从0.3调到0.5

... (原先是0.71-->0.68,同时准确率维持在0.55+)

model.add(Dropout(train_config.get('dropout_rate', 0.5)))

2.现在我把代码改为正则化:
model = Sequential()
for units in model_structure:
    model.add(Dense(units, activation='relu', kernel_regularizer=regularizers.l2(0.01)))  # 使用L2正则化
    # model.add(Dense(units, activation='relu', kernel_regularizer=regularizers.l1(0.01)))  # 使用L1正则化
model.add(Dense(1, activation='sigmoid'))

在此代码中,kernel_regularizer=regularizers.l2(0.01)添加了L2正则化,而kernel_regularizer=regularizers.l1(0.01)则为L1正则化。

因此,当我使用L1或者L2之后,还没有之前的手动效果好! 因此,这个训练集--->舍弃正则化!!!

L1与L2正则化的定义

  • L1正则化(Lasso回归):通过在损失函数中增加权重绝对值的和作为惩罚项,从而驱使某些权重减小到零,生成稀疏解,适合特征选择.
  • L2正则化(Ridge回归):通过增加权重平方和作为惩罚项,促使所有权重趋向较小的均匀值,而不是完全为零。它通过减少权重避免过拟合,增强模型的稳定性.

这两种正则化方法可以在模型中结合使用,以提高模型的泛化能力和抗干扰能力。

训练集(loss)和验证集(val_loss)

  • 训练集(loss):这就像是在练习题上不断练习,模型在这些题目上越来越熟练,错误越来越少。loss值越小,说明模型在训练数据上表现越好。
  • 验证集(val_loss):这就像是在考试题目上测试,loss值越小,说明模型在真实数据上的表现越好。

训练集(accuracy)和验证集(val_accuracy)

  • 训练集(accuracy):这就像是在练习题上答对的比例,accuracy越高,说明模型在训练数据上越熟练。
  • 验证集(val_accuracy):这就像是在考试题上答对的比例,accuracy越高,说明模型在真实数据上的表现越好。

数据

  1. epoch 1:模型刚开始训练,loss和val_loss都很高,accuracy和val_accuracy也很低。就像刚上学的孩子,刚开始学东西,什么都不会。
  2. epoch 5:loss和val_loss都在下降,accuracy和val_accuracy也在上升。就像孩子逐渐掌握知识,练习题和考试题都能答对更多。
  3. epoch 10:loss和val_loss继续下降,accuracy和val_accuracy继续上升。就像孩子越来越熟练,考试成绩也越来越好。
  4. epoch 15:loss和val_loss下降变慢,accuracy和val_accuracy也趋于稳定。就像孩子已经掌握了大部分知识,进一步提高需要更多的努力。

总结

数据表示:

模型在训练过程中的表现,

loss和val_loss越小,accuracy和val_accuracy越高,说明模型越来越好。

就像孩子从不会到会,从生疏到熟练,再到精通,这是一个不断学习和进步的过程。

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

相关文章:

  • 数据清洗:基于python抽取jsonl文件数据字段
  • 【C++11】智能指针:std::shared_ptr
  • FPGA设计中IOB约束
  • 【杂记四】刚体运动 +SE(3)
  • 【深度学习基础 1】 TensorFlow 框架
  • 插值法笔记 ——武汉理工统计 周
  • STM32 ADC和DAC详解
  • 使用 HBuilder 打包 ruoyi-mall-uniapp 并在微信开发者工具中模拟运行的教程
  • 第二章:影响优化的计算机行为_《C++性能优化指南》notes
  • Elasticsearch DSL查询语法
  • ES 字段的映射定义了字段的类型及其行为
  • 142. 环形链表 II——考察数学,难!
  • k8s存储介绍(二)Secret
  • 【AI News | 20250325】每日AI进展
  • 救生滚钩,高效救援的多功能生命守护者|鼎跃安全
  • 详解图卷积网络
  • 游戏引擎学习第183天
  • MyBatis-Plus缓存机制深度解析与SpringBoot整合实战
  • [c语言日寄MAX]深度解析:大小端字节序
  • 36.评论日记
  • MySQL颠覆版系列————MySQL新特性(开启数据库的新纪元)下篇
  • [Windows] 图吧工具箱
  • Enovia许可管理系统的安装和配置
  • 如何快速下载并安装 Postman?
  • 从医疗大模型到综合医疗智能体:算法、架构与路径全流程分析
  • java -jar 指定spring配置文件
  • Ubuntu 24.04 启动后某些应用程序启动非常慢
  • 【WPF】MVVM模式实现数据绑定以及Command事件绑定
  • python工厂模式
  • ML29_先验概率与边缘概率的对比