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

攻破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.kler.cn/a/613334.html

相关文章:

  • DefogNet 与 TSID-Net:两种单图像去雾方法的对比分析
  • 天气预警API:守护安全的数字防线
  • Nacos Console 模块的作用是什么?是如何与 Server 端交互的?
  • 李宏毅机器学习笔记(1)—机器学习基本概念+深度学习基本概念
  • DBeaver配置postgresql数据库连接驱动
  • TF32 与 FP32 的区别
  • C++设计模式-状态模式:从基本介绍,内部原理、应用场景、使用方法,常见问题和解决方案进行深度解析
  • 如何保证LabVIEW软件开发的质量?
  • Vue 的响应式机制未生效——v-model 绑定的冰淇淋输入框值不更新
  • 每日一题之日期统计
  • 多个git账户团队写作
  • Python爬虫如何检测请求频率?
  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例6,TableView16_06 分页表格拖拽排序
  • Java制作简单的聊天室(复习)
  • 高精度除法
  • 深入浅出SPI通信协议与STM32实战应用(W25Q128驱动)(理论部分)
  • 重试机制之指针退避策略算法
  • python三大库之--numpy(一)
  • 【已解决】Git:为什么 .gitignore 不生效?如何停止跟踪已提交文件并阻止推送?
  • 如何快速看懂并修改神经网络